我有疑问:我有存储过程A(返回三个参数)。我想在循环中调用过程A并将这三个参数插入temporaty表并返回此表。
宣布 …
在循环中写入insert语句。因此,对于每个循环,您可以将值插入表中,并在循环后进行提交。
但是你不能在匿名块中有一个select * from table。从块中移除并在结束后移除;你可以尝试运行select * from table来查看输出。
BEGIN LOOP A(o_param1, o_param2, o_param3); -- myTable insert o_param1,2,3; insert into myTable values (o_param1, o_param2, o_param3); END LOOP; commit; --SELECT * FROM myTable;- END; SELECT * FROM myTable; > Blockquote
首先,您无法直接将数据插入myTable(插入到myTable中),因为在脚本的声明部分中声明的Oracle表类型在sql语句中不可见(例外 - 使用带有类型的'bulk collect'插入,在Oracle字典中声明)。 即使您使用myTable(idx)在myTable中插入数据......也无法在脚本之外选择它,因为myTable仅存在于脚本中。 我认为最简单的方法是创建通常的表或全局临时表。如果你将使用全局临时表,使用'ON COMMIT PRESERVE ROWS'创建它(如果你在插入后使用commit)