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 10] Pour des contrôles efficaces


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut [Oracle 10] Pour des contrôles efficaces
    Bonjour,

    J'aimerais vous soumettre une nouvelle problématique ou plutôt avoir vos retours d'expérience quant à la façon d'effectuer de nombreux contrôles sur des données. Je m'explique. Imaginons une table classique avec ses colonnes. L'idée est de faire en gros un ou plusieurs contrôles par zone : présence, format, contenu...

    Est-il plus judicieux de lire chaque enregistrement à la suite et de faire les contrôles à la suite à l'intérieur d'une boucle, comme indiqué ci-après...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Pour chaque enregistrement de la table
       Si zone 1 incorrecte alors
           Traitement erreur
       FinSi
       ...
       Si zone n incorrecte alors
           Traitement erreur
       FinSi
    FinPour
    ...Ou alors de traiter de façon ensembliste les contrôles, ce qui pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Rechercher tous les enregistrements pour lesquels la zone 1 est incorrecte
    Pour chaque enregistrement récupéré
        Traitement erreur
    FinPour
    ...
    Rechercher tous les enregistrements pour lesquels la zone n est incorrecte
    Pour chaque enregistrement récupéré
        Traitement erreur
    FinPour
    J'espère avoir été clair .

    Merci, Frédéric.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Il faut éviter au maximum de parcourrir les grosse table, donc à mon avis la première méthode est moins couteuse sauf si tout tes tests arrivent à passer par des indexs, ce qui serais du bol....

    Pour optimiser encore je pense qu'il faut faire une combinaison des 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Rechercher tous les enregistrements pour lesquels 
       (la zone 1 est incorrecte ou la zone 2 est incorrecte etc....)
    Pour chaque enregistrement récupéré
      Si zone 1 incorrecte alors
           Traitement erreur
       FinSi
       ...
       Si zone n incorrecte alors
           Traitement erreur
       FinSi
    FinPour
    Attention ça va optimiser si la nature des test n'est pas trop lourde, sinon il faut s'en tenir à ta solution 1.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Merci.

    Pour la clarté du code et sa modularité, j'avoue préférer la solution 1 également. Pourquoi pas combiner si possible, mais pas évident néanmoins...

    D'ailleurs, selon vous, l'opportunité de l'une ou l'autre méthode peut-elle dépendre de la taille de la table ou pas ?

    D'autres avis ?

    Merci.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Je serais bien moins catégorique que mes collégues

    Cela dépend de la structure de la table, de la quantité de données sélectionnées et du controle. La table est-elle partitionnée, volumineuse et indexée ? Les contrôles sont-ils complexes ? Est ce que la sélection porte sur toute la table ?

  5. #5
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Je vais tenter de répondre.

    Cette table est issue d'un fichier, donc fabriquée à l'aide du *Loader. A priori, elle ne comporte pas d'index et il serait délicat d'en trouver de judicieux je crois. Elle n'est pas partitionnée. Toutes ses lignes doivent être contrôlées. Parmi les contrôles il y a un peu de tout. Du plus simple (format, présence) au moyen (présence de la valeur dans une table de référentiel) au complexe (croisé entre valeurs).

    Frédéric.

  6. #6
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par ftrifiro
    Toutes ses lignes doivent être contrôlées.
    A partir de là, il me semble qu'il vaut mieux lire une seule fois de manière sequentielle donc la solution 1.

    Plutot que de selectionner les infos qui correspondent à un critère donnée, puis celle qui correspondent à un autre critère etc. Puisque que au mieux tu liras toute la table mais en passant par des indexes (que tu n'as pas) ce qui est plus couteux que de lire toute la table directement et au pire tu liras toute la table autant de fois que tu as de controle puisque qu'il n'y a pas d'index

    Citation Envoyé par ftrifiro
    Du plus simple (format, présence) au moyen (présence de la valeur dans une table de référentiel) au complexe (croisé entre valeurs).
    Autant il me semble que tu peux te passer d'index sur la table a controler puisque tu veux tout controler mais par contre fait attention de bien indexer tes tables de referentiel sinon tu vas droit dans le mur au niveau de perfs. Pareil pour tes controles croisés si il ne s'agit pas de comparaison entre des valeur de la meme table

  7. #7
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    bonjour,
    suivant la taille de la table, il serait judicieux de charger la table dans un tableau via un bulk collect, puis de faire les contrôle par itération sur le tableau...
    le bénéfice sera de laisser la table disponible pour les opérations de corrections déclenchées par les contrôles effectués...

    mais par contre le contrôle lui-même peut être un poil plus lourd à coder... mais je pense qu'en terme de perf ce serait intéressant !
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  8. #8
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Réponses extrêmement intéressantes, merci.

    Tout concourt vers la solution 1/ ce qui me soulage un peu car c'était ma préférée. Mais mes collègues ici me poussaient vers l'autre. Avoir des avis dans mon sens me conforte donc .

    Pour l'utilisation des bulk collect, oui c'est aussi une bonne idée. Il faut que je vois comment je vais gérer les erreurs aussi. Je vais intégrer ça dans une réflexion globale.

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/11/2007, 19h13
  2. ORACLE 10 : changer d'OWNER pour des objets
    Par lediz dans le forum SQL
    Réponses: 2
    Dernier message: 09/07/2007, 15h59
  3. [C# et GSM] trouver des contrôles pour cartes sim et modems gsm
    Par Abydos Business Group dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/07/2006, 00h47
  4. Réponses: 1
    Dernier message: 21/02/2006, 17h13
  5. Pb pour cacher des contrôles à l'ouverture d'une page
    Par Anne1969 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/01/2005, 15h16

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