我有一个管道表函数,它返回一组类型:
create or replace FUNCTION test(A varchar2 )
RETURN type_As PIPELINED as row_type type_A;
Begin
...
select type_A(...)
into row_type
from dual;
PIPE ROW(row_type);
return ;
end;
我创建了一个新类型type_B和集合type_Bs。 我需要的是根据函数内的条件返回type_As或type_Bs。
问题是我不能使用两个函数,因为我有一个应用程序必须调用一个函数而不管输出。
我可以创建一个函数,根据特定条件调用两个函数之一并保持输出吗?
任何帮助将不胜感激
答案 0 :(得分:0)
返回引用游标怎么样?看看:
SQL> create or replace function p_test (par_tab in varchar2)
2 return sys_refcursor
3 is
4 lc sys_refcursor;
5 begin
6 if par_tab = 'D' then
7 open lc for select deptno, dname, loc from dept;
8 elsif par_tab = 'E' then
9 open lc for select empno, ename, sal from emp;
10 end if;
11
12 return lc;
13 end;
14 /
Function created.
SQL>
让我们测试一下:
SQL> select p_test('E') from dual;
P_TEST('E')
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
EMPNO ENAME SAL
---------- ---------- ----------
7839 KING 5000
7698 BLAKE 2850
7782 CLARK 2450
7566 JONES 2975
7788 SCOTT 3000
7902 FORD 3000
7369 SMITH 800
7499 ALLEN 1600
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
14 rows selected.
另一个:
SQL> select p_test('D') from dual;
P_TEST('D')
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>