存储过程的结果保存在表变量中

时间:2019-02-07 11:19:02

标签: oracle stored-procedures plsql

我有一个问题:我已经存储了过程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;。请帮助我。

2 个答案:

答案 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)创建它