2012-01-11 5 views
7

Sono molto nuovi per i trigger Oracle. Supponiamo di avere un innesco su un inserto nella tabella emp. C'è un modo per scoprire quale è stato il record inserito che ha attivato il trigger. Volevo che il trigger avesse codice che faccia qualcosa se il record inserito fosse un valore particolare.Ottenere il valore che ha attivato il trigger Oracle

risposta

10

Supponendo di avere un trigger a livello di riga, si può semplicemente utilizzare il :NEW pseudo-record di

CREATE TRIGGER name_of_trigger 
    BEFORE INSERT ON emp 
    FOR EACH ROW 
DECLARE 
    <<declare variables>> 
BEGIN 
    IF(:new.ename = 'JUSTIN') 
    THEN 
    <<do something if the newly inserted ENAME value is 'JUSTIN'>> 
    END IF; 
END; 

Per un trigger DDL, l'approccio è completamente diverso. In tal caso, le pseudofunzioni ora_dict_obj_owner e ora_dict_obj_name restituiranno il proprietario e il nome della tabella su cui è attiva l'istruzione DDL.

+0

Ehi, @Justin Cave mi dispiace disturbarla ma ho capito che in realtà ho bisogno di un trigger DDL o SYstem e non di un trigger DML. Chiamerei un trigger ogni volta che viene creata una nuova tabella nello schema 'CREATE O REPLACE TRIGGER drop_trigger AFTER CREATE ON hr.SCHEMA BEGIN END;' Come otterrò il nome della tabella creata che ha attivato il trigger ora? È ancora NUOVO? – Eosphorus

+0

@Eosforo - No, i trigger DDL sono animali molto diversi. Aggiornato la mia risposta. –

+0

grazie mille Justin. Questo è un bel po 'di volte in cui mi hai aiutato ora. Lo apprezzo molto :) – Eosphorus