如何在oracle中引用返回表类型的函数的各个元素

时间:2015-04-06 08:54:01

标签: oracle plsql

我创建了一个返回表类型的函数,即两列值。我希望在通过select语句插入到其他表时使用这些单独的列。

create or replace type emp_sal as object(empno number,sal number);

create or replace nt_emp_sal is table of emp_sal;

create or replace function emp_fun(deptno number) 
return nt_emp_sal 
is
  l_nt_emp_sal nt_emp_sal := nt_emp_sal();
begin
  select emp_sal(empno,sal) bulk collect 
    into l_nt_emp_sal 
    from emp where deptno=p_deptno;
  return l_nt_emp_sal;
end;

1 个答案:

答案 0 :(得分:0)

你基本上需要在函数调用的查询中使用TABLE()关键字来使用结果,就像任何其他表一样。根据您的示例代码,您将编写如下内容:

INSERT INTO ... (colA, colB)
SELECT * FROM TABLE(emp_fun(123))
--            ^^^^^^            ^

来自文档"Using Pipelined and Parallel Table Functions"

  

表函数返回一个集合类型实例,可以通过调用查询的FROM子句中的函数来查询表。表函数使用TABLE关键字。


您可以在http://oracle-base.com/articles/misc/pipelined-table-functions.php找到详细示例:

CREATE TYPE t_tf_row AS OBJECT (
  id           NUMBER,
  description  VARCHAR2(50)
);
/

CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;
/

-- Build the table function itself.
CREATE OR REPLACE FUNCTION get_tab_tf (p_rows IN NUMBER) 
RETURN t_tf_tab 
AS
  l_tab  t_tf_tab := t_tf_tab();
BEGIN
   -- func def here
   -- ...
END;
/

以下是相关部分:

SELECT *
FROM   TABLE(get_tab_tf(10))
--     ^^^^^^           ^
ORDER BY id DESC