|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
Bonjour,
Depuis quelque temps j'essaie de coder une procédure qui me permet de parcourir diférentes lignes d'une colonne afin de réaliser un filtrage sur des caractères spéciaux. Pour cela je définis un curseur qui est censé a récupérer les différentes lignes d'une colonne pour appliquer ce filtre. Le problème que j'ai c'est que le curseur obtient le nom de la colonne au lieu de son contenu. Pour tant, quand j'exécute sur un client sql le select associé au curseur, l'ensemble de lignes est retourné. Voici partie de ma procédure: Code :
Merci d'avance pour votre aide. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est le code exact ? Parce que tab est une vue du dictionnaire qui est all_tables. En gros tu vas lire le dico plutôt que ta table.
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Ca a l'air d'avoir besoin d'un Sql dynamique.
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
Oui voilà c'était bien ça, sauf que maintenant que j'ai modifié le nom de ma variable local, j'ai l'exception
Code :
PL/SQL: ORA-00942: TABLE ou vue inexistante
Et même si dans le select du curseur je référence directement le paramètre passé à la procédure (NOMTABLE) j'ai exactement la même erreur. Au fait, la variable local je l'avais déclarée pour éviter ce genre de problème car je restais bloqué sur mon développement, mais malheureusement je suis revenu au même point. |
|
|
00
|
|
|
#5 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Non mais c'est ça qui est faux :
Code :
fetch selectCursor INTO contenuColonne;
Code :
Sachant que je ne sais pas d'où tu sors le nom de la table
|
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
Merci, je vais essayer de faire et tester cette modification. Le nom de la table et celui de la colonne dont j'ai besoin sont passés en paramètre à la procédure, donc récupérés par le flux principal qui fait l'appel.
|
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
Au fait, le
n’est utilisé que pour les requêtes ne ramenant qu’une ligne, alors que j'ai besoin de travailler avec un ensemble de lignes, puis les parcourir pour appliquer le filtre d'une manière unitaire. Mon problème venait de la déclaration du Curseur. J'ai lu dans la documentation que seul le nom de la table ne peut pas être passé via un argument de substitution, et c'était bien mon cas. Vu que je connais les deux tables qui vont être passées en paramètre, j'ai décidé de créer deux curseurs et travailler avec l'un ou l'autre en fonction de la table recue (IF..Then else-> pas génial je pense). Concernant le SQL dynamique j'ai essayé la ligne aussi le Code :
fetch selectCursor Bulk collect INTO contenuColonne;
Code :
|
||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 6 ![]() |
D'après mes tests je constate que la variable LC$columna est considerée comme une constante et n'est pas interpretée lors de l'exécution.
L'idée serait donc de rendre la partie select des curseurs dynamique, point que je n'ai toujours pas résolu. Any help??
|
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
On va pas faire le dév pour toi non plus
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com