new - trigger update table oracle
ORA-04084: no se pueden cambiar los NUEVOS valores para este tipo de activador (1)
Estoy intentando activar el disparador pl / sql que calcula el total de algunas celdas en la tabla cuando se cambia el cuento. Este es el código:
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);
Y obtengo este error:
- 00000 - "no se pueden cambiar los NUEVOS valores para este tipo de activador" * Causa: las nuevas variables de activación solo pueden modificarse antes de insertar o actualizar los desencadenadores. * Acción: cambie el tipo de desencadenador o elimine la referencia de la variable. Sin errores. 1 filas insertadas Actualizado el: 01/06/2016 número de elemento: 13número de pedido: 7total:
Entiendo que el problema es actualizar una tabla durante la ejecución del desencadenador causada por una actualización en la misma tabla.
Como solicité en los comentarios, estoy haciendo mi comentario como una respuesta.
Su problema se debe a que está tratando de cambiar un valor DESPUÉS de que el valor se haya conservado, intente cambiar su desencadenador BEFORE
como:
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;
/