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 :

Nettoyage des données


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut Nettoyage des données
    Bonjour,

    Pour compléter le tableau suivant :

    champ1|champ2|...|prix|nouveau_Prix
    .|.|...|45|40
    ...


    J'ai le scénario suivant :

    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
    -- 01 : avant delete
    select * from table1 where id = 1;
    
    id prix
    1 45
    1 62
    1 50
    
    -- 02 : apres delete
    delete from table2 where id = 1;
    
    select * from table1 where id = 1;
    
    id prix
    1 40
    1 62
    1 50
    
    rollback;
    Je rollback parce que je ne veux pas supprimer mes lignes, je veux seulement comparer le prix avant et après le nettoyage et voir s'il change ou pas.

    Dans mon exemple ci-dessus le prix change pour une seule ligne et ce n'est pas toujours la première (je ne peux pas savoir laquelle qui change), ça peut être la 2eme ou la 3 eme ...

    sachant que j'ai 10000 id, ma première requête me renvoie pour chaque id 5 ou 6 lignes, du coup 10000 * 5 ou 6 lignes au final.


    Je dois faire tout ça pour mes 10000 id du coup mon idée c'est de créer 2 tables temporaires, une pour sauvegarder l'état avant delete et l'autre après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- 01 : avant delete
    create table tmp_before_table1 as
    select * from table1 where id in (1,2,3,.....);
     
    -- 02 : apres delete
    delete from table2 where id in (1,2,3,.....);
     
    insert into tmp_after_table2 
    select * from table1 where id in (1,2,3,.....);
     
    rollback;
    Ensuite je compare les deux tables (tmp_before_table1 et tmp_after_table2) pour récupérer le prix qui change.

    sauf que dans la deuxième étape si je rollback alors ma seconde table (tmp_after_table2) sera vide et je ne peux pas la comparer avec la première.

    J'ai pas d'autres idées c'est pour ça je suis la pour voir si mon idée tient la route et/ou si vous en avez d'autres?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Bonjour Kisty10,

    je veux seulement comparer le prix avant et après le nettoyage et voir s'il change ou pas
    => Quelle est l'action a réaliser s'il y a des différences ? Affichage des données ? insert de l'id concerné dans une autre table ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut
    Bonjour vttman,

    Une fois j'ai mes données après la suppression (il faut surtout pas que je commit) je les insert avec leurs ID dans une table et je compare avec la première qui contient le prix avant modif (je n'ai pas pensais a comment comparer les deux tableaux)


    Une fois j'ai comparé mes données des deux tables, je rempli dans un fichier excel le prix avant et après modification comme ceci :

    champ1|champ2|...|prix|nouveau_Prix
    .|.|...|45|40
    ...


    Je ne sais pas si cette idée tient la route parce que pour avoir les nouvelles données dans la table 2 je dois commiter.

    Merci

  4. #4
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    prenons un exemple

    table1
    id prix
    1 45
    1 62
    1 50

    table2
    id prix
    1 40
    1 62
    1 50
    On a toujours le même nombre de lignes ? il faut juste détecter la différence 40 - 45 ?
    Et comment ces informations sont elles triées ?
    Ne pas voir un order by dans un select me semble hasardeux !?

    On pourrait tout aussi bien avoir lors du select ceci
    =>
    table1
    id prix
    1 62
    1 50
    1 45

    table2
    id prix
    1 40
    1 50
    1 62

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut
    Le problème n'est pas la, c'est plutôt :

    -- 02 : apres delete
    delete from table2 where id in (1,2,3,.....);

    insert into tmp_after_table2
    select * from table1 where id in (1,2,3,.....);

    rollback;

    Comment remplir ma table tmp_after_table2 sans commiter? sachant si je rollback ma table est vide.

  6. #6
    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
    Certainement que vous vous y prenez mal pour faire ce type de comparaison!
    Bon si j'ai bien compris, la petite chose que vous cherchez pour rester dans votre scénario vous devez juste placer un savepoint là où vous voulez revenir et faire un rollback to savepoint.

Discussions similaires

  1. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  2. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  3. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  4. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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