2015-04-06 42 views
-1

我創建了一個返回表類型的函數,即兩個列值。我想通過select語句插入到其他表中時使用這些單獨的列。如何在oracle中引用返回表類型的函數的個別元素

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

這裏是我的代碼: – Rajus 2015-04-06 08:58:43

+0

這裏是我的代碼:首先我已經創建了對象類型,然後嵌套表類型在函數返回中使用此嵌套表類型。 創建或替換類型emp_sal作爲對象(empno號,sal號); 創建或替換nt_emp_sal是emp_sal的表; 創建或替換函數emp_fun(deptno號碼)return nt_emp_sal is l_nt_emp_sal nt_emp_sal:= nt_emp_sal(); begin select emp_sal(empno,sal)從emp收集到l_nt_emp_sal中,其中deptno = p_deptno; return l_nt_emp_sal; 結束; – Rajus 2015-04-06 09:10:00

+0

請不要使用評論提供更多詳情。相反,編輯你的問題。我已經爲你做了。如果需要,請隨時查看這些更改和/或進一步編輯您的問題。 – 2015-04-06 09:17:44

回答

0

你基本上需要使用TABLE()關鍵字查詢周圍的函數調用來使用的結果,就像任何其他表。鑑於你的示例代碼,你會寫類似:

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

從DOC "Using Pipelined and Parallel Table Functions"

表函數返回一個集合類型實例,並可以通過調用從功能來查詢像表查詢的子句。表函數使用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 
+0

感謝Sylvain的快速回復 – Rajus 2015-04-06 09:52:35

+0

解決了我的問題 – Rajus 2015-04-06 09:52:51

+0

@Rajus很高興爲您提供幫助。如果您覺得這有幫助,請隨時[投票和/或接受答案](http://stackoverflow.com/help/someone-answers)。這是在StackOverflow上說「謝謝」的主要方式。 – 2015-04-06 11:58:24

相關問題