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 :

Procédure stockée "Update table" avec pl sql pour rechercher des doublons


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Procédure stockée "Update table" avec pl sql pour rechercher des doublons
    * Bonjour, *

    En supposant ne disposer que d'une table avec les champs suivants:
    members_tbl collones : SN, FN, DB, IDDBL,FLAG, DBLCRIT

    Je voudrais créer une procédure stockée qui puisse mettre à jour une table si les conditions sont remplies afin de détecter des doublons potentiels en utilisant l'algorithme de jaro_winkler. Avec cet algorithme :
    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
     
    id_dup := 1;
    FOR (i in 1 to Nrow(members_tbl)) THEN
        {
        FOR (j in (i+1) to Nrow(members_tbl)) THEN
            {
                IF(members_tbl(i).iddbl IS NULL) THEN
                    members_tbl(i).iddbl := id_dup
                IF (((members_tbl(i).DB ==members_tbl(j).DB) 
                                    AND (UTL_MATCH.jaro_winkler_similarity(members_tbl(i).SN,members_tbl(j).SN) > 80) 
                    AND (UTL_MATCH.jaro_winkler_similarity(members_tbl(i).FN,members_tbl(j).FN) > 80))
                    AND (members_tbl(j).iddbl IS NULL)) THEN
                    {
                        members_tbl(j).iddbl := id_dup;
                        members_tbl(i).flag := 1;
                        members_tbl(j).flag := 1;
                        members_tbl(i).dblcrit:= 1;
                        members_tbl(j).dblcrit:= 1;
                    }
     
            }
            id_dup := id_dup + 1;
        }
    Comment pourrais je transcrire cet algorithme en pl/sql s'il vous plaît ?
    Merci d'avance.

  2. #2
    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
    Il te suffit de remplacer dans ton code les accès mémoire à members_tb par des accès à la table members_tb avec des curseurs et des updates

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR (i in 1 to Nrow(members_tbl)) THEN
    =>
    FOR i IN (select * from members_tbl ORDER BY <pk>) -- Il faut un ordre de tri
    LOOP
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    members_tbl(i).flag := 1;
    members_tbl(i).dblcrit:= 1;
    =>
    UPDATE members_tbl set flag = 1, dblcrit = 1 WHERE <pk> = i.<pk>

    Je suppose que c'est pour du TP, sinon je pense que l'algo est optimisable.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    Bonjour,

    comme l'a évoqué McM ton problème ressemble à du TP, si cela en est le but est que tu trouves la réponse à ton problème toi même, pas quelqu'un d'autre.

    Cela dit je te donnerais comme piste ce qui suit :

    Utilises UTL_MATCH dans une ou plusieurs requêtes de contrôle en début de ton code pour trouver si oui ou non le besoin est rempli (http://docs.oracle.com/cd/E18283_01/...60/u_match.htm).

    Ça devrait faire l'affaire.

    Philippe CEROU,

    Architecte Systèmes & Bases de données.

Discussions similaires

  1. Requête pour rechercher des doublons partiels
    Par jubourbon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/06/2011, 12h22
  2. Chargement d'un XML en tables avec PL/SQL
    Par jenlin dans le forum PL/SQL
    Réponses: 7
    Dernier message: 21/03/2011, 13h55
  3. "fusion" de trois tables avec traitement SQL
    Par Requin15 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/11/2006, 22h34
  4. Utiliser SQL pour archiver des données de tables
    Par com-ace dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/08/2006, 19h53
  5. PRocédure stocké, comment appeler avec delphi?
    Par SkyDev dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/04/2004, 19h20

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