首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多值游标循环更新表

问多值游标循环更新表
EN

Stack Overflow用户
提问于 2018-06-07 08:16:45
回答 1查看 33关注 0票数 0
代码语言:javascript
复制
DECLARE
   CURSOR contacts
   IS
        SELECT SUM (budget) AS budget
          FROM et_bp_gl_account a, et_bp_fact f
         WHERE     f.gl_account_id = a.gl_account_id
               AND total_flag = 0
      GROUP BY month_id, org_unit_id;
BEGIN
   FOR r IN contacts
   LOOP
      UPDATE et_bp_fact
         SET budget = r.budget
       WHERE gl_account_id IN (SELECT total_element
                                 FROM et_bp_gl_account g, et_bp_fact f
                                WHERE f.gl_account_id = g.gl_account_id);
   END LOOP;
END;

我希望用从游标返回的许多值示例(25,50,75)更新表ET_BP_FACT,但是当我执行由(25,25,25)更新的表时

我认为在循环中有一个问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 08:28:47

这是因为UPDATE的WHERE子句没有“引用”游标的值。

代码语言:javascript
复制
DECLARE
   CURSOR contacts
   IS
        SELECT month_id, org_unit_id,         --> include additional columns here ... 
               SUM (budget) AS budget
          FROM et_bp_gl_account a, et_bp_fact f
         WHERE     f.gl_account_id = a.gl_account_id
               AND total_flag = 0
      GROUP BY month_id, org_unit_id;
BEGIN
   FOR r IN contacts
   LOOP
      UPDATE et_bp_fact
         SET budget = r.budget
       WHERE gl_account_id IN 
         (SELECT total_element
          FROM et_bp_gl_account g, et_bp_fact f
          WHERE f.gl_account_id = g.gl_account_id
            --
            AND f.org_unit_id = r.org_unit_id   --> ... and reference them here ...
            AND g.month_id = r.month_id);
                                                --> ... or, possibly, here
   END LOOP;
END;

我建议您始终在列名之前加上表别名,因为--查看您的代码,无法猜测表MONTH_ID和ORG_UNIT_ID属于哪个表,所以我的代码可能(或可能)不起作用,但我希望您有了大致的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50736182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档