2017-07-11 38 views
0

當我嘗試編譯下面的代碼我得到的錯誤:爲什麼`SYS.odcivarchar2list`不能以`PIPELINED`功能工作

[Error] PLS-00382 (15: 17): PLS-00382: expression is of wrong type

代碼

CREATE OR REPLACE FUNCTION test_pipe 
    RETURN SYS.odcivarchar2list 
    PIPELINED 
AS 
    CURSOR cEmploee 
    IS 
     SELECT first_name FROM employee; 

BEGIN 
    FOR i IN cEmploee 
    LOOP 
     DBMS_OUTPUT.put_line (i.first_name); 
     PIPE ROW (sys.odcivarchar2list (i.first_name)); 
     EXIT WHEN cEmploee%NOTFOUND; 
    END LOOP; 

    RETURN; 
END; 
/

任何人都可以解釋,如果SYS.odcivarchar2list作品與PIPELINED功能與否。讓我知道如何解決這個問題。謝謝。

回答

2

的 '變種' 的類型應該是VARCHAR2:

CREATE OR REPLACE FUNCTION test_pipe 
    RETURN SYS.odcivarchar2list 
    PIPELINED 
AS 
    CURSOR cEmploee 
    IS 
     SELECT first_name FROM employee; 

    var employee.first_name%type; 
BEGIN 
    FOR i IN cEmploee 
    LOOP 
     DBMS_OUTPUT.put_line (i.first_name); 
     var := i.first_name; 
     PIPE ROW (var); 
     EXIT WHEN cEmploee%NOTFOUND; 
    END LOOP; 

    RETURN; 
END; 
/

select * from table(test_pipe) 
+0

但爲什麼它不以'SYS.odcivarchar2list'工作。我知道使用'varcahr2'它應該工作。好吧,我編輯我的問題,以更好地理解。 – XING

+3

你沒有返回列表@XING。您將逐行返回數據,作爲VARCHAR2,Oracle知道如何將該函數的調用者轉換爲ODCIVARCHAR2LIST。 – Ben

+1

@Ben。感謝您的回覆。 – XING

相關問題