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 28/01/2008, 20h07   #1
Membre à l'essai
 
Inscription : avril 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 175
Points : 20
Points : 20
Par défaut utilser une fonction dans un trigger

bonsoir a tous


j'ai crée une fonction qui renvoi un resultat de type NUMBER ,


et je doit l'utiliser dans un trigger , mais je connai pas la synatxe avec pl/sql

ma fonction est nommée : Qnt_Stock

le trigger est :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
CREATE OR REPLACE TRIGGER maj_MntTotal_stock
 
after INSERT  ON lignecommande 
 
declare 
 
stk_p produit.tockprod%type;
id_p  produit.idproduit%type;
mnt_c commande.montanttotalcom%type;
qnt_p lignecommande.quantiteprod%type;
 
FOR each row
begin
SELECT montanttotalcom INTO mnt_c FROM commande ;
SELECT (stockprod) INTO stk_p FROM produit;
 
 
 
EXCEPTION 
when stk_p = qnt_stock(:new.idproduit) < :new.quantiteprod; then
INSERT INTO ligneerreur (idcommande, idlig, idproduit, quantiteprod, stockprod) VALUES ( :new.idcommande, :new.idlig, :new.idproduit, :new.quantiteprod, stk_p);
end ;
/


le trigger n'est pas complé , je veux commencer par la partie exception .

sous oracle le trigger est crée avec les erreur suivantes :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
 
SQL> CREATE OR REPLACE TRIGGER maj_MntTotal_stock
  2  
  3  after INSERT  ON lignecommande 
  4  
  5  declare 
  6  
  7  stk_p produit.tockprod%type;
  8  id_p  produit.idproduit%type;
  9  mnt_c commande.montanttotalcom%type;
 10  qnt_p lignecommande.quantiteprod%type;
 11  
 12  FOR each row
 13  begin
 14  SELECT montanttotalcom INTO mnt_c FROM commande ;
 15  SELECT (stockprod) INTO stk_p FROM produit;
 16   
 17  
 18  
 19  EXCEPTION 
 20  when stk_p = qnt_stock(:new.idproduit) < :new.quantiteprod; then
 21  INSERT INTO ligneerreur (idcommande, idlig, idproduit, quantiteprod, stockprod) VALUES ( :new.i
dcommande, :new.idlig, :new.idproduit, :new.quantiteprod, stk_p);
 22  end ;
 23  /
 
Avertissement : Déclencheur créé avec erreurs de compilation.
 
SQL> SHOW errors
Erreurs pour TRIGGER MAJ_MNTTOTAL_STOCK :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
8/1      PLS-00103: Symbole "FOR" rencontré à la place d'un des symboles
         suivants :
         begin function package pragma procedure subtype type use
         <an identifier> <a double-quoted delimited-identifier> form
         current cursor

Merci de votre aide
k-eisti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 20h38   #2
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Je n'ai pas regardé le code complet mais il faut mettre "for each row" avant "decalre" pour commencer
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 20h45   #3
Membre à l'essai
 
Inscription : avril 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 175
Points : 20
Points : 20
je l'ai fait mais sa ne marche pas :

quelle est la synatxe pour stocker la valeur retournée par la fonction qnt_stock

dans mon code j'ai fait :

Code :
1
2
 
when stk_p = qnt_stock(:new.idproduit) < :new.quantiteprod; then
k-eisti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 21h11   #4
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408

Code :
1
2
3
4
IF qnt_stock(:new.idproduit) < :new.quantiteprod
then
  stk_p := ...
end IF;
Mais ce n'est pas le seul problème. Vous avez besoin d'étudier plus PL/SQL avant d'écrire ce code. il est possible de commencer ici
__________________
Consultant et formateur Oracle
Michel SALAIS 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 12h50.


 
 
 
 
Partenaires

Hébergement Web