IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

utilser une fonction dans un trigger


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 175
    Points : 52
    Points
    52
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut
    Je n'ai pas regardé le code complet mais il faut mettre "for each row" avant "decalre" pour commencer
    Consultant et formateur Oracle

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 175
    Points : 52
    Points
    52
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    when stk_p = qnt_stock(:new.idproduit) < :new.quantiteprod; then

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Points : 436
    Points
    436
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37
  2. Réponses: 4
    Dernier message: 26/01/2005, 13h08
  3. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04
  4. Programmation d'une fonction dans Rn
    Par simone.51 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2004, 11h30
  5. Réponses: 4
    Dernier message: 18/10/2004, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo