我正在尝试创建一个使用 REF CURSOR 的存储过程。我正在使用此website来查找一些示例。首先我创建了类型:
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”
我已查看Oracle official website如何使用 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 ;
您是否在提交的代码中看到任何问题?
问候。
答案 0 :(得分:2)
PL / SQL函数具有以下结构:
FUNCTION <function name>(parameter1 <type>, ...) RETURN <return type> IS
<variable declarations>
BEGIN
<function body (code)>
END <function name>;
你忘记了BEGIN
。