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 :

Eliminer les enregistrements dupliqués


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut Eliminer les enregistrements dupliqués
    Bonjour à tous

    Voila j'ai des mails qui seront envoyé automatiquement chaque jour, lors d'une demande de client.

    la demande du client sera enregistrée dans TABLE_IN

    la réponse sera insérée dans TABLE_OUT mais le problème elle est insérée 2 fois successivement, c'est un problème du serveur d'envoi.


    la TABLE_OUT est sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __ID___MAIL_CLIENT_____MAIL_TEXT______DATE_CREATION______DATE_ENVOIE___ETAT_ENVOI___
    je veux créer une procédure ou un fonction qui permet de vérifier les ID ou DATE_CREATION ou DATE_ENVOIE

    pour le même MAIL_TEXT et le même MAIL_CLIENT si il sont double dans TABLE_OUT je mets le statut de l'un des deux à FAILED (il y a deux états : SENT et FAILED)

    ou bien en vérifiant DATE_CREATION entre les deux ligne si il y'a un écart < 2 second je mets l'État de l'un des deux à FAILED

    sinon en vérifiant pour le même MAIL_TEXT et le même MAIL_CLIENT le ID et ID+1
    nb : l'état FAILED permet de ne plus envoyé le mail.

    Merci pour vos habituelles collaborations

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Personne ne veut m'aider



  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    ou bien en vérifiant DATE_CREATION entre les deux ligne si il y'a un écart < 2 second je mets l'État de l'un des deux à FAILED
    Mauvaise solution, ce délai est purement arbitraire et ne permet en rien de savoir s'il s'agit d'un réel doublon

    Citation Envoyé par LandGreen Voir le message
    sinon en vérifiant pour le même MAIL_TEXT et le même MAIL_CLIENT le ID et ID+1
    Non plus, d'une part les identifiants ne sont pas obligatoirement insérés chronologiquement dans l'ordre des valeurs, d'autre part, même si c'était le cas, l'ID+1 peut avoir été consommé par un autre thread pour un autre émetteur

    De plus, pourquoi vouloir supprimer le doublon fonctionnel, il est possible que le même message ait été émis volontairement deux fois, tout simplement parce que la première fois l'émetteur avait oublié les pièces jointes. C'est un grand classique qui nous arrive à tous, et il me semble que dans ce cas il est judicieux d'en conserver la trace.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    merci pour votre réponse mais...

    le problème est dans le serveur d'envoi; il répond et il insère deux fois à chaque demande, la seule solution est de changer l'état de l'envoi de l'un des deux doublons !!!

    d'autre idées s.v.p ?

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Cette requête me ramène pour chaque MAIL_CLIENT le MAIL_TEXT et le nbr répétition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT   COUNT(MAIL_TEXT) AS nbr_doublon, MAIL_CLIENT, MAIL_TEXT, ETAT_ENVOI
    FROM     TABLE_OUT
    WHERE TRUNC(CREATE_DATE) = TRUNC(SYSDATE)
    GROUP BY MAIL_CLIENT, MAIL_TEXT, ETAT_ENVOI
    HAVING   COUNT(MAIL_TEXT) > 1
    mais comment faire pour sélectionner la ligne dont l'occurrence est répété et pourvoir changer le status ?

  6. #6
    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
    Tu boucles dessus et tu updates avec rownum < au nombre de lignes en doublon moins une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FOR r in (SELECT   COUNT(MAIL_TEXT) AS nbr_doublon, MAIL_CLIENT, MAIL_TEXT, ETAT_ENVOI
    FROM     SMSSERVER_OUT
    WHERE TRUNC(CREATE_DATE) = TRUNC(SYSDATE)
    GROUP BY MAIL_CLIENT, MAIL_TEXT, ETAT_ENVOI
    HAVING   COUNT(MAIL_TEXT) > 1)
    LOOP
     UPDATE SMSSERVER_OUT
    set ...
    WHERE mail_client = r.mail_client
    AND mailt_text = r.mail_text
    AND etat_envoi = r.etat_envoi
    AND ROWNUM <  r.nbr_doublon;
    END LOOP;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    instruction SQL non valide

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Et quel est le message d'erreur?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    ORA-00900

  10. #10
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Le code de McM est du PL/SQL, pas du SQL, il faut donc l'inclure dans un bloc PL/SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN
    ...  --> son code ici
    END;
    /
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    Merci BCP Ikebukuro mais maintenant il m'affiche "nbr_doublon" identificateur non valide

  12. #12
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Aïe, ça devient plus tendu... il faut juste remplacer nbr_doublon par r.nbr_doublon
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 413
    Points : 40
    Points
    40
    Par défaut
    merci infiniment Ikebukuro ça fonctionne, je suis entrain de faire des tests, j'espère que ça ira comme voulu.

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

Discussions similaires

  1. Compter les enregistrements formulaire
    Par mat44_39 dans le forum IHM
    Réponses: 4
    Dernier message: 17/06/2005, 12h21
  2. [Envoi mails]Récupérer les enregistrements MX d'un domaine
    Par streetpc dans le forum Développement
    Réponses: 7
    Dernier message: 09/06/2004, 20h00
  3. Afficher les enregistrements si le count() vaut 0
    Par j14z dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/04/2004, 09h51
  4. Affichez les enregistrements du mois en cours ?
    Par Koala-Prog dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/08/2003, 15h14
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

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