Oracle /函数可能返回两种不同的类型

时间:2018-02-08 10:57:35

标签: oracle function plsql

我有一个管道表函数,它返回一组类型:

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。

问题是我不能使用两个函数,因为我有一个应用程序必须调用一个函数而不管输出。

我可以创建一个函数,根据特定条件调用两个函数之一并保持输出吗?

任何帮助将不胜感激

1 个答案:

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