Проблемы с выполнением запросов на вставку с переменными varray.
Вопрос
Я использую SQL*Plus 9.2 на предприятии Oracle 10g.Я создал несколько сценариев, которые выполняют базовые вставки, используя параметры, которые я передаю через командную строку.Казалось логичным, что я смогу запускать несколько вставок в цикле.Итак, я попробовал следующее:
--begin
DECLARE
TYPE va_orgs IS TABLE OF nbr.lien_item.lien_item_name%type;
org va_orgs := va_orgs('RTA','RTB','RTE','RTI','RTM','RTT');
BEGIN
FOR i in org.FIRST .. org.LAST
LOOP
INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', 'org(i)');
COMMIT;
END LOOP;
END;
/
--end
Когда я запускаю сценарий, я получаю сообщение об успешном выполнении PL/SQL.Я пробовал отлаживать и использовать dbms_output
отображать значения org(i)
.Все выглядит нормально.Но строки никогда не попадают в базу данных.Как только я делаю выбор, новых строк нет.Есть ли какой-нибудь трюк с циклами и вставками?
(я тоже пробовал IS VARRAY(6) OF
на месте IS TABLE OF
.Тот же безрезультат)
Решение
В операторе вставки у вас есть org(i) в одинарных кавычках.У вас этого не должно быть, вы, вероятно, вставляете слова org(i) в качестве значений в таблицу.Итак, ваш оператор вставки должен быть
INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', org(i));