我有一个问题:我已经存储了过程A(返回三个参数)。我想在循环中调用过程A,并将这三个参数插入临时表并返回此表。
DECLARE
Type TestTable IS TABE OF NUMBER; -- for example one parameter!!!
myTable TestTable;
BEGIN
LOOP
A(o_param1, o_param2, o_param3);
-- myTable insert o_param1,2,3;
-- insert into myTable values(99); - here I have error PL/SQL: ORA-00942: table or view does not exist
END LOOP;
SELECT * FROM myTable;
END;
我不知道该怎么做-myTable插入o_param1,2,3;。请帮助我。
答案 0 :(得分:1)
在循环内写插入语句。因此对于每个循环,您都可以将值插入到表中,并在循环之后进行提交。
但是您不能在匿名块内的表中使用select *。从块中取出并在结束后;您可以尝试运行从表中选择*来查看输出。
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
答案 1 :(得分:0)
首先,您无法将数据直接插入到myTable中(插入到myTable中),因为在脚本的声明部分中声明的Oracle表类型在sql语句中不可见(例外-使用带有已声明类型的“批量收集”进行插入,已声明在Oracle词典中)。 即使使用myTable(idx)在myTable中插入数据,也无法在脚本外选择数据,因为myTable仅存在于脚本内。 我认为最简单的方法是创建普通表或全局临时表。如果您要使用全局临时表,请使用“ ON COMMIT PRESERVE ROWS”(如果您在插入后使用commit)创建它