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 :

ADD COLUMN dans un trigger


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut ADD COLUMN dans un trigger
    Bonjour,

    J'ai deux tables
    Une table TEST_DESC qui decrit des colonnes(col_name, col_type et col_size).
    Une table TEST.

    En fait la table TEST_DESC contient la description des colonnes de la table TEST.

    J'aimerai que quand je fais un Insert, update ou un Delete dans ma table TEST_DESC, les effet soient repercutés sur TEST.

    J'ai donc fait un trigger

    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
     
    CREATE OR REPLACE TRIGGER TRG_TEST_DESC
    AFTER INSERT OR UPDATE OR DELETE 
    ON TEST_DESC
    FOR EACH ROW
     
    DECLARE
     vMsg VARCHAR2(30) := 'Row Level Trigger Fired';
    BEGIN
      IF INSERTING THEN
        dbms_output.put_line(vMsg || ' On Insert ' || :new.col_name);
    	execute immediate( ' ALTER TABLE TEST ADD '||:new.col_name||' '||:new.col_type||'('||:new.col_size||') ' );
    --	dbms_output.put_line( 'ALTER TABLE TEST ADD '||:new.col_name||' '||:new.col_type||'('||:new.col_size||')' );
      ELSIF UPDATING THEN
        dbms_output.put_line(vMsg || ' On Update');
      ELSIF DELETING THEN
        dbms_output.put_line(vMsg || ' On Delete');
      END IF;
    END TRG_TEST_DESC;
    /
    Quand je fais ça ca compile, mais j'ai une erreur oracle "04092 : cannot commit in a trigger"

    Quelqu'un à une piste pour contourner ça ?

    Cdt
    Emilien

  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
    cf les procédures avec pragma autonomous_transaction.

    Fais une petite recherche sur le forum, tu trouveras des exemples d'utilisation.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    Bon bha ça marche !

    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
     
    CREATE OR REPLACE TRIGGER TRG_TEST_DESC
    AFTER INSERT OR UPDATE OR DELETE 
    ON TEST_DESC
    FOR EACH ROW
     
     
    DECLARE
     pragma autonomous_transaction;
     vMsg VARCHAR2(30) := 'Row Level Trigger Fired';
    BEGIN 
     
      IF INSERTING THEN
        dbms_output.put_line(vMsg || ' On Insert ' || :new.col_name);
    	execute immediate( ' ALTER TABLE TEST ADD '||:new.col_name||' '||:new.col_type||'('||:new.col_size||') ' );
    --	dbms_output.put_line( 'ALTER TABLE TEST ADD '||:new.col_name||' '||:new.col_type||'('||:new.col_size||')' );
      ELSIF UPDATING THEN
        dbms_output.put_line(vMsg || ' On Update');
      ELSIF DELETING THEN
        dbms_output.put_line(vMsg || ' On Delete');
      END IF;
    END TRG_TEST_DESC;
    /
    Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/10/2004, 16h18
  2. Recuperer derniere valeur modifiée dans un trigger
    Par xabs dans le forum Développement
    Réponses: 2
    Dernier message: 06/08/2004, 16h22
  3. RAZ GENERATOR dans un trigger
    Par kase74 dans le forum SQL
    Réponses: 2
    Dernier message: 08/09/2003, 18h43
  4. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  5. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51

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