2014-02-11 74 views
0

我試圖創建一個使用REF CURSOR的存儲過程。我使用這個website找到一些例子。首先,我創建類型:創建pl/sql存儲過程時編譯時出錯

CREATE OR REPLACE TYPE ROW_TYPE IS OBJECT (
"COL1" CHAR(3 BYTE), 
"COL2" NUMBER(4,0) 
) 

CREATE TYPE ROW_TYPE_TABLE AS TABLE OF ROW_TYPE; 

然後創建的包:出現符號「FOR」

CREATE OR REPLACE PACKAGE package AS 
FUNCTION get_by_id(p_id CHAR) RETURN ROW_TYPE_TABLE PIPELINED; 
END package; 

但使用以下命令我得到以下信息PLS-00103創建包體時

我檢查了Oracle official website如何使用公開的聲明,但無法找到我的錯誤。

CREATE OR REPLACE PACKAGE BODY package AS 
FUNCTION get_by_id(p_idCHAR) RETURN SERV_TYPE_TABLE PIPELINED IS 
    OUT_REC SERV_TYPE_TABLE := SERV_TYPE_TABLE(null,null); 
    servCursor sys_refcursor; 
    OPEN servCursor FOR 'SELECT * FROM SERV WHERE COL1= :1' USING p_id; 

    LOOP 
     FETCH servCursor INTO OUT_REC.COL1, OUT_REC.COL; 
     EXIT WHEN servCursor%NOTFOUND; 
     PIPE ROW(OUT_REC); 
    END LOOP; 
    CLOSE servCursor; 
    RETURN; 
END get_by_id; 
END package ; 

您是否在提交的代碼中看到任何問題?

問候。

+2

在'servCursor sys_refcursor'後面加'BEGIN'行 –

回答

2

PL/SQL函數的結構爲:

FUNCTION <function name>(parameter1 <type>, ...) RETURN <return type> IS 
    <variable declarations> 
BEGIN 
    <function body (code)> 
END <function name>; 

你忘了BEGIN