我有一组存储在表类型变量(varchar2)中的insert命令。记录将插入到同一个表的相同列中。
如何编写forall循环来执行这些插入查询?
由于
答案 0 :(得分:0)
您可以循环嵌套表,如以下示例所示(来自PL/SQL Collections and Records - Nested Tables)
declare
type table_varchar is table of varchar2(4000);
tv_inserts table_varchar := table_varchar();
begin
tv_inserts.extend();
tv_inserts(tv_inserts.count) := 'insert into test_table(col1, col2) values(1, 10)';
tv_inserts.extend();
tv_inserts(tv_inserts.count) := 'insert into test_table(col1, col2) values(2, 20)';
tv_inserts.extend();
tv_inserts(tv_inserts.count) := 'insert into test_table(col1, col2) values(3, 30)';
for ind in tv_inserts.first..tv_inserts.last
loop
execute immediate tv_inserts(ind);
end loop;
end;
您可以通过execute immediate构造运行动态创建的查询。
这样说,您可以使用以下示例代码解决您的问题。
declare
type table_varchar is table of varchar2(4000);
tv_inserts table_varchar := table_varchar();
begin
tv_inserts.extend();
tv_inserts(tv_inserts.count) := '1';
tv_inserts.extend();
tv_inserts(tv_inserts.count) := '2';
tv_inserts.extend();
tv_inserts(tv_inserts.count) := '3';
for ind in tv_inserts.first..tv_inserts.last
loop
execute immediate 'insert into test_table(col1) values(:a)'
using tv_inserts(ind);
end loop;
end;
forall statement可以与执行立即数一起使用,fixing the table name in the string可以与下面的示例一样使用
{{1}}
请注意,如果没有先前处理输入数组,这种方法是不可行的。