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 :

A partir d'un trigger faire une insert dans une autre table dont le nom est personnalisable


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut A partir d'un trigger faire une insert dans une autre table dont le nom est personnalisable
    Bonjour

    Je voudrais à partir d'un trigger insérer des données dans d'autres tables. Pour simplifier le code, je voudrais pouvoir utiliser une variable pour identifier la table avec un code du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE TRIGGER matable_i
      BEFORE INSERT ON matable FOR EACH ROW
    DECLARE
      table_name VARCHAR2(255 CHAR);
    BEGIN
      IF (:NEW.table = 1) THEN
        table_name := 'table_1';
      ELSE
        table_name := 'table_2';
      END IF;
     
      INSERT INTO <table_name> (c1, c2) VALUES (:NEW.c1, :NEW.c2);
    END;
    Je sais que je peux utiliser EXECUTE IMMEDIATE et avec des || générer la requête. Mais ça ne marche pas si l'un des champs est un blob par exemple, erreur avec message "column not allowed" quand le trigger s'active.
    Si quelqu'un a une idée.
    D'avance merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par r038tmp5 Voir le message
    Je sais que je peux utiliser EXECUTE IMMEDIATE et avec des || générer la requête. Mais ça ne marche pas si l'un des champs est un blob par exemple, erreur avec message "column not allowed" quand le trigger s'active.
    Vous devez mal générer votre requête :
    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
    40
    41
    SQL> create table t_blob_1 (c1 varchar2(10), c2 blob);
     
    Table created.
     
    SQL> create table t_blob_2 (c1 varchar2(10), c2 blob);
     
    Table created.
     
    SQL> create or replace trigger trig
      2  before insert on t_blob_1
      3  for each row
      4  declare
      5  l_query varchar2(100);
      6  l_table varchar2(30) := 't_blob_2';
      7  begin
      8    l_query := 'insert into ' || l_table || ' (c1, c2) values (:c1, :c2)';
      9    execute immediate l_query using :new.c1, :new.c2;
     10  end;
     11  /
     
    Trigger created.
     
    SQL> DECLARE
      2    l_c1 VARCHAR2(10);
      3    l_c2    BLOB;
      4  BEGIN
      5    l_c1 := 'test';
      6    DBMS_LOB.CREATETEMPORARY(l_c2, TRUE);
      7    INSERT INTO t_blob_1 (c1, c2) VALUES (l_c1, l_c2);
      8  end;
      9  /
     
    PL/SQL procedure successfully completed.
     
    SQL> select * from t_blob_2;
     
    C1         C2
    ---------- -------------------------------------------------------------------
    test
     
    SQL>

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 114
    Points : 70
    Points
    70
    Par défaut
    Génial, merci

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/01/2015, 19h37
  2. Réponses: 8
    Dernier message: 15/06/2010, 16h50
  3. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. [MySQL] Insertion d'une image dans une div d'une news
    Par godsilken50 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/05/2007, 16h58

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