我目前正在使用此代码块从我的函数返回行的集合。从打包函数中返回集合以用于select
--Source: http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html
create or replace type t_col as object (
i number,
n varchar2(30)
);
/
create or replace type t_nested_table as table of t_col;
/
create or replace function return_table return t_nested_table as
v_ret t_nested_table;
begin
v_ret := t_nested_table();
v_ret.extend;
v_ret(v_ret.count) := t_col(1, 'one');
v_ret.extend;
v_ret(v_ret.count) := t_col(2, 'two');
v_ret.extend;
v_ret(v_ret.count) := t_col(3, 'three');
return v_ret;
end return_table;
/
这一点我通过发出SQL
select * from table(return_table);
对象类型不能在一个包中定义的来电,我尝试使用它的工作(在PL/SQL)记录类型,但我无法选择从我能在这里以同样的方式。
如何使用包内的函数实现此结果?
感谢您的回答,当你说“用你的包内SQL对象”,他们仍需要在包裹外面定义吗?我试图在一个包中定义一个对象,并得到“PLS-00540:在这种情况下不支持的对象。”。我想尝试将所有的类型定义保存在它们使用的包中。 – TownCube
是SQL对象始终在包外部定义。在包内定义的PLSQL记录类型不能从SQL访问。如果你想从SELECT中查询表对象,你将需要SQL对象(定义为一个包之外的类型)。我个人倾向于使用一致命名的SQL对象,而不是由Oracle选择的任意名称。 –