我希望从 Oracle 函数返回结果表。使用游标是最简单的方法,但我必须处理它的应用程序不会接受游标作为返回值。另一种方法是创建一个类型(可能包装在一个包中)以配合此功能。但是,创建多个类型(我有 4 个以上的函数要编写)只是为了返回表结果似乎有些多余。我还缺少其他选择吗?
最佳答案
更新:请参阅无大小限制的 TABLE 解决方案的第一条评论。
返回一个 VARRAY 或使用一个 PIPELINED 函数从中查询。
对于 VARRAY 查找 this文章的细节。那里的代码示例:
CREATE OR REPLACE TYPE EMPARRAY is VARRAY(20) OF VARCHAR2(30) / CREATE OR REPLACE FUNCTION getEmpArray RETURN EMPARRAY AS l_data EmpArray := EmpArray(); CURSOR c_emp IS SELECT ename FROM EMP; BEGIN FOR emp_rec IN c_emp LOOP l_data.extend; l_data(l_data.count) := emp_rec.ename; END LOOP; RETURN l_data;
结束;
对于 PiPELINED 函数结帐 here .代码示例:
create or replace function Lookups_Fn return lookups_tab pipelined is v_row lookup_row; begin for j in 1..10 loop v_row := case j when 1 then lookup_row ( 1, 'one' ) --... when 7 then lookup_row ( 7, 'seven' ) else lookup_row ( j, 'other' ) end; pipe row ( v_row ); end loop; return; end Lookups_Fn; / select * from table ( Lookups_Fn );
关于oracle - 如何在没有自定义类型或游标的情况下从 Oracle 函数返回表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608271/