【问题标题】:Update multiple rows in procedures更新过程中的多行
【发布时间】:2019-12-29 04:57:50
【问题描述】:
CREATE OR REPLACE PROCEDURE FEE_INCR (IN_Percentage IN NUMBER) IS
          v_oldFees number(7,2);
          v_newFees number(7,2);
BEGIN
-- GET THE FEES
          SELECT fees INTO v_oldFees
          from offering

          v_newFees := round(((v_oldFees*IN_Percentage)/100)+v_oldFees);

--UPDATE the record
          UPDATE offering
          set fees = v_newFees;

END;
/

我正在尝试编写一个程序,允许用户增加存储在产品表中的所有费用。但是当我执行该过程时,出现了错误“ORA-01422:精确提取返回的行数超过了请求的行数”。我假设程序只能更新一行?有什么办法可以解决这个问题吗?谢谢

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案1】:

    不。 Procedure 可以根据需要更新尽可能多的记录。但是您的第一个选择存在问题,它获取多条记录并且您试图将它们存储在只能保存一个值的单个变量(v_oldfees)中。这就是你面对ORA-01422的原因。

    您可以直接使用update语句更新所有费用如下:

    CREATE OR REPLACE PROCEDURE FEE_INCR (IN_Percentage IN NUMBER) IS
             -- v_oldFees number(7,2);
             -- v_newFees number(7,2);
    BEGIN
    
    --UPDATE the record
              UPDATE offering
              set fees = round(((fees*IN_Percentage)/100)+fees);
    
    END;
    /
    

    理想情况下,您可以在应用程序中直接使用update 语句,除非您被要求显式创建procedure,否则不需要procedure

    干杯!!

    【讨论】:

    • 是的,很遗憾我被要求明确地创建程序:(
    • 好的。然后必须使用我在答案中创建的程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2021-12-03
    • 1970-01-01
    • 2012-12-24
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多