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

需要帮助了解循环游标

潘安平
2023-03-14

我试图写一个代码为每个股票价值是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/SQL:SQL语句忽略06550。00000-“第%s行第%s列:\n%s”*原因:通常是PL/SQL编译错误*行动:

块引用

SET SERVEROUTPUT ON

DECLARE

CURSOR CURR
   IS
     SELECT STK_FLAG
     FROM MM_MOVIE
     WHERE MOVIE_VALUE * MOVIE_QTY >= 75
     FOR UPDATE;
BEGIN

OPEN CURR;
   
  LOOP

    FETCH CURR INTO STK_FLG;

    UPDATE

      MM_MOVIE

    SET

      STK_FLG= '*'

    WHERE

      CURRENT OF CURR;

    EXIT

  WHEN CURR%notfound;

  END LOOP;

  Commit;

   CLOSE CURR;
END;
/

共有2个答案

赫连照
2023-03-14

为什么要使用pl/sql匿名块?即使包装到pl/sql中的功能有“外部”要求,为什么要使用游标和循环?使用可能OK的代码(来自@Littleft),您可以检索满足您条件的单个列,迭代获取该列的结果记录集,但不对其执行任何操作,并在循环的每次迭代中使用文字值更新单个行。SQL设计用于一次处理整组行。您的处理可以在单个更新语句中完成。假设对pl/sql块有外部要求,您的代码将减少为:

BEGIN
   UPDATE mm_movie
      SET stk_flag = '*'   
    WHERE movie_value * movie_qty >= 75;
    
   COMMIT;
END;   

要点:在使用SQL时,不要考虑迭代(循环)。相反,请思考要处理的所有对象的通用性(集合)。以不同的方式看待问题及其相应的解决方案。习惯这种想法需要一些时间,但从长远来看,您的SQL和过程将因此而大大改进。性能和清晰度。

龙成仁
2023-03-14

您没有声明游标变量(因此没有地方可以放置游标返回的值)。不要将其命名为列名;使用前缀,例如v_或l_或任何您想要的前缀。

此外,在更新中引用了一个不存在的列。光标表明其名称为stk\U标志,而不是stk\U flg

因此,可能合适的代码

DECLARE
   CURSOR curr IS
      SELECT stk_flag
        FROM mm_movie
       WHERE movie_value * movie_qty >= 75
      FOR UPDATE;

   l_stk_flag  mm_movie.stk_flag%TYPE;  --> this
BEGIN
   OPEN curr;

   LOOP
      FETCH curr INTO l_stk_flag;

      EXIT WHEN curr%NOTFOUND;

      UPDATE mm_movie
         SET stk_flag = '*'             --> this
       WHERE CURRENT OF curr;
   END LOOP;

   COMMIT;

   CLOSE curr;
END;
/
 类似资料:
  • 我使用ACR122读卡器已经有一段时间了,它在读取Mifare 1K或Mifare Ultralight NFC卡时都没有问题。 将读卡器升级到最新版本(ACR1251)后,我的程序无法读取Mifare 1K卡的UID。 这是我用来阅读的片段: 使用新版rad阅读器: ResponseAPDU.getSW1()函数返回98 而getSW2()返回130 我试着在网上和读卡器文档中搜索响应代码的解释

  • 我已经写了两个版本的nqueens问题,我认为它们应该有相似的效率,但事实并非如此。我认为这是由于哈斯克尔的懒惰评估行为。有人能解释一下下面的例子是如何工作的吗, 您可以通过调用nqueens1 8 8或nqueens2 8 8对其进行评估,以对大小为8的板进行评估。 虽然nqueens2工作效率很高,但nqueens1存在性能问题。我相信这是因为递归调用(nqueens n(k-1))被多次评估

  • 这是我关于堆栈溢出的第一个问题,所以如果我的问题中有一个新手错误,请原谅,请随时更正,因为我计划在未来几个月内更多地使用此网站。 不管怎样,我是高中12年级的学生,我被一个家庭作业问题卡住了。所以基本上我们被分配了一个创建战争游戏(纸牌游戏)的项目,我们被要求每天做一小部分。到目前为止,直到今天一切都很顺利,因此我向你们提出了这个问题。 以下是该项目的内容: 卡片 它有什么: 私有int值:卡的值

  • 我需要一些帮助用JSOUP解析这个html。我正在尝试从表中的每一列获取数据值。我一直在看JSoup文档,试图弄清楚我到底需要做什么,但还是不确定。看起来网站使用了CSS和内联格式的组合;其中大部分可以转换为CSS并减小页面大小。 这是html文件的一个小片段(实际上差不多有5 MB大小)。 更新:我已经更新了源代码,以更准确地显示html的结构。我假定tbody将位于表元素中是一个给定的条件。我

  • 首先,我是C、C++、C#、Android和Swift的开发人员,但我绝对没有JavaScript、PHP或Web开发经验。 即只接受整数值的输入。 这是刀片代码:

  • 我已经停止编程一段时间了。大概4年左右,我只是想搞乱它,所以我决定做一个高:低数字猜谜游戏。(猜一个数字1-100,如果你猜得太高或太低,程序会说)我完全忘了我该怎么做: