Oracle 创建pl/sql存储过程时发生编译错误

Oracle 创建pl/sql存储过程时发生编译错误,oracle,stored-procedures,plsql,compilation,cursor,Oracle,Stored Procedures,Plsql,Compilation,Cursor,我正在尝试创建一个使用REF CURSOR的存储过程。我用这个来寻找一些例子。首先,我创建了类型: 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; 然后创建包: CREATE OR REPLACE PACKAGE package AS FUNCTION get_by_i

我正在尝试创建一个使用REF CURSOR的存储过程。我用这个来寻找一些例子。首先,我创建了类型:

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;
然后创建包:

CREATE OR REPLACE PACKAGE package AS 
FUNCTION get_by_id(p_id CHAR) RETURN ROW_TYPE_TABLE PIPELINED;
END package;
但当使用以下命令创建包体时,我收到以下消息PLS-00103:遇到符号“FOR”

我已经检查了如何使用open for语句,但没有发现我的错误

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 ;
你认为提交的代码有什么问题吗


注意。

PL/SQL函数具有以下结构:

FUNCTION <function name>(parameter1 <type>, ...) RETURN <return type> IS
    <variable declarations>
BEGIN
    <function body (code)>
END <function name>;
函数(参数1,…)返回为
开始
结束;

您忘记了
开始

servCursor系统参考光标之后添加
BEGIN