Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2012, 19h11   #1
Invité régulier
 
Homme
Inscription : août 2011
Messages : 56
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vosges (Lorraine)

Informations forums :
Inscription : août 2011
Messages : 56
Points : 9
Points : 9
Par défaut Problèmes de triggers

Bonjour, je réalise actuellement un TP de base de données avec ORACLE et je dois réaliser un trigger qui vérifie que le nombre de plats commandés n'est pas supérieur au nombre de personnes.

1 table commande avec idcommande (cp) et nbpersonne
1 association composer avec idcommande(cp) et idplat(cp)
1 table plats avec idplat (cp)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE OR REPLACE TRIGGER verifPers before
INSERT OR UPDATE ON composer
FOR each row
declare
qte composer.quantite%type;
nbpers commandes.nbpersonnes%type;
begin
SELECT c.quantite,co.nbpersonnes
INTO qte, nbpers
FROM composer c, commandes co
WHERE c.idcommande = co.idcommande
AND co.idcommande = :old.idcommande;
IF (qte > nbpers) then
raise_application_error(-20500,'ERREUR');
end IF;
end;
le trigger se crée mais une fois l’exécution ERREUR
thomasaurelien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 10h12   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Je n'ai pas analysé en profondeur, mais déjà, vous faites une requête sur la table composer ce qui est illégal sur un trigger "for each row" de cette même table. D'autan plus que c'est inutile fonctionnellement puisque vous pouvez faire directement récupérer la valeur dans ":new.quantite"
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h51.


 
 
 
 
Partenaires

Hébergement Web