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 :

[oracle][SQL] ignoré les doublons lors d'un insert??


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [Résolu][oracle][SQL] ignoré les doublons lors d'un insert??
    bonjour, je vais une requete du style:
    insert into TABLE1 (col1,col2,col3) select DISTINCT col1,col2,col3 from TABLE2


    mais la requete renvoie a chaque PK violation, unique constraint violated
    (Table1 à une clé primaire).

    Comment faire pour que ne pas inséré ses doublons (les ignoré), et continué le insert?

    J'ai essayé un Exceptions INTO lors de la création de la contrainte PK, mais ça ne marche pas :-(

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    SI vous avez le message suivant :
    PK violation, unique constraint violated
    c'est que vous avez déja une clé primaire permttant de ne pas inserer les doublons , donc nul n'est besoin de créer une clé primaire

    Exceptions INTO , ne marche uniquement que si vous avez des lignes en doubles ,

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Oui, j'ai bien une clé primaire sur ma table, mais lors de ma requete:
    insert into T1(c1,c2) select c1,c2 from T2

    le comportement est le suivant: PK violation sur un doublon (je ne sais pas lequel, le select retourne 1000 lignes) >> donc aucune ligne n'est inséré dans ma table (le insert est rejeté).

    Ce que je voudrai c'est : PK violation >> oracle ignore le doublon mais insére les autres lignes retournés par le select.

    C'est possible?

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut Ignorer les doublons
    Gère le à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO TABLE1 (col1,col2,col3) 
    SELECT DISTINCT col1,col2,col3 
    FROM TABLE2 a
    WHERE NOT EXISTS ( SELECT 1 
    					FROM TABLE1 b
    				-- Condition Clé Primaire. 
    					WHERE b.col1 = a.col1
    					AND b.col2 = a.col2
    					AND b.col3 = a.col3)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    une petite solution :
    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
    42
    43
    44
    45
     
    SQL> create table dvp ( a varchar2(10) , b number , c  varchar2(10) ) ; 
     
    Table créée.
     
    SQL>  create table dvp2 ( a varchar2(10) , b number , c  varchar2(10) ) ; 
     
    Table créée.
     
    SQL> alter table dvp add constraint dvp_pk primary key (a,b,c) ;
     
    Table modifiée.
    SQL>  insert into dvp2  values ('a',1,'b') ;
     
    1 ligne créée.
     
    SQL> insert into dvp2  values ('a',2,'b') ;
     
    1 ligne créée.
     
    SQL> insert into dvp2  values ('a',3,'b') ;
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> insert into dvp  values ('a',1,'b') ;
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> insert into dvp select a,b,c from dvp2 ;
    insert into dvp select a,b,c from dvp2
    *
    ERREUR à la ligne 1 :
    ORA-00001: unique constraint (FORMATION.DVP_PK) violated
    SQL> insert into dvp select a,b,c from dvp2 where not exists ( select 'X' from dvp 
      2  where dvp.a=dvp2.a and dvp.b=dvp2.b and dvp.c= dvp2.c ) ; 
     
    2 ligne(s) créée(s).

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    merci bcp,
    cela devrai débloqué la situation,
    j'espérai qu'il existe une commende du genre "ON duplicate KEY IGNORE" comme dans Mysql,
    parceque là,
    ça va doubler le temps d'exécution, mais ça devrai aller

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut Passer par un curseur (pas top)
    Par un curseur c'est plus lisible, mais plus long
    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
    DECLARE 
    CURSOR c IS 
    SELECT DISTINCT col1,col2,col3 
    FROM TABLE2;
     
    BEGIN
     
    FOR r IN c LOOP
     BEGIN
      INSERT INTO TABLE1 (col1,col2,col3)
      VALUES (r.col1, r.col2, r.col3)
     EXCEPTION
    -- On catch l'erreur PK violation 
     WHEN DUP_VAL_ON_INDEX THEN NULL;
     END;
     
    END LOOP;
     
    COMMIT;
     
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Testify
    merci bcp,
    cela devrai débloqué la situation,
    Si les réponses fournit répondent au mieux a vos attentes , un petit tag résolu sera la bienvenue

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/10/2011, 18h36
  2. [ORACLE-SQL]virer mes doublons
    Par gusrom86 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/05/2007, 10h59
  3. [Delphi7][SQL] Supprimer les doublons
    Par fthdz dans le forum Bases de données
    Réponses: 11
    Dernier message: 08/03/2007, 09h39
  4. méthode sans sql pour les doublons
    Par pat1545 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/08/2006, 21h29
  5. [SQL] Enlever les doublons par rapport a une colonne
    Par irenee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/12/2005, 20h23

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