PLS-00201:标识符' CURSOR'必须申报

时间:2016-02-18 13:03:23

标签: 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;

2 个答案:

答案 0 :(得分:2)

您的代码没有问题。问题可能出在调用此过程的函数/ proc中。确保在那里定义了光标。 我将你的表tb_device_type替换为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;

答案 1 :(得分:0)