我使用的工具是PL/SQL,数据库是oracle10g的
在command windows模式下,我做的以下操作
SQL> variable x refcursor
结果却报 REFCURSOR not supported这个错误
我尝试改成
SQL> variable x ref cursor
结果还是报一样的错误
我感觉我定义这个游标应该没什么问题啊,上论坛看帖子,其他人也遇到了这个问题,但是好像都没有有效解决的。
麻烦有解决过的人帮忙指点一下,小弟在这里谢过了。

解决方案 »

  1.   

    貌似PL/SQL不认识sys_refcuror
    以下是我写的,都不可以
    SQL> variable x sys_refcursor
    SYS_REFCURSOR unknown datatype
     
    SQL> variable x refcuror
    REFCUROR unknown datatype
     
    SQL> variable x sys_refcuror
    SYS_REFCUROR unknown datatype
      

  2.   

    declare
    x sys_refcursor;
    begin
    -- do whatever you want
    end;
    /
      

  3.   

    SQL> declare
      2  x sys_refcursor
      3  begin
      4  open :x for select * from dev_info;
      5  end;
      6  /
    报错:
    declare
    open :x for select * from zzdT;
    end;
     
    ORA-06550: line 5, column 6:
    PLS-00103: Encountered the symbol "" when expecting one of the following:   constant exception <an identifier>
       <a double-quoted delimited-identifier> table LONG_ double ref
       char time timestamp interval date binary national character
       nchar
      

  4.   

    4  open :x for select * from dev_info; 改成open x for select * from dev_info就可以了
      

  5.   

    按照您说的改了以后就是报这个错。
    SQL> declare
      2  x sys_refcursor;
      3  begin
      4  open x for select * from dev_info
      5  end;
      6  /
     
    declare
    x sys_refcursor;
    begin
    open x for select * from dev_info
    end;
     
    ORA-06550: line 8, column 0:
    PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:   begin case declare end exception exit for goto if loop mod
       null pragma raise return select update while with
       <an identifier> <a double-quoted delimited-identifier>
       <a bind variable> << close current delete fetch lock insert
       open rollback savepoint set sql execute commit forall merge
       pipe
      

  6.   

    SQL> declare 
      2 type xx is ref cursor;
      3  x xx; 
      4  begin 
      5  open x for select * from dev_info 
      6  end; 
      7  / 
      

  7.   

    这种写法果然是好使的 不知道为什么variable x refcursor这样就不行 我是参照tom先生写的oracle9i10g编程艺术上面一个字不落的写下来的 他这么写还正常运行出结果了 怎么到我这就不行了呢?
      

  8.   

    该命令需要在sqlplus下运行才会被识别,在PL/SQL中即即使在COMMAND中也不会被识别的(可能较高的PL/SQL版本识别吧),我刚测试了下。在SQLPLUS或者sqlplusw下运行正常:
    SQL> set serveroutput on;
    SQL> var x refcursor;
    SQL>
    但是是:refcursor,不是SYS_REFCURSOR,当你在sqlplus下输入sys_refcursor时候,会提出哪些是可以输入的:
    SQL> var x sys_refcursor;用法: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
                        VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
                        NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
                        BINARY_FLOAT | BINARY_DOUBLE ] ]
    在PL/SQL中执行同一个数据库时提示:
    SQL> var r_cur refcursor;
    REFCURSOR not supportedSQL> var r_cur sys_refcursor
    SYS_REFCURSOR unknown datatype