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 :

Problème de clé primaire double


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut Problème de clé primaire double
    Salut à tous,

    Je fais un select sur plusieurs tables pour charger automatiquement une autre table que je ne nommerais table_finale. Il arrive des jours où la table finale n’est pas chargée parce qu’il ya un problème de clé primaire double(survenue d'une autre table qui nous ai livrée).

    J’aurai t-il une possibilité avec le sql de ne charger que les données des clés sans « problème » et pour celles qui ont un problème de clé primaire, de les rejeter et charger la table normalement. Les mauvaises données seront en suite sauvegardé dans un fichier.log ou fichier texte par exemple.

    Merci de votre aide
    Fiona

  2. #2
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Par défaut
    pour moi je te propose d'ajouter à ta table finale une nouvelle colonne de type auto_increment. j'ai eu le mm problème et c'est de cette manière que j'ai introduis plusieurs données de mm clé.

  3. #3
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Le rejet est à priori incompatible avec la notion de traitement par lot.

    - soit tu fais du traitement ligne à ligne et quand une erreur est levée tu rejettes la lignes. C'est ce que font certains ETL (Genio par exemple). Attention aux perfs.

    - soit tu fais une table temporaire indexée mais sans contrainte dans laquelle tu travailles pour retirer les lignes en doublon (je crois que l'ETL ODI travaille comme ça)

    - soit tu fais un select qui ne prends pas les doublons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select clé, count(*) from source group by clé having count(*) = 1
    et un autre select qui prends les doublons et les mets dans la table de rejet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select clé, count(*) from source group by clé having count(*) > 1
    - soit tu peux tenter un trigger sur ta table finale qui contrôle s'il n'y a pas déjà une ligne avec la même clé primaire

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Citation Envoyé par nuke_y Voir le message
    Le rejet est à priori incompatible avec la notion de traitement par lot.
    Pour éviter le ligne à ligne depuis 10GR2 il y a dml error logging

  5. #5
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Formidable fonctionnalité, j'adore. Bon donc ça dépend de la version de Fiona8

  6. #6
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut à tous,

    Merci pour vos réponses. Je traivaille pour le moment avec le version 9.2 d’oracle.

    Comment faire un traitement ligne à ligne avec sql ? Je n’utilise aucun ETL. Je dois gerer cela avec du code sql ?

    @ skuatamad
    Merci pour le lien. Je vais lire et voir si je peux aussi l’exploiter pour la version 9.2 d’oracle.

    Merci
    Fiona

  7. #7
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Citation Envoyé par nuke_y Voir le message
    Le rejet est à priori incompatible avec la notion de traitement par lot.


    - soit tu fais un select qui ne prends pas les doublons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select clé, count(*) from source group by clé having count(*) = 1
    et un autre select qui prends les doublons et les mets dans la table de rejet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select clé, count(*) from source group by clé having count(*) > 1
    Salut nuke_y,

    quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into table_finale (select count(id_1), id_1, id_ex_2, demp_2, emp_1, date_1, text_1 from table_1, table_2 where id_1 = id_2
    group by id_1, id_ex_2, demp_2, emp_1, date_1, text_1having count(id_1) = 1)
    cela ne fonctionne pas.

    Que dois je faire ou changer?

    Merci pour ton aide
    Fiona

  8. #8
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    j'obtient la faute:ORA-00913: too many values

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Tu n'as probablement pas de colonne dans table_finale pour recevoir count(id_1). Retire le du select, il n'est pas obligatoire pour faire le GROUP BY HAVING.

  10. #10
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO table_finale
       (SELECT   id_1, id_ex_2, demp_2, emp_1, date_1, text_1
            FROM table_1, table_2
           WHERE id_1 = id_2
        GROUP BY id_1, id_ex_2, demp_2, emp_1, date_1, text_1
          HAVING COUNT (id_1) = 1)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO table_finale
       (SELECT id_1, id_ex_2, demp_2, emp_1, date_1, text_1
          FROM (SELECT   COUNT (id_1), id_1, id_ex_2, demp_2, emp_1, date_1,
                         text_1
                    FROM table_1, table_2
                   WHERE id_1 = id_2
                GROUP BY id_1, id_ex_2, demp_2, emp_1, date_1, text_1
                  HAVING COUNT (id_1) = 1))
    EDIT:
    tsssss et voila. On met en forme le code et on se fait griller

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

Discussions similaires

  1. problème de clé primaire double
    Par imen.m dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 13/09/2013, 16h07
  2. Access 97 - Problème de clé primaire.
    Par Korskarn dans le forum Access
    Réponses: 2
    Dernier message: 08/11/2005, 09h18
  3. Problème ouverture fichier par double clic...
    Par sankookai dans le forum MFC
    Réponses: 4
    Dernier message: 11/05/2005, 09h13
  4. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 11h28
  5. problème avec clee primaire autoincremente
    Par ekmule dans le forum Langage SQL
    Réponses: 13
    Dernier message: 11/05/2004, 08h46

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