sql - PLS-00201 : identifier 'CURSOR' must be declared

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

最佳答案

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

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;

关于sql - PLS-00201 : identifier 'CURSOR' must be declared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482258/

相关文章:

java - 当过程不停止时,Java SQL 异常不显示 Oracle 异常

Oracle 高级队列 - 出队不起作用

java - Oracle脚本从Java代码运行,无需安装Oracle客户端

mysql - #1064 SQL 语法错误

php - CASE 内的子查询的别名

linux - 使用响应文件显示 Oracle DB 静默安装的进度

oracle - 如果我在同一包中的不同过程上重新编译包主体,执行过程会发生什么情况

sql - 如何有效地使用递归查询创建斐波那契数列

php - 从mysql中的表中获取最大值

mysql - 查询以检查某一行是否有 2 个单词