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

SQL Oracle Discussion :

Trigger déclenché aprés chaque insert (insert par bloc)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut Trigger déclenché aprés chaque insert (insert par bloc)
    Bonjour à tous,

    J'ai un premier trigger qui se déclenche pour faire des inserts dans une deuxème table, dans le trigger en question l'insert se fait de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    insert into g_dosser(
                    doss_num,
                    doss_type,
                    doss_code,
                    doss_group_code,
                    doss_id_fl)    
    select      :new.dbd_num,
                    dbd_type,
                    decode( dbd_ind, 'i', 'itnn', 'a', 'itnn', null ),
                    decode( dbd_ind, 'b', 'rppd', 'a', 'rppd', null ),
                    'n'
    from    dbd_type
    where   :new.dbd_flag = 'y';
    Donc c'est un insert par bloc.

    Le deuxème trigger est censé controler les lignes insérés (validation), sauf qu'ici il ne traite que la première ligne, donc pas tous les inserts initialement insérsés par le premier trigger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE TRIGGER dbd_pre_ins
    BEFORE INSERT  ON dbd_type
    FOR EACH ROW
    Comment faire pour que le 2 éme trigger se déclenche et traite tous les inserts de la requête du premier trigger.

    Merci.

  2. #2
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    tu mets le premier en BEFORE et le deuxieme en AFTER.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Nous n’avons pas vos tables ni vos triggers ! Mettez donc un petit jeu d’essai qui permet de reproduire votre problème.

  4. #4
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Salut à tous,
    Ma description était assez standard, peut importe les tables ou les triggers utilisés.
    Comment faire en sorte que le trigger se déclenche pour les insertion en masse du forme "insert into db_table select * from",
    le trigger doit traiter chaque ligne insérée.

    Voici un ex:

    on a les deux tables suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE test_bulk
     (
     CMPY_NUM  NUMBER,
     PROCESSING_TYPE CHAR(4),
     CLASS_GROUP_CODE  CHAR(4),
     BORG_GROUP_CODE CHAR(4),
     DEFAULT_BCG_FLAG CHAR(4));
     );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE test_bulk_ref
     (
     CMPY_NUM  NUMBER);
    et le trigger suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE TRIGGER test_asi
      AFTER INSERT 
      ON TEST_BULK
       begin
         insert into test_bulk_ref (CMPY_NUM) values(1)
      end;
    Lorsque j'exécute cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test_bulk select * from COMPANY_CLASS
    SELECT COUNT(*) FROM test_bulk_ref;
    --------------------------------
    1

    j'ai eu une seule ligne inséré alors que je veux avoir autant de ligne insérée dans test_bulk_ref que les lignes qui ont été insérées dans TEST_BULK, donc le trigger s'est lancé une seule fois aprés TOUT l'insert, je veux qu'il traite les lignes insérés en masse une par une.

    Merci

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Il manque le FOR EACH ROW, un trigger statement ne s'execute qu'une fois par requête.

  6. #6
    Membre actif
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Il manque le FOR EACH ROW, un trigger statement ne s'execute qu'une fois par requête.
    Ca marche ! Merci.

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

Discussions similaires

  1. TRIGGER d'insertion après une requête INSERT
    Par nasimpat7 dans le forum Développement
    Réponses: 11
    Dernier message: 06/04/2009, 15h45
  2. Réponses: 11
    Dernier message: 17/01/2008, 18h53
  3. Trigger auto_increment apres chaque insertion
    Par agur29 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 29/10/2007, 16h47
  4. Trigger Incrementation apres insertion
    Par agur29 dans le forum Développement
    Réponses: 4
    Dernier message: 02/08/2007, 18h15
  5. Trigger Incrementation apres insertion
    Par agur29 dans le forum Développement
    Réponses: 1
    Dernier message: 02/08/2007, 13h40

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