La création de trigger qui déclenche une exception lors de l'insertion
Bonjour amis programmateurs et heureuse nouvelle année à vous tous!
J'ai quelques tâches universitaires pour les vacances d'hiver et un d'entre eux est de créer trigger sur la table:
PERSON(ID, Name, Surname, Age);
Déclencheur est censé informer l'utilisateur quand ils ont inséré ligne avec l'ID non valide. Application des critères est que l'ID est de 11 chiffres.
J'ai essayé d'écrire solution comme ceci:
CREATE OR REPLACE TRIGGER person_id_trigg
AFTER INSERT
ON person
DECLARE
idNew VARCHAR(50);
lengthException EXCEPTION;
BEGIN
SELECT id INTO idNew FROM INSERTED;
IF LENGTH(idNew) <> 11 THEN
RAISE lengthException;
END IF;
EXCEPTION
WHEN lengthException THEN
dbms_output.put_line('ID for new person is INVALID. It must be 11 digits long!');
END;
Puis j'ai réalisé que INSÉRÉE n'existe que dans sqlserver et pas dans oracle.
Que suggéreriez-vous que je puisse faire pour corriger cela?
Merci d'avance!
- Utilisation
BEFORE INSERT
, pasAFTER INSERT
. UtilisationFOR EACH ROW
clause. Ne pas exécuter n'importe quelle requête, il suffit de cochernew.id
. Lire ce lien pour plus de détails, il existe de nombreux exemples là: docs.oracle.com/cd/B28359_01/appdev.111/b28370/... - Merci pour l'entrée, clairement j'ai besoin de lire cette documentation afin de comprendre les facteurs déclencheurs.
Vous devez vous connecter pour publier un commentaire.
Voulez-vous lever une exception (ce qui permettrait d'éviter l'insertion de la réussite)? Ou voulez-vous autoriser l'insertion de réussir et d'écrire une chaîne dans le
dbms_output
de mémoire tampon qui peut ou peut ne pas exister et peut ou ne peut pas être montrée à un homme de l'exécution de l'insérer?Dans les deux cas, vous aurez envie de ce niveau de la ligne de déclenchement, et non d'une déclaration de niveau de déclenchement, de sorte que vous aurez besoin d'ajouter le
for each row
clause.Si vous voulez soulever une exception
Si vous voulez potentiellement sortie d'impression, mais permettent à l'
insert
pour réussirBien sûr, en réalité, que vous ne jamais utiliser un déclencheur pour ce genre de chose. Dans le monde réel, vous devez utiliser une contrainte.