Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2007, 15h11   #1
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
Par défaut [Oracle 10] Vérifier la bonne séquence d'enregistrements

Bonjour,

J'aimerais vous suggérer une problématique et prendre vos avis éclairés à son sujet !

Imaginons un fichier transformé en table Oracle via le *Loader par exemple. La table se présenterait comme suit, c'est à dire que la 1ère colonne contient un type d'enregistrement et la suivante des données. L'idée à ce stade est de vérifier que les types d'enregistrement se suivent dans l'ordre fonctionnel qui convient... Et également en corrolaire, la présence des enregistrements obligatoires.

Code :
1
2
3
4
5
6
7
8
9
 
T_ENR1||DATA...
T_ENR2||DATA...
T_ENR3||DATA...
T_ENR3||DATA...
T_ENR3||DATA...
T_ENR4||DATA...
T_ENR1||DATA...
(...)
Auriez-vous des idées ? Naturellement, il y a toujours la possibilité de lire ligne à ligne et de vérifier, mais c'est un peu brut... Une solution élégante et astucieuse est toujours la bienvenue

Merci, Fred
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 16h23   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
une table n'a pas d'ordre a priori... c'est à la restitution des données que tu imposeras un ordre d'affichage.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 16h39   #3
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
Je suis d'accord, je n'ai pas été tout à fait clair alors. En fait, la table est issue d'un fichier qui lui a un ordre... Donc pour respecter l'ordre du fichier dans la construction de la table, j'ai pensé ajouter une séquence comme un numéro de ligne ou d'enregistrement. L'utilisation de la clause order by devient alors possible.

Il existe également une colonne qui contient une valeur permettant de lier tous les enregistrements décrivant une unité fonctionnelle cohérente (faite d'une séquence d'enregistrements justement). Pê une porte ouverte vers l'utilisation d'une clause group by ?

Dès lors la problématique reste entière...
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 22h49   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Citation:
Envoyé par ftrifiro
Je suis d'accord, je n'ai pas été tout à fait clair alors.
C'est le moins qu'on puisse dire...
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 16h57   #5
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
Je réexplique tout mais en faisant super simple

Dans le fichier initial, il y a des unités fonctionnelles constituées par une suite logique d'enregistrements typés par leur première colonne

{
T_EN1
T_EN2
..
T_ENn
}

Après le chargement en table via le *loader, il y a une table avec le contenu du fichier.

Existe-t-il un moyen astucieux pour vérifier que la séquence des enregistrements pour chaque unité fonctionnelle est correcte ?

Merci, j'espère avoir été plus clair,

Frédéric
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 21h37   #6
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Comme vous disiez vous-même :
Citation:
Envoyé par ftrifiro
Donc pour respecter l'ordre du fichier dans la construction de la table, j'ai pensé ajouter une séquence comme un numéro de ligne ou d'enregistrement.
SQL*Loader vous permet effectivement de générer un numéro séquentiel pour chaque ligne.
Après, pour le contrôle, il faut vérifier les divers logs de SQL*Loader.
S'il n'y a aucune erreur, c'est que le chargement s'est déroulé conformément à votre fichier initial.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 09h46   #7
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
Oui je vois bien mais le problème n'est pas là en fait. Je n'ai pas l'assurance que le fichier chargé soit lui même conforme à la norme attendue. C'est ça que je dois vérifier. Je me demandais si c'était plus simple de le faire dans le fichier initial ou dans la table chargée.

(Sous réserve naturellement que le chargement se soit bien déroulé)
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 09h51   #8
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour tout le monde,
ftrifiro, si tu veux être sur de l'ordre des enregistrement avec sqlldr, charge complètement ton fichier dans une table temporaire en prenant soin d'ajouter un numéro de séquence, puis tu fait tes différents insert dans les tables qui vont bien. là tu auras la certitude de l'ordre.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 10h28   #9
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
D'accord donc la solution proposée est :

- chargement global via le *Loader du fichier dans une table temporaire
- lecture ligne à ligne de la table temporaire (et analyse)
- insertion des lignes dans les tables typées par enregistrement

Donc je laisserais tomber le *Loader pour charger les tables cibles.

La solution est sympa et ne peut que fonctionner. Idéalement, j'aurais aimé pouvoir utiliser aussi le *Loader pour ça. Oui, je sais, le beurre, l'argent du beurre et le joli sourire de la crémière (version soft )

A+, Fred
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 10h46   #10
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Citation:
Envoyé par kalyparker
Bonjour tout le monde,
ftrifiro, si tu veux être sur de l'ordre des enregistrement avec sqlldr, charge complètement ton fichier dans une table temporaire en prenant soin d'ajouter un numéro de séquence, puis tu fait tes différents insert dans les tables qui vont bien. là tu auras la certitude de l'ordre.
NON !
Il n'y a pas de notion d'ordre dans les tables relationnelles.
L'ordre est un aspect de restitution, lors du SELECT, qui impose d'utiliser un ORDER BY sur la colonne qui convient (celle qui a été générée par séquence).
Une table temporaire n'a aucun intérêt quant à l'ordre.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 11h02   #11
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
Il n'y a pas de notion d'ordre dans les tables relationnelles.
Ok, on est d'accord la dessus, mais si lors d'un insert avec sqlldr on ajoute un numéro de séquence, alors lorsque l'on va faire un select ... order by num_sequence alors on peux etre sûr que l'ordre des données dans le fichier chargé est le même que celui dans ce select. Non ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 11h05   #12
Membre du Club
 
Inscription : juin 2003
Messages : 156
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 156
Points : 51
Points : 51
Oui ben vous avez tous les deux raisons sur ce coup là, je crois que nous sommes bien d'accord, l'ordre est rendu possible par l'introduction de la séquence pendant l'étape de chargement et l'utilisation d'une clause order by.
ftrifiro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h32.


 
 
 
 
Partenaires

Hébergement Web