feu trigger after insert dans oracle
Je suis très nouveau pour déclencher, maintenant, ce que je tente. J'ai deux tables INSÉRÉ et ORDER_INFO, les deux ont le même nom de colonne ORDER_ID, ORDER_DATE. J'ai scénario, où le client sera de la passation de sa commande, les informations seront stockées dans INSÉRÉ table, puis en utilisant ce déclencheur, il va insérer dans une autre table ORDER_INFO après avoir satisfait à la condition, ce qui a été écrit.
create trigger tri_check
AFTER INSERT ON inserted FOR EACH ROW
DECLARE
v_date DATE;
BEGIN
SELECT order_date INTO v_date FROM inserted;
if (v_date)< (sysdate + 2) then
raiserror('You cannot take an order to be delivered less than 2 days from now',16, 1);
else
INSERT INTO orders_info
( order_id,order_date)
VALUES
(:new.order_id,v_date);
end if;
end;
Mais, quand je suis à l'exécution de la au-dessus de déclencher, puis j'obtiens cette erreur.
ERROR at line 8: PL/SQL: SQL Statement ignored
6. SELECT order_date INTO v_date FROM inserted;
7. if (v_date)< (sysdate + 2) then
8. raiserror('You cannot take an order to be delivered less than 2 days from now',16, 1);
9. else
10. INSERT INTO orders_info
MODIFIER
Maintenant, j'ai fait la même structure de la table en SYSTÈME de l'utilisateur, et a obtenu le même message d'erreur. Table or View does not exist
Besoin d'aide !! Merci à l'avance!!!!
Vous devez vous connecter pour publier un commentaire.
Le message semble indiquer un problème avec le "raiserror' procédure. Je ne suis pas familier avec cette procédure dans la norme SQL/PL - vouliez-vous dire RAISE_APPLICATION_ERROR? Toutefois, et peut-être plus au point, lors de l'utilisation d'un déclencheur il n'y a pas besoin de faire une sélection à partir de la table. Toutes les données insérées sont disponibles pour la détente. Je suggère de changer votre déclencheur être quelque chose comme ce qui suit:
De partager et de profiter.
ERROR at line 5: PL/SQL: ORA-00942: table or view does not exist 3. REFERENCING NEW AS NEW 4. FOR EACH ROW 5. BEGIN 6. if :new.ORDER_DATE < (sysdate + 2) then 7. RAISE_APPLICATION_ERROR(-20000, 'You cannot take an order to be delivered less than 2 days from now');
RAISE_APPLICATION_ERROR
🙂ERROR at line 7: PL/SQL: ORA-00942: table or view does not exist 5. IF :new.order_date < (SYSDATE + 2) 6. THEN 7. RAISE_APPLICATION_ERROR(-20000, 'You cannot take an order to be delivered less than 2 days from now'); 8. ELSE 9. INSERT INTO orders_info (order_id, order_date)
RAISE_APPLICATION_ERROR
order_info
. Merci !!Vous pouvez simplement utiliser le
:NEW
et:OLD
valeurs à la place de votre sélectionnez:Qu'est-ce que votre
raiserror
procédure? Avez-vous des autorisations d'accès accordées sur elle?Espère que ça aide...
EDIT:
OK, à partir de votre erreur, et l'erreur que vous avez posté sur @Bob Jarvis réponse, vous pourriez ne pas avoir
INSERT
privilège sur laORDERS_INFO
table. Vous devriez également vérifier vos autorisations sur leINSERTED
table aussi.Vérifier vos autorisations avec votre DBA.
Si
raiserror
n'est pas une procédure définie ou vous n'avez pas accès à elle, puis utiliser la RAISE_APPLICATION_ERROR méthode pour élever une erreur comme Bob propose.ERROR at line 7: PL/SQL: SQL Statement ignored 5. DECLARE 6. BEGIN 7. IF :new.order_date < (SYSDATE + 2) 8. THEN 9. raiserror ('You cannot take an order to be delivered less than 2 days from now',16,1);
raiserror
procédure s'il vous plaît?INSERTED
etORDERS_INFO
? Si vous avez les autorisations sur eux, si ce n'est parler à celui qui les a créés pour vous accorder les autorisations pertinentes.table or view does not exist