游标循环更新 Table 多个值

Cursor loop update Table by many values

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;

我想通过许多值示例更新 table ET_BP_FACT (25,50,75) 从 Cursor 返回但是当我执行由 (25,25,25)

更新的 table

我认为循环中存在问题

那是因为 UPDATEWHERE 子句没有 "reference" 游标的值。像这样:

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;

我建议您 始终 在列名称前加上 table 别名,因为 - 查看您的代码,无法猜测哪个 table(s) MONTH_IDORG_UNIT_ID 属于,所以我的代码可能(或可能不)有效,但我希望你有大致的想法。