Oracle 使用Join更新的PLSQL

Oracle 使用Join更新的PLSQL,oracle,plsql,Oracle,Plsql,我正在尝试创建一个PLSQL语句,用他们所战斗过的所有生物的钱来更新角色清单中的钱 以下是我一直在尝试的代码: DECLARE inv_money character.money%TYPE; CURSOR updmoney IS SELECT * FROM character WHERE id IN (SELECT character_id FROM inst_creature)

我正在尝试创建一个PLSQL语句,用他们所战斗过的所有生物的钱来更新角色清单中的钱

以下是我一直在尝试的代码:

   DECLARE
        inv_money character.money%TYPE;
        CURSOR updmoney IS
            SELECT *
            FROM character
            WHERE id IN (SELECT character_id FROM inst_creature)
        FOR UPDATE OF money;
    BEGIN
        FOR v_character IN updmoney LOOP

          SELECT inst_creature.money
          INTO inv_money
          FROM inst_creature,character
          WHERE inst_creature.character_id = character.ID;

          UPDATE character
          SET money = money+inv_money
          WHERE CURRENT OF updmoney;
        END LOOP;
        COMMIT;
    END;
inst_生物表中有一个角色id,用于定义与该生物战斗的角色

我发现了错误 ORA-01422:精确获取返回的行数超过请求的行数


我一直试图通过使用谷歌来解决这个问题,但到目前为止还没有任何效果。有什么想法吗?

当一个角色杀死多个怪物时会发生什么?ORA-01422,就是这样。选择。。。INTO语法填充一个标量值,即一行。当查询返回多行时,PL/SQL抛出ORA-01422

“有什么办法可以解决这个问题吗?”

最简单的方法是修复查询,使其返回一行。当您只是向角色的宝藏中添加金钱时,您可以使用聚合:

      SELECT sum(inst_creature.money)
      INTO inv_money
      FROM inst_creature,character
      WHERE inst_creature.character_id = character.ID;

因此,每个角色有一行,每个角色有一次更新。

当一个角色杀死多个怪物时会发生什么?ORA-01422,就是这样。选择。。。INTO语法填充一个标量值,即一行。当查询返回多行时,PL/SQL抛出ORA-01422

“有什么办法可以解决这个问题吗?”

最简单的方法是修复查询,使其返回一行。当您只是向角色的宝藏中添加金钱时,您可以使用聚合:

      SELECT sum(inst_creature.money)
      INTO inv_money
      FROM inst_creature,character
      WHERE inst_creature.character_id = character.ID;

因此,每个角色有一行,每个角色有一次更新。

当一个角色杀死多个怪物时会发生什么?ORA-01422,就是这样。@APC啊,我明白了。有什么办法可以解决这个问题吗?当一个角色杀死多个怪物时会发生什么?ORA-01422,就是这样。@APC啊,我明白了。有什么办法可以解决这个问题吗?但是要小心-,但是要小心-。