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 :

Insertion (no data found) trigger


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Par défaut Insertion (no data found) trigger
    Bonjour,
    J'essaie de faire un insert sur une table utilisant un trigger qui s'appuie sur une séquence. En effet, l'insertion s'effectue à partir d'un résultat select. C'est à dire que le nombre de lignes de l'insert sera égal au nombre de lignes du select.
    Cependant, mon insertion se fait toutes les 2 lignes. C'est à dire qu'il saute à chaque fois une ligne du select. Ce qui n'est pas normal. Je ne sais pas si ceci est du au trigger rattaché à la table ou bien.
    Le tout se trouve dans une procédure.
    Voici une partie du code (la plus intéressante pour mon problème).
    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
     
    l_query := 'SELECT count(eim.ROW_ID) 
                                FROM SIEBEL.'||TABLE_EIM||' eim
                                WHERE IF_ROW_BATCH_NUM='||var_batch_num_neg||'
                                 AND eim.ROW_ID NOT IN (SELECT distinct RUN_REJET_EIM_ROW_ID FROM ASTRE_RUN_REJET)';
                    EXECUTE IMMEDIATE l_query INTO var_nb_enregistrement;
               -- Insetion de lignes pour la table de rejet.
               dbms_output.put_line('nb_enregistrement:'||var_nb_enregistrement);
               --dbms_output.put_line(l_query);
                    FOR i in 1..var_nb_enregistrement LOOP
                        -- Récupération du row_id de la table eim (ligne en rejet).                                
                       l_query := 'SELECT ROW_ID FROM (SELECT eim.ROW_ID, ROWNUM ligne 
                                   FROM SIEBEL.'||TABLE_EIM||' eim
                                   WHERE IF_ROW_BATCH_NUM='||var_batch_num_neg||'
                                   AND eim.ROW_ID NOT IN (SELECT distinct RUN_REJET_EIM_ROW_ID FROM ASTRE_RUN_REJET))
                                   WHERE ligne ='||i;                  
                        EXECUTE IMMEDIATE l_query INTO var_row_id_eim;
                        dbms_output.put_line('ROW_ID:'||var_row_id_eim); 
                        INSERT INTO ASTRE.ASTRE_RUN_REJET(RUN_ETAPE_ID,                                                                                          
                                                          RUN_ACTION_ID,                                                                                                                                                                                               
                                                          RUN_EXECUTION_ID,                                                                                                                                                                                                 
                                                          RUN_REJET_CRITICITE,                                                                                                                                                                                                    
                                                          RUN_REJET_DESC,                                                                                                                                                                                                    
                                                          RUN_REJET_DATA,                                                                                                                                                                                                          
                                                          RUN_REJET_EIM_TABLE,                                                                                                                                                                                                
                                                          RUN_REJET_EIM_ROW_ID 
                                                         ) VALUES(IDENTIFIANT_ETAPE,
                                                                  var_action_id,
                                                                  var_exec_id,
                                                                  CRITICITE,
                                                                  LIBELLE_REJET,
                                                                  CLE_REJET,
                                                                  TABLE_EIM,
                                                                  NULL                                               
                                                                  );
                        COMMIT;

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Il ne faut pas mettre de commit dans un trigger (ni dans une procédure appellée par un trigger) !

  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
    Commencez à réfléchir ensembliste ! (A qui ça sert de compter les lignes ? Pourquoi insèrer ligne par ligne ?)

    Remplacez votre code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Insert into ...
    Select ... From ...
    Where ...
    Testez votre procédure en dehors du trigger.

Discussions similaires

  1. Trigger "no data found"
    Par Perceuse-Killer dans le forum PL/SQL
    Réponses: 4
    Dernier message: 17/06/2008, 15h45
  2. Erreurs NO DATA FOUND
    Par killerti dans le forum Oracle
    Réponses: 2
    Dernier message: 25/06/2007, 16h41
  3. Réponses: 2
    Dernier message: 28/05/2007, 13h16
  4. [Oracle 10gR2] - Insert XML DATA
    Par jacquesh dans le forum Oracle
    Réponses: 1
    Dernier message: 20/05/2007, 12h03
  5. Réponses: 3
    Dernier message: 13/07/2006, 10h40

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