【问题标题】:PLS-00201: identifier 'CURSOR' must be declaredPLS-00201:必须声明标识符“CURSOR”
【发布时间】:2016-02-18 21:22:24
【问题描述】:

我在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;

【问题讨论】:

  • 您不需要DECLARE CURSOR 声明吗?
  • 该过程定义没有问题。你什么时候收到这个错误?
  • 我在尝试执行该过程时收到此消息。我虽然也许可以得到一些特殊的许可,但我真的不知道。

标签: sql oracle plsql


【解决方案1】:

您的代码没有问题。问题可能出在调用此过程的函数/过程中。确保在那里定义了光标。 我将您的表 tb_device_type 替换为选项卡。这个 sn-p 工作正常。

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;

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2021-12-22
    • 2016-07-25
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多