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

  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

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