Sql PLS-00201:标识符';光标';必须申报

Sql PLS-00201:标识符';光标';必须申报,sql,oracle,plsql,Sql,Oracle,Plsql,我在stackoverflow中看到了很多类似的问题,但是没有人回答我的问题 问题在哪里 CREATE OR REPLACE PROCEDURE "PR_TESTE"( sl_cursor OUT SYS_REFCURSOR) IS stm varchar(30000); BEGIN stm := 'SELECT * from tb_device_type'; OPEN sl_cursor FOR stm ; END; 及 您的代码中没有问题。问题可能出在调用此

我在stackoverflow中看到了很多类似的问题,但是没有人回答我的问题

问题在哪里

CREATE OR REPLACE
PROCEDURE "PR_TESTE"( sl_cursor OUT SYS_REFCURSOR)  
IS
    stm varchar(30000);
BEGIN
    stm := 'SELECT * from tb_device_type';
    OPEN sl_cursor FOR  stm ;
END;


您的代码中没有问题。问题可能出在调用此过程的函数/proc中。确保光标已在此处定义。 我将您的表tb\U设备类型替换为tab。这段代码很好用

CREATE OR REPLACE
PROCEDURE "PR_TESTE"( sl_cursor OUT SYS_REFCURSOR)  
IS
    stm varchar(30000);
BEGIN
    stm := 'SELECT * from tab';
    OPEN sl_cursor FOR  stm ;
END;

-----
declare
  l_cur  sys_refcursor;
  l_tname tab.tname%type;
  l_tabtype tab.tabtype%type;
  l_clusterid tab.clusterid%type;
begin
  pr_teste(l_cur);
  loop
    fetch l_cur into l_tname, l_tabtype, l_clusterid;
    exit when l_cur%notfound;
    dbms_output.put_line(l_tname);
  end loop;
end;

您不需要一个
声明游标
语句吗?该过程定义没有问题。你什么时候收到那个错误的?我在尝试执行这个过程时收到这个消息。我想可能需要特别许可,但我真的不知道。