我创建了一个返回表类型的函数,即两列值。我希望在通过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;
答案 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