2012-05-21 3 views
2

J'ai une table en tant que Student et il y a une colonne de type varchar en tant que status. J'ai besoin de définir la valeur de ce processus status colonne after insert or update sur cette table. J'ai essayé d'écrire un Trigger pour cela. mais je ne peux pas utiliser comme :new.status. il donne Error: ORA-04084: cannot change NEW values for this trigger type. comment pourrais-je faire ça?Après insertion de déclencheur de mise à jour PL/SQL

Mon code

create or replace 
TRIGGER STUDENT_AIU_TRI 
AFTER INSERT OR UPDATE ON STUDENT 
FOR EACH ROW 
DECLARE 

v_status VARCHAR2(2); 

BEGIN 


    v_status := '1'; 

    select v_status into :NEW.status from dual; 
END; 
+1

poster votre code s'il vous plaît – Bohemian

+0

@Bohemian j'ai mis à jour mon post et ajouté mon code. – Bishan

Répondre

7

Si vous souhaitez modifier la valeur dans une colonne, vous aurez besoin d'utiliser un déclencheur BEFORE INSER OR UPDATET, pas un déclencheur AFTER INSERT OR UPDATE. Pourquoi croyez-vous que vous devez utiliser un déclencheur AFTER INSERT OR UPDATE?

Vous pouvez aussi ne pas besoin de la variable locale ou SELECT de double

CREATE OR REPLACE TRIGGER trigger_name 
    BEFORE INSERT OR UPDATE ON student 
    FOR EACH ROW 
BEGIN 
    :new.status := '1'; 
END; 
+0

n'est pas 'BEFORE INSERT OU UPDATE trigger' tomber moi dans un problème de rollback? car dans ce cas, la valeur de la colonne "status" est définie avant l'insertion ou la mise à jour des autres colonnes de cet enregistrement. dans tous les cas de recul, n'est-ce pas tomber dans un problème? – Bishan

+0

@Bishan - Je ne suis pas sûr de comprendre la question que vous posez. Les modifications apportées par un déclencheur, qu'il s'agisse d'une instruction before, d'une instruction after ou d'un trigger de niveau ligne avant ou après, font partie de la transaction globale. Ils seront annulés si la transaction est annulée. –

Questions connexes