2012-05-17 15 views
5

qualcuno può spiegare cosa si intende per:codice di attivazione vecchi e nuovi

:new e :old nel codice di attivazione.

+0

È questo il compito? – Sparky

+0

darci un contesto – keyser

+0

è una domanda di revisione che sto preparando, devi rispondere alla domanda "cosa si intende per: nuovo e: vecchio nel codice di attivazione?" – user1300580

risposta

24

:new e :old sono pseudo-record che consentono di accedere ai nuovi e vecchi valori di particolari colonne. Se ho una tabella

CREATE TABLE foo (
    foo_id NUMBER PRIMARY KEY, 
    bar VARCHAR2(10), 
    baz VARCHAR2(10) 
); 

e inserisco una fila

INSERT INTO foo(foo_id, bar, baz) 
    VALUES(1, 'Bar 1', 'Baz 1'); 

poi in un livello di riga prima di trigger di inserimento

:new.foo_id will be 1 
:new.bar will be 'Bar 1' 
:new.baz will be 'Baz 1' 

mentre

:old.foo_id will be NULL 
:old.bar will be NULL 
:old.baz will be NULL 

Se quindi aggiorna quella riga

UPDATE foo 
    SET baz = 'Baz 2' 
WHERE foo_id = 1 

poi in un prima trigger di aggiornamento a livello di riga

:new.foo_id will be 1 
:new.bar will be 'Bar 1' 
:new.baz will be 'Baz 2' 

mentre

:old.foo_id will be 1 
:old.bar will be 'Bar 1' 
:old.baz will be 'Baz 1' 

Se poi eliminare la riga

DELETE FROM foo 
WHERE foo_id = 1 

poi in fila prima di eliminare -level trigger,

:new.foo_id will be NULL 
:new.bar will be NULL 
:new.baz will be NULL 

mentre

:old.foo_id will be 1 
:old.bar will be 'Bar 1' 
:old.baz will be 'Baz 2' 
2

in un trigger record :old contiene i valori prima dell'esecuzione dell'istruzione scatenante, il record :new contiene i valori dopo l'esecuzione.

3

In Plain English:

Sono alias che consentono di accedere alle informazioni da come una colonna era (vecchio) e come sarà (nuovo).

From Oracle documentation:

Vecchi e nuovi valori sono disponibili sia prima che dopo fila trigger. È possibile assegnare un nuovo valore di colonna in un trigger di riga BEFORE, ma non in un trigger di riga AFTER (poiché l'istruzione di attivazione ha effetto prima che venga attivato un trigger di riga AFTER). Se un trigger di riga BEFORE modifica il valore di new.column, un trigger di riga AFTER attivato dalla stessa istruzione vede la modifica assegnata dal trigger di riga BEFORE.

I nomi di correlazione possono essere utilizzati anche nell'espressione booleana di una clausola WHEN. I due punti devono precedere i vecchi e nuovi qualificatori quando vengono utilizzati nel corpo di un trigger, ma i due punti non sono consentiti quando si utilizzano i qualificatori nella clausola WHEN o l'opzione REFERENCING.

2

il valore old è il valore before the change e il valore new rappresenta l'value to be changed, così per esempio, su un update set col1=10, 10 è il valore new ed il valore che è corrente nella colonna è il vecchio su.

su un inserto, c'è neanche vecchio valore, solo nuovo e su una eliminazione non c'è nuovo valore, solo vecchio

Problemi correlati