|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Céline Inscription : février 2011 Messages : 14 ![]() |
bonjour,
je travaille avec SQL developper. Je fais de l'appariement de libellé de voie. Je cherche à insérer dans une table RECAP, les données d'une autre table (table A), tout en leur affectaant un niveau d'appariement.. Niv 0: libelle identique entre les deux tables Niv1 : type de voie et mot classant identiques... Niv 2: type de voies différents et mot classants identiques. Niv 3 : absence de voies Le problème se pose au niv 2. les données s'apparient bien mais il me reste des libellés qu'il ne m'a pas trouvé. Par exemple, Dans la TABLE A, j'ai AVENUE TOURNESOLS, BOULEVARD TOURNESOLS et TRAVERSE DES TOURNESOLS. Dans ma table RECAP, j'ai AVENUE DES TOURNESOLS et BOULEVARD DES TOURNESOLS. Il m'identifie bien AVENUE TOURNESOLS et AVENUE DES TOURNESOLS en niv 1. Meme chose pour les Boulevard. Cependant, il ne m'a pas identifier TRAVERSE DES TOURNESOLS en niveau 2. Il me le considère comme une absence de voie (niv 3). Cette voie n'est pas absente mais mal appariée. Je cherche alors à créer une boucle dans un INSERT. Objectif : Insérer les voies présentes dans la table A et pas dans la table RECAP,dans la table RECAP qui répondent au critères du niveau 2. que la boucle tourne jusqu'à qu'elle n'est plus trouvée de voie correspondant au niv2. Débutante depuis peu avec Oracle et le SQL. Je ne sais pas du tout comment m'y prendre. Je pensais utiliser une boucle WHILE, vu que je veux que la boucle réponde aux conditions type de voie différents et mot_classants identiques. Quelqu'un a t-il déjà eu ce type de problème et me donner quelques conseils ??? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Pour t'aider, il faudrait en savoir un peu plus.
Que veux-dire "MOT CLASSANT" ? IL faudrait également la description de tes tables avec les clés primaire et les relations entre tables ! A première vue, pas besoin de boucle. Du simple SQL devrait suffire.
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Céline Inscription : février 2011 Messages : 14 ![]() |
Mot classant est le dernier mot du libellé.
J'ai 3 tables. Table H : avec des libellés d'une commune A Table S : avec les libellés de la même commune. RECAP table de réception des tables H et S Je cherche à apparier ces 2 tables en affectant des niveaux d'appariement. J'ai déjà inséré les données de ma 1ère table adresse(table H). Je souhaite apparier les données de ma table S avec les données de la table H dans la table RECAP. TABLE_H --------- PID_H varchar2 type_voie_h varchar2 libelle_h (nom complet) varchar2 mot_classant_h varchar2 TABLE_S --------- PID_s varchar2 type_voie varchar2 com_nme varchar2 libelle (nom complet) varchar2 mot_classant varchar2 RECAP ------- PID_H varchar2 PID_S varchar2 type_voie_h varchar2 type_voievarchar2 libelle_h (nom complet) varchar2 com_nme varchar2 mot_classant_h varchar2 mot_classant varchar2 niv_app_h_s (niv 0,1,2,3) integer 1/ insertion de la table H dans RECAP. 2/ appariement de la table H et S dans RECAP, avec des update de S dans RECAP. EN gros je veux faire une boucle pour être sûr que tous les libellés de ma table S vont être dans ma table RECAP. Ce qui n'était pas le cas quand je fais un update pour chaque niveau. Par exemple,pour le niveau 1 voici le Code: Code :
Il y a des voies de S qui ne m'insère pas dans RECAP. Par exemple dans RECAP, TYPE_VOIE_H | LIBELLE_H | MOT_CLASSANT_H | ------------------------------------------------------------------------ AVENUE | AVENUE COMMANDANT BERNARD | BERNARD TYPE_VOIE_S | LIBELLE_S | MOT_CLASSANT_S | Niveau appariement ------------------------------------------------------------------------ IMPASSE IMPASSE BERNARD BERNARD 2 Mais si j'ai en plus dans Table S : TRAVERSE BERNARD. Moi ce que j'attends c'est : TYPE_VOIE_H | LIBELLE_H | MOT_CLASSANT_H | ------------------------------------------------------------------------ AVENUE | AVENUE COMMANDANT BERNARD | BERNARD TYPE_VOIE_S | LIBELLE_S | MOT_CLASSANT_S | Niveau appariement ------------------------------------------------------------------------ TRAVERSE TRAVERSE BERNARD BERNARD 2 ce n'est pas ce qui se passe. Il considère TRAVERSE BERNARD comme Absente de la table H alors que le niveau 2 existe. Suite à ce constat, je souhaite faire une boucle pour tout récupérer. Voilà ce que j'ai tenté : Code :
Error report: ORA-01001: curseur non valide ORA-06512: à ligne 25 01001. 00000 - "invalid cursor" !! Pouvez m'orienter afin que je puisse comprendre comment faire une boucle dans mon cas? Merci |
||||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Deja :
Ne pas faire
car ces trois opérations sont IMPLICITES par l'utilisation de la boucle FOR curseur IN.... L'erreur vient du fait que vous faites un CLOSE déjà fermé (par la sortie de la boucle) Code :
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
||
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Céline Inscription : février 2011 Messages : 14 ![]() |
je viens de lancer le script !
Code :
Code :
j'ai du louper quelquechose mais je ne vois pas trop !! |
||||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Il faut mettre des alias ou préfixer les colonnes pour discerner le colonnes de même nom dans chacune des tables
Code :
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
||
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Céline Inscription : février 2011 Messages : 14 ![]() |
re bonjour,
Désolé pour l'absence de réponse... J'ai bien noté votre conseil mais le problème doit venir d'ailleurs... J'ai essayé une autre solution : Code :
cependant, il m'affiche toujours des erreurs. Il me dit que "Niv2" n'est pas déclaré alors que j'ai déclaré mon curseur ... Code :
Merci d'avance |
||||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
1) Il y a un select dans la partie DECLARE
2) A quoi sert NIV2 ? Il n'est utilisé nulle part ! Il serait plus simple de nous dire ce que doit faire ce code, car, en l'état, il est, comment dire ... au choix - peu orthodoxe - incompréhensible - compliqué - illisible Exemple (trivial) d'utilisation trés courante de boucle "curseur" (trivial parce que dans, l'exemple, on n'aurait même pas besoin de boucle PL/SQ, un simple update suffirait) Code :
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com