CREATE OR REPLACE PROCEDURE proc_xzh_demo( p_rownum IN NUMBER, p_cursor OUT SYS_REFCURSOR ) AS BEGIN OPEN p_cursor FOR SELECT *FROM emp WHERE ROWNUM<p_rownum; END proc_xzh_demo; /
这里没有问题
然后定义块结构执行该过程:
DECLARE v_cursor SYS_REFCURSOR; v_rownum NUMBER:=5; v_record emp%ROWTYPE; BEGIN CALL proc_xzh_demo(v_rownum,:v_cursor); LOOP FETCH v_cursor INTO v_record; EXIT WHEN v_cursor%NOTFOUND; END LOOP; CLOSE v_cursor; END; /
DECLARE V_CURSOR SYS_REFCURSOR; V_ROWNUM NUMBER := 5; V_RECORD EMP%ROWTYPE; BEGIN PROC_XZH_DEMO(V_ROWNUM, V_CURSOR); LOOP FETCH V_CURSOR INTO V_RECORD; EXIT WHEN V_CURSOR%NOTFOUND; END LOOP; CLOSE V_CURSOR; END; /