2 votes

Déclencheurs Oracle - quelle est la valeur de :new lorsque rien n'est transmis ?

Comme dans la question - quelle valeur :new prendre lorsque la mise à jour omet complètement la colonne référencée dans le déclencheur ?

J'essaie de déboguer une procédure stockée qui déclenche un déclencheur lors d'une mise à jour qui utilise une fonction acceptant les conditions suivantes :new avec DATE valeur. Cependant, la mise à jour que j'exécute ne met pas à jour la colonne référencée.

Le déclencheur utilisera-t-il la valeur stockée dans la table sur laquelle la mise à jour est exécutée ? Ou la prendra-t-il d'un autre endroit ?

5voto

schurik Points 4452

Si la colonne est omise dans l'état de mise à jour, alors l'état de mise à jour est le suivant :NEW.column est la même que la valeur :OLD.column valeur. Et c'est la valeur qui était stockée dans la table avant l'exécution de l'instruction de mise à jour.

5voto

APC Points 69630

Le site la documentation n'est pas tout à fait claire à ce sujet, mais :NEW y :OLD indiquent la version de la ligne actuelle .

Donc, :NEW.col23 indique la valeur de cette colonne dans la nouvelle version de la ligne. Si la transaction n'a pas modifié la valeur de cette colonne, il s'agira de la même chose que :OLD.col23 . En effet, nous pouvons utiliser ceci pour coder un test dans nos triggers pour voir si une mise à jour a changé la valeur d'une colonne :

if :NEW.col23 = :OLD.col23 then
   --  value not changed

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X