Je suis tout à fait un débutant dans PL/SQL
et j'essaie de faire des contrôles assez complexes d'intégrité des données via des déclencheurs. J'ai déjà compris comment éviter les problèmes en appelant une table à l'intérieur d'un trigger qui est utilisé sur la même table (via une table externe temporaire) mais maintenant je suis confronté à un problème vraiment époustouflant: je pensais que ":NEW"
faisait référence à la valeur dans mon tableau AFTER
une mise à jour mais les choses ne semblent pas si simples ... C'est la nouvelle valeur SET
par la mise à jour ou l'insertion ... qui semble être NULL
si rien n'a été spécifié, même si le La valeur du champ correspondant est NOT NULL
après la mise à jour ... ce qui me rend fou.Déclencheur PL/SQL sur INSTERT ou UPDATE: ": NEW" EST NULL => ambigu?
Mon déclencheur est défini lors de l'insertion ou la mise à jour de plusieurs variables:
CREATE OR REPLACE TRIGGER TRG_INS_UP_INSTRUMENT_EVENT
AFTER INSERT OR UPDATE OF EVENT_ID, DATE_BEGIN,DATE_END,INSTR_ID,TYPE_EVENT_ID ON AIS_INSTRUMENT_EVENT
Mais maintenant ... S'il y a déjà une ligne avec des champs non nuls et je fais un
UPDATE AIS_INSTRUMENT_EVENT SET INSTR_ID='642' WHERE EVENT_ID='6479'
I en fait obtenir un ":NEW.DATE_BEGIN"
qui est NULL
... pensée d'événement ni les valeurs plus anciennes ou plus récentes sont NULL (parce que je ne l'ai pas mis à jour).
Comment puis-je distinguer - dans mon déclencheur - le cas lorsque le DATE_BEGIN
est mis à jour et SET
volontaire NULL
du cas où rien n'a été spécifié (et ce champ doit donc rester la même, mais pas nécessairement NULL ...). J'ai beaucoup de combinaison possible pour vérifier un par un ...
Merci d'avance pour votre aide!
il serait utile si vous pouviez fournir un cas de test complet pour ce que vous essayez de faire (à savoir le DDL pour votre table (s) et le déclencheur, avec les données d'entrée et la sortie attendue; NB cela ne doit pas soyez vos tables exactes (par exemple nous ne nous soucions pas de ce que les colonnes/table/trigger sont appelées), mais il faut reproduire le problème que vous essayez de résoudre). Qu'est-ce qui vous fait penser que la valeur ': new' est nulle? – Boneist