CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SQL] Trigger crée, "lextraction ramene

bob63
bob63
Niveau 11
11 novembre 2009 à 19:37:22

Bonjour, voilà je suis assez débutant en SQL.
J'ai créer une BD qui comportent donc plusieurs tables, j'ai voulu créer un trigger :

Code :

CREATE OR REPLACE TRIGGER PoidsMax
BEFORE INSERT ON EstLivre
FOR EACH ROW
DECLARE
b integer ;
d integer ;
e integer ;
TropLourd EXCEPTION ;

BEGIN

SELECT Colis.Poids INTO b FROM Colis WHERE Colis.CodeColis=:NEW.CECodeColis;

SELECT :NEW.Quantite INTO d FROM EstLivre;

SELECT TypeCamion.PoidsMax INTO e FROM TypeCamion,Camion WHERE :NEW.CENoImm=Camion.NoImm AND Camion.CEModele=TypeCamion.Modele
AND Camion.CEMarque=TypeCamion.Marque;

IF e<(b*d) THEN RAISE TropLourd ;
END IF ;

EXCEPTION
WHEN TropLourd then RAISE_APPLICATION_ERROR(-20501,'Charge trop lourde pour le camion');
END ;
/

En gros dans chaque select je sélectionne un attribut d'une relation différente pour les comparer, cependant le trigger se créer sans erreurs.
Je m'arrange pour chaque table à mettre des valeurs insensés afin de le faire déclencher seulement à chaque insertion voilà l'erreur :

ORA-01422 L'extraction ramène plus que le nombre de ligne demandé
ORA-06512 o "SYSTEM.POIDSMAX3
ORA erreur lors de l'execution du déclencheur ..

voilà qui signifie cette erreur svp ? Car j'ai la même sur un autre trigger

Je travail sous oracle

merciiii

Thicot
Thicot
Niveau 10
12 novembre 2009 à 22:26:12

"ORA-01422 L'extraction ramène plus que le nombre de ligne demandé"

Cette erreur arrive parce qu'un de tes 3 selects ramène plus d'une seule ligne, et tu ne peux pas mettre plusieurs lignes dans une seule variable de type integer.

A toute hasard, essaye de faire les select tout seul, hors de la procédure, avec tes données que tu essayes d'insérer et vérifie déjà ça. :)

godrik
godrik
Niveau 30
12 novembre 2009 à 23:00:40

Je ne suis pas bien expert en trigger (il faudra que je regarde en detail comment ca marche un jour), mais tu peut aussi faire ce genre de traitement a l'echelle applicative. C'est ce qui est generalement fait lorsque la coherence de la base ne peut etre confirmer qu'a partir de donnees externe.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment