当前位置: 首页 > 知识库问答 >
问题:

循环游标抛出游标未定义的错误

万俟浩
2023-03-14

我想循环存储过程的结果。我的代码:

set serveroutput on
VAR c_curs refcursor;

EXECUTE pck_prov.get_value_type_list(1, :c_curs);


BEGIN
    FOR record_test IN c_curs LOOP
        dbms_output.put_line(record_test.id);
    END LOOP;
END;

我不明白为什么这是抛出必须声明c_curs的错误:

从命令-开始中的第7行开始时出错

FOR record_test IN c_curs LOOP

    dbms_output.put_line(record_test.id);

END LOOP; 

结束<错误报告-

ORA-06550:第2行,第24列:

PLS-00201:必须声明标识符C_CURS

共有2个答案

仲柏
2023-03-14

c_curs是绑定变量,不是PL/SQL定义的变量。要在PL/SQL块中使用它,您需要在它前面加上冒号以指示您正在使用绑定变量(就像您在EXECUTE语句中所做的那样):

set serveroutput on
VAR c_curs refcursor;

EXECUTE pck_prov.get_value_type_list(1, :c_curs);


BEGIN
    FOR record_test IN :c_curs LOOP
        dbms_output.put_line(record_test.id);
    END LOOP;
END;
章盛
2023-03-14

游标可以在PL/SQL块中引用,如下所示:

set serveroutput on    
DECLARE
  c_curs    SYS_REFCURSOR;
  v_id      NUMBER;
BEGIN

  pck_prov.get_value_type_list (1, c_curs); --> procedure called here

  LOOP 
    FETCH c_curs
    INTO  v_id;
    EXIT WHEN c_curs%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_id);
  END LOOP;
  CLOSE c_curs;
END;
/
 类似资料:
  • 问题内容: 请解释一下如何在oracle中使用游标进行循环。 如果我使用下一个代码,一切都很好。 但是,如果我为此sql语句定义变量,它将无法正常工作。 错误:PLS-00103 问题答案: 要解决与第二种方法相关的问题,您需要使用 游标变量和打开游标并获取数据的显式方式。它不是 允许在循环中使用游标变量: 了解更多

  • 问题内容: 假设我在数据库(本例中为SQLServer 2008)中有一堆行,可用于创建方程式。 我需要想出一种方法来评估此表中的方程式。 公式1:12 + 12 = 24 公式2:(12-2)/ 2 = 5 我无法想到一种无需遍历行即可获得这些结果的方法。我知道如何执行此操作的唯一方法是使用游标或通过使用临时表和while循环。有没有更好的方法可以做到这一点?如果不是一般的话,什么将执行更好的游

  • 我试图执行以下nodejs/mongoDB代码: 符号很好地注销到控制台,但在此之后,代码抛出一个错误“TypeError:Cannotread property”symbol“of null”。 代码在执行tickers.push部分时似乎忘记了doc.symbol。我该怎么解决这个问题? 更新: 我试着移动控制台。将(股票代码)记录到光标中。每次回调,它都会打印出每次迭代所需的数组,因此符号推

  • 我试图写一个代码为每个股票价值是75美元或更多添加一个"*"在STK_FLAG列。 ORA-06550:第15行,第21列:PLS-00201:标识符“STK\U FLG”必须声明ORA-06550:第15行,第5列:PL/SQL:SQL语句忽略ORA-06550:第23行,第7列:PL/SQL:ORA-00904:“STK\U FLG”:无效标识符ORA-06550:第17行,第5列:PL/SQ

  • 我正在使用mysql存储过程,我花了两个小时试图弄清楚为什么这个游标只运行一次。(我假设它只运行了一次,因为我运行这个存储过程后只看到一条记录——最后有一个命令,我从前面创建的临时表中选择了所有内容) 注意,我已经尝试过在游标中单独运行查询,它运行正常(返回了多条记录,这是应该的)。 我认为这一定与我从循环中插入数据有关(我希望在每个循环过程中向临时表中插入一行数据)。

  • 我使用的是mongoDB PHP,当我使用find查询或聚合框架时,结果是一个游标,我可以使用foreach循环或while循环对游标进行迭代。例如,我要执行以下查询 我可以使用以下两种方法迭代结果