当前位置:  开发笔记 > 数据库 > 正文

ORA-04084:无法更改此触发类型的新值

如何解决《ORA-04084:无法更改此触发类型的新值》经验,为你挑选了1个好方法。

我正在尝试打开pl / sql触发器,该触发器会在更改故事后计算表中某些单元格的总数。这是代码:

  ALTER session SET nls_date_format='dd/mm/yyyy';

  CREATE OR REPLACE TRIGGER TOTAL
  AFTER UPDATE OR INSERT ON ORDER_ITEMS
  FOR EACH ROW
    DECLARE
temp  NUMBER;
today DATE;
  BEGIN
         temp:=(:NEW.item_price-:NEW.discount_amount)*:NEW.quantity;
         today := CURRENT_DATE;
        :NEW.TOTAL := temp;
          dbms_output.put_line('Updated on:' ||today || ' item number: ' ||:NEW.item_id|| 'order number:' ||:NEW.order_id|| 'total: ' ||:NEW.total);
  END;
  /
  show errors

  insert into order_items (ITEM_ID, ORDER_ID, PRODUCT_ID, ITEM_PRICE, discount_amount, QUANTITY)
  VALUES (13, 7, 3, 553, 209, 2);

我得到这个错误:

    00000-“无法更改此触发器类型的新值” *原因:新触发器变量只能在行插入或更新触发器之前更改。*操作:更改触发器类型或删除变量引用。没有错误。已插入1行更新于:2016年6月1日项目编号:13订单编号:7总计:

我了解问题是在触发器执行期间由于更新了同一张表而更新了一张表。



1> Jorge Campos..:

根据评论中的要求,我将我的评论作为答案。

您的问题是因为您要在保留值之后尝试更改值,请尝试将触发器更改BEFORE为:

CREATE OR REPLACE TRIGGER TOTAL
  BEFORE UPDATE OR INSERT ON ORDER_ITEMS
  FOR EACH ROW
DECLARE
  temp  NUMBER;
  today DATE;
BEGIN
    temp:=(:NEW.item_price-:NEW.discount_amount)*:NEW.quantity;
    today := CURRENT_DATE;
    :NEW.TOTAL := temp;
    dbms_output.put_line('Updated on:' || today || ' item number: '
                           || :NEW.item_id || 'order number:' || :NEW.order_id 
                           || 'total: ' ||:NEW.total);
END;
/

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有