用游标运行oracle过程

时间:2013-05-24 09:14:04

标签: oracle plsql oracle11g plsqldeveloper

我对db没有经验(实际上根本没有),我遇到了一个问题:
我有oracle 11g,我正在使用PL / SQL开发人员 我有一个简单的程序:

type t_ref_cursor is ref cursor;

procedure fakeProc (
       io_cursor        in out t_ref_cursor
      )
   is
      begin

      open io_cursor for
      SELECT * from myTable;

 end fakeProc;

现在我想将它作为SQL窗口运行(不在测试窗口中) 我想要跑的是什么:

 v_cur         cursor;
 begin
    fakeProc(:v_cur);
 end;

我收到错误: ORA-00900:无效的SQL语句 ORA-01008:并非所有变量都绑定

那么你能指出一个正确的方法来运行这样的程序(使用begin -end)吗?

2 个答案:

答案 0 :(得分:1)

PL / SQL Developer版本7.1.4不支持引用游标:

SQL> VARIABLE p_cur REFCURSOR;
REFCURSOR not supported

更高版本可能支持它们(在命令窗口中),或者您可以使用SQL * Plus。这是SQL * Plus的直接复制粘贴:

SQL> CREATE OR REPLACE PROCEDURE prc (p_cur OUT SYS_REFCURSOR) IS
  2  BEGIN
  3     OPEN p_cur FOR SELECT * FROM dual;
  4  END;
  5  /

Procedure created.

SQL> -- declare variable
SQL> VARIABLE p_cur REFCURSOR;
SQL> BEGIN
  2     prc(:p_cur);
  3  END;
  4  /

PL/SQL procedure successfully completed.

SQL> print p_cur

DUM
---
X

答案 1 :(得分:1)

使用类似的东西:

declare v_cur         SYS_REFCURSOR;
begin
  fakeProc(v_cur);
end;

程序如下:

CREATE OR REPLACE PROCEDURE FAKEPROC( 
    io_cursor        in out SYS_REFCURSOR
  )
IS 
      begin

      open io_cursor for
      SELECT * from resource_map;


END FAKEPROC;

完成使用后,不要忘记关闭光标。