0

我对 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)?

4

2 回答 2

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;

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

于 2013-05-24T09:27:46.480 回答
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
于 2013-05-24T09:24:42.393 回答