oracle过程返回自定义数据类型记录表

时间:2014-05-02 17:10:58

标签: oracle stored-procedures plsql record custom-data-type

我创建了#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。

我如何实现这一目标? 我该如何调用该程序?

1 个答案:

答案 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);

SQL Fiddle