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] - PLS-00103


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [Trigger] - PLS-00103
    Bonjour !!

    j'ai un probleme avec ce trigger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE TRIGGER TRIG_B_AFTUPD
    AFTER UPDATE ON TABLE1
    FOR EACH ROW
    	BEGIN
    		-- Suppr des anciennes occurences --
    		DELETE FROM TABLE1 WHERE NO=:NEW.no ;
    		-- Insertion des nouvelles lignes
    		INSERT INTO LOGUPD_T1 ( CH1, CH2, CH3) VALUES ( SELECT CH1,CH2,CH3 FROM TABLE1 WHERE NO=:NEW.NO ) ;
    	END;
    /
    SHOW ERRORS;
    qu'ya t il de faux ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ERROR : 
    PLS-00103: Encountered the symbol "SELECT" when expecting one of
             the following:
             ( - + mod not null others <an identifier>
             <a double-quoted delimited-identifier> <a bind variable> avg
             count current exists max min prior sql stddev sum variance
             execute forall time timestamp interval date
             <a string literal with character set specification>
             <a number> <a single-quoted SQL string>

  2. #2
    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
    Par défaut
    L'erreur est pourtant claire... Tu as un select à un endroit où il ne devrait pas y en avoir :
    - soit tu fais insert into ... values (...);
    - soit tu fais insert into ... select .... ;

  3. #3
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    le problème je l'avais compris....

    mais la solution au problème... je l'ai pas trouvé...

    j'ai juste trouver une solution sur le métalink mais fonctionne à partir de la 9i.

    INFO : Ca doit être compatible avec une 8.1.7.4

    --

    c'est vrai que le trigger ce compile si j'enlève VALUES mais lors de l'exec du trigger j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERROR at line 1:
    ORA-04091: table OPS$T.T1 is mutating, trigger/function may not see it
    ORA-06512: at "OPS$T.TRIG_T1_AFTUPD", line 5
    ORA-04088: error during execution of trigger 'OPS$T.TRIG_T1_AFTUPD'

  4. #4
    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
    Par défaut
    http://sgbd.developpez.com/oracle/ora-04091/

    [EDIT] Si tu fais ton delete avant de faire ton insert, tu ne vas pas insérer garnd chose [/EDIT]

  5. #5
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    merci pour la doc

    cepandant etant sur une 8.1.7 ... je souhaitai pouvoir faire un REPLACE mais comme la fonction n'existe pas je suis obligé de suppr. les anciennes lignes puis en inserer de nouvelle...

    bon vé lire la doc pour voir si ca résoud mon pb.

  6. #6
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    bon j'ai bien lu la doc mais a un truc pas clair ???
    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
     
    CREATE OR REPLACE TRIGGER TRIG_BRANCARD_AFTUPD
    AFTER UPDATE ON BRANCARD
    FOR EACH ROW
    	BEGIN
    		-- Suppr des anciennes occurences --
    		DELETE FROM LOGUPD_BRANCARD WHERE NO_BRANC=:NEW.no_branc ;
    		-- Insertion des nouvelles lignes
    		INSERT INTO LOGUPD_BRANCARD 
    			(
    				NO_HOP,NO_BRANC,TY_BRANC,DT_SAISI,dt_print,dt_trans,id_patient,id_codlit,
    				sl_demande,md_trans,ur_trans,de_plttech,de_passint,de_exradio,de_amphite,
    				tr_agent1,tr_agent2,tr_sagent,rm_branc,dl_branc
    			) (
    				SELECT 
    					NO_HOP,NO_BRANC,TY_BRANC,DT_SAISI,dt_print,dt_trans,id_patient,id_codlit,
    					sl_demande,md_trans,ur_trans,de_plttech,de_passint,de_exradio,de_amphite,
    					tr_agent1,tr_agent2,tr_sagent,rm_branc,dl_branc
    				FROM 
    					brancard 
    				WHERE 
    					NO_BRANC=:NEW.NO_BRANC
    			) ;
    	END;
    /
    SHOW ERRORS;
    voila le code du trigger

    Normalement qd on utilise After update ; cela ce passe après commande update.. donc un commit implicite a eu lieu .. en quoi la suppression dans la table LOGUPD_BRANCARD -- qui est une copie de BRANCARD sans aucune contrainte -- suivi d'un insertion dans cette même table rendre la table brancard mutante (sachant qu'un select ne pose pas de verrou) ??

    pas tout compris ??

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. [Pl/Sql] PLS-00103 triggers
    Par madimane dans le forum Oracle
    Réponses: 2
    Dernier message: 14/03/2006, 07h11
  4. Erreur PLS 00103
    Par claralavraie dans le forum Oracle
    Réponses: 4
    Dernier message: 05/01/2006, 17h44
  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