我在Oracle 10g企业上使用SQL * Plus 9.2。我创建了一些脚本,使用我通过命令提示符传递的参数进行基本插入。我应该能够在循环中运行一堆插入,这似乎是合乎逻辑的。所以我尝试了以下内容:
--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
。同样的非结果)
答案 0 :(得分:0)
在您的插入语句中,您将org(i)用单引号括起来。你不应该这样,你可能会将单词org(i)作为值插入表中。所以你的insert语句应该是
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));