În trigger, aflați câmpurile care sunt actualizate

Există un declanșator Înainte de inserare pentru unele mese. În acesta, trebuie să stabiliți dacă câmpul de câmp1 sa schimbat.

Cum se face corect?

Încerc acest lucru:
new.field1 <> old.field1.







Această construcție funcționează bine, dar dacă valoarea veche sau noua este nulă, atunci nu o dorește.

> dar dacă valoarea veche sau nouă este nulă, atunci nu doriți.

Hmm. Și pentru a verifica această condiție în religie, religia nu permite?

Ce religie?
Mai multe detalii:
1.
# xA0; // new.filed1 = "salut";
# xA0; // old.filed1 = "Bye";
# xA0; dacă (new.field1 <> old.field1) atunci
# xA0; începeți
# xA0; # xA0; // în acest caz ajungem la acest bloc
# xA0; sfârșitul

2.
# xA0; // new.filed1 = "salut";
# xA0; // old.filed1 = null;
# xA0; dacă (new.field1 <> old.field1) atunci
# xA0; începeți
# xA0; # xA0; // în acest caz, NU se încadrează.
# xA0; # xA0; // deși ar trebui
# xA0; sfârșitul

3.
# xA0; // new.filed1 = null;
# xA0; // old.filed1 = "Bye";






# xA0; dacă (new.field1 <> old.field1) atunci
# xA0; începeți
# xA0; # xA0; // și în acest caz, NU se încadrează.
# xA0; # xA0; // deși ar trebui
# xA0; sfârșitul

Bănuiesc că nu poți compara valoarea nulă cu o valoare de orice fel, pentru că testul nul este efectuat de către constructul null.

Prin urmare, întreb cum să aflăm că domeniul a schimbat valoarea, indiferent de ce a fost și de ce a devenit (include valori nula).

Este vorba despre verificarea pentru null:
# xA0; dacă (new.field1 <> old.field1) sau
((new.field1 este null și nu old.field1 este null) sau
(old.field1 este null și nu new.field1 este null)) atunci
începe

[2] Acru # xA0; (18.02.05 11:25)
> Bănuiesc că nu puteți compara valoarea nulă cu o valoare de orice tip, deoarece testul nul este efectuat de către constructul null.

Dar puteți verifica ceva pe NULL.
Dacă (old.field este Null) și (new.field nu este Null) atunci.

1)
dacă
# xA0; (new.field1 IS NULL) și nu (old.field1 IS NULL) sau
# xA0; NOT (new.field1 IS NULL) ȘI (old.field1 IS NULL) sau
# xA0; (new.field1 <> old.field1)
atunci
# xA0; modificat

2)
dacă
# xA0; NOT (
# xA0; # xA0; (new.field1 IS NULL) ȘI (old.field1 IS NULL) sau
# xA0; # xA0; (new.field1 = old.field1)
# xA0;)
atunci
# xA0; modificat

Și dacă, de exemplu, așa?
dacă (coalesce (old.naim, "- 1"))<>(coalesce (new.naum, "- 1")))) apoi







Articole similare

Trimiteți-le prietenilor: