我创建了#34; object"
类型的自定义数据类型create type myrecord is object(col1 varchar2(10),col2 varchar2(10));
我创建了一个类型为记录的表
create type mytableobject is table of myrecord;
现在我填满了桌子" mytableobject"使用数据
"execute immediate" (select * from table1) bulk collect into mytableobject.
我想在STORED程序中返回此mytableobject。
我如何实现这一目标? 我该如何调用该程序?
答案 0 :(得分:3)
您可以将自己的类型用作存储过程的OUT
参数。您展示的表格数量没有多大意义,所以我认为这是您必须要做的事情:
create or replace procedure myproc(mytable out mytableobject) is
begin
select myrecord(col1, col2)
bulk collect into mytable
from table1;
end myproc;
/
然后,您可以通过声明该类型的局部变量并将其传入来从另一个过程或匿名块中调用它:
declare
tab mytableobject;
begin
myproc(tab);
end;
/
您似乎更有可能想要一个功能,特别是因为您提到了返回它。这几乎是一样的:
create or replace function myfunc
return mytableobject is
mytable mytableobject;
begin
select myrecord(col1, col2)
bulk collect into mytable
from table1;
return mytable;
end myfunc;
/
declare
tab mytableobject;
begin
tab := myfunc;
end;
/
但更有用的是你可以从SQL调用该函数:
select * from table(myfunc);