日期:2014-05-17  浏览次数:21004 次

在块中调用过程碰到的问题
定义了过程:proc_xzh_demo,用来提供游标参数传递
用来保存emp的前p_rownum条数据
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;
/

但是一直报这样的错:
第 6 行出现错误:
ORA-06550: 第 6 行, 第 8 列:
PLS-00103: 出现符号 "PROC_XZH_DEMO"在需要下列之一时:
:= . ( @ % ;
符号 ":=" 被替换为 "PROC_XZH_DEMO" 后继续。
找了大半天的原因都看不出来,有高手能帮我解决一下吗?万分感谢!

------解决方案--------------------
引用:
定义了过程:proc_xzh_demo,用来提供游标参数传递
用来保存emp的前p_rownum条数据
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;
/

但是一直报这样的错:
第 6 行出现错误:
ORA-06550: 第 6 行, 第 8 列:
PLS-00103: 出现符号 "PROC_XZH_DEMO"在需要下列之一时:
:= . ( @ % ;
符号 ":=" 被替换为 "PROC_XZH_DEMO" 后继续。
找了大半天的原因都看不出来,有高手能帮我解决一下吗?万分感谢!


语法错误:
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&