作为SYS_REFCURSOR参数传递的内容

时间:2011-11-28 11:13:08

标签: oracle stored-procedures cursor arguments

这里我在Oracle中有一个存储过程:

CREATE OR REPLACE PROCEDURE StP_COMPS
IS
 CV_1 SYS_REFCURSOR;
BEGIN
 OPEN CV_1  FOR SELECT * FROM COMPUTERS;
END;

当我执行像EXEC SP_COMPS这样的过程时,我没有收到任何错误,SQL Developer只显示“ananymous block completed”。然后我将程序更改为

CREATE OR REPLACE PROCEDURE SP_COMPS
      (cv_1 OUT SYS_REFCURSOR)
IS
BEGIN
 OPEN CV_1  FOR SELECT * FROM COMPUTERS;
END;

当我执行时,我得到错误,说明参数类型的数量是错误的。如果它只是一个输出参数,我很好奇我可以发送什么作为过程的参数。我想在过程中运行查询的结果集。我在这里做错了什么?

P.S。当我尝试通过右键单击该过程并选择Run I get:

来运行该过程
 DECLARE
  CV_2 sys_refcursor;
 BEGIN

 SP_COMPS(
    CV_2 => CV_2
    );

 :CV_2 := CV_2; -- <--Can't understand this part
 END;

1 个答案:

答案 0 :(得分:1)

你有一个变量,你应该执行如下程序:

DECLARE
  CV_1 SYS_REFCURSOR;
BEGIN
  SP_COMPS(CV_1);
  --use cv_1
END;

更新(OP更新后):这是一个简单的测试模板。如下所述:Easiest method to test an Oracle Stored Procedure,只需运行该代码,并选择ref_cursor作为cv2变量的类型。