【问题标题】:Error when execuuting Before Insert Trigger在插入触发器之前执行时出错
【发布时间】:2016-05-25 04:55:19
【问题描述】:

我有一个带有 MasterDetail 表单的 Oracle 顶级应用程序。 我需要为表单的详细信息部分做一个 BeforeInsert 触发器。 我需要使用另一个表 (AHAR_PARTSLABOR) 中的数据填充 BEFOREINSERT_CHARGES 的字段 这是我到目前为止所拥有的,但它一直给我一个消息错误:

ORA-04082:表级触发器中不允许使用 NEW 或 OLD 引用。

CREATE OR REPLACE Trigger BEFOREINSERT_CHARGES
BEFORE INSERT
On AHAR_REPAIRORDER_CHARGES

--DECLARAR VARIABLES
     --T_CHARGES_TYPE IN CHAR(11);
     --T_CHARGES_PRICE IN NUMBER;
     --T_CHARGES_DISCOUNT IN NUMBER; 

    --VALIDAR QUE EL CHAR_CODE INGRESADO POR EL USUARIO EXISTA

BEGIN

--SELECT PARA PASAR LOS VALORES DE PARTSLABOR A CHARGES 

    SELECT (PARTLABOR_TYPE, PARTLABOR_PRICE, PARTLABOR_DISCOUNT)
    INTO (:NEW.CHARGES_TYPE, :NEW.CHARGES_PRICE, :NEW.HARGES_DISCOUNT)

    FROM AHAR_PARTSLABOR
    WHERE :NEW.CHARGE_CODE = PARTLABOR_ID;

END;

【问题讨论】:

  • :NEW 和 :OLD 是表的元数据。您不能选择它们 - 它们仅在当前事务处于活动状态时才存在,并且仅适用于之前插入引用的表。 AHAR_REPAIRORDER_CHARGES。您需要在插入开始之前进行选择。此时,触发器是不必要的。

标签: oracle insert mod-plsql


【解决方案1】:

为了能够更改:new 值,您必须使用“for each row”触发器:

CREATE OR REPLACE Trigger BEFOREINSERT_CHARGES
BEFORE INSERT
On AHAR_REPAIRORDER_CHARGES FOR EACH ROW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2014-02-20
    • 2021-06-24
    • 2011-11-18
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多