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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Points : 25
    Points
    25
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    cf les procédures avec pragma autonomous_transaction.

    Fais une petite recherche sur le forum, tu trouveras des exemples d'utilisation.
    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.

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Points : 25
    Points
    25
    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