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

Oracle Discussion :

TRIGGER Erreur PLS-00357


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut TRIGGER Erreur PLS-00357
    Bonjour,
    je suis en train de développer un TRIGGER et je suis confronté à une erreur que je ne comprends pas.
    Voici le code du Trigger avec en rouge où apparement se trouve l'erreur :
    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
    CREATE OR REPLACE TRIGGER fermeture_of
    AFTER UPDATE OF date_fin_operation ON operation
    FOR EACH ROW
    WHEN (NEW.id_poste=4)
    DECLARE
     CURSOR c (d integer) IS
      SELECT qte_realisee, qte_a_realiser FROM concerne
      WHERE numero_demande=d;
     realisee INTEGER;
     a_realiser INTEGER;
     no_demande INTEGER;
     part INTEGER;
    BEGIN
     SELECT qte_realisee, qte_a_realiser, c.numero_demande, c.partnumber
     INTO realisee, a_realiser, no_demande, part
     FROM demande d, cycle_ventilateur v, operation o, concerne c
     WHERE v.numero_serie_trane=:NEW.numero_serie_trane
     AND d.numero_demande=v.numero_demande
     AND d.numero_demande=c.numero_demande
     AND v.partnumber=c.partnumber;
     UPDATE concerne SET qte_realisee=qte_realisee + 1
     WHERE numero_demande=no_demande
     AND partnumber=part;
     FOR d IN c(demande) LOOP
      IF d.qte_realisee!=d.qte_a_realiser THEN
       GOTO fin;
      END IF;
     END LOOP;
     UPDATE demande SET statut_demande='F'
     WHERE numero_demande=no_demande;
     <<fin>>
     NULL;
    END;
    Et l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    22/2     PL/SQL: Statement ignored
    22/13    PLS-00357: Table,View Or Sequence reference 'DEMANDE' not allowed
             in this context
    Merci d'avance pour vos réponses

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Est-ce que l'erreur n'est plutôt au-dessus ?

    FOR d IN c(demande) LOOP
    Je crois que vous utilisez un nom de table en paramètre d'un curseur ...

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En plus vous faites un select sur la table operation, vous allez avoir l'erreur de la table mutante
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par pifor
    Est-ce que l'erreur n'est plutôt au-dessus ?

    Je crois que vous utilisez un nom de table en paramètre d'un curseur ...
    Oui CT ça, j'avais oublié de changer le nom de la variable que j'avais renommée no_demande.
    Merci beaucoup

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par plaineR
    En plus vous faites un select sur la table operation, vous allez avoir l'erreur de la table mutante
    En effet, il y a une erreur de table mutante, c'est quoi ce bordel??? ;-)

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Voici plus d'infos sur la table mutante
    http://sgbd.developpez.com/oracle/ora-04091/

    Dans ton cas, pourquoi fais tu une jointure sur la table operation ? Ne peux-tu pas utiliser les variables :new.colxxx ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 77
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par plaineR
    Voici plus d'infos sur la table mutante
    http://sgbd.developpez.com/oracle/ora-04091/

    Dans ton cas, pourquoi fais tu une jointure sur la table operation ? Ne peux-tu pas utiliser les variables :new.colxxx ?
    En fait, j'utilisais :new.colXXX, mais j'avais oublié de virer la table operation de la clasue FROM...

    Que des erreurs bêtes en fait... lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL] Erreur PLS-00103 dans un trigger
    Par sami.g dans le forum Oracle
    Réponses: 1
    Dernier message: 18/12/2006, 17h57
  2. Réponses: 4
    Dernier message: 23/05/2006, 17h04
  3. [10g] Trigger erreur de compilation
    Par flasomm dans le forum Oracle
    Réponses: 2
    Dernier message: 03/01/2006, 03h07
  4. [Debug] [Trigger] erreur d'exe pas très précise
    Par viena dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/08/2005, 11h36
  5. fonction LAG et erreur PLS-00103. Oracle 8i
    Par henrirobert dans le forum Oracle
    Réponses: 7
    Dernier message: 26/05/2005, 16h03

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