|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
Bonjour,
Je rencontre un problème lorsque j'essaie de faire un COUNT au milieu d'une procédure stockée. (je vous passe une partie de la proc stoc qui est assez longue, mais toutes les variables sont correctement déclarées.) Voici cette requête : Code :
Mais 'nval' reste définitivement égal à 0, alors que manuellement et isolée, la même requete me retourne bien un nombre. J'ai également essayé plusieurs écriture pour faire ce 'SELECT' avec notamment la méthode EXECUTE IMMEDIATE. Mais même résultat. Merci de votre aide. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
C'est la journée débuggage...
Et avec ça, ça te donne quoi ? Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Tu peux mettre un IF et ne pas lancer la requête, ce sera mieux.
Ensuite si njalnum est NULL au départ au lieu de 0, alors NULL + 1 => NULL et ainsi de suite. Ne sachant pas où tu as coupé du code, j'ai mis le IF avant la seconde boucle. Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#4 | ||
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
Bonjour à vous,
Déjà, merci pour vos réponses Jerome_Mtl, je mets des '''' et || car ces champs sont des varchars donc il me semble normal d'insérer des quotes. Surtout que les variables que j'appelle ne les inclus pas. J'ai tout de même essayé sans au cas où je me trompais, mais résultat identique. McM, le cas du IF ne fonctionne pas dans ce cas. En effet mon tableau n'est jamais vide, il contient une liste de nom de colonnes, et c le contenu des données de ces colonnes qui ne doit pas être vide. Ainsi dans ma requete, 'WHERE lst_jalons(i) IS NOT NULL' est essentiel car ici ce n'est pas le contenu du tableau lst_jalons que je test mais la donnée de la colonne contenu dans celui-ci. Enfin pour l'initialisation de njalnum, je l'ai effectivement omis dans le code que je vous ai fourni, mais je l'ai bien initialisé à 0 dans mon code, ainsi que nval. POur plus de clarté, je vous montre la requete déroulée 'à la main' : Code :
A la fin de ma Proc, je remonte les Exceptions, voici celle qui m'est remonté dans mon cas : ORA-01007: la variable n'est pas dans la liste SELECT. Descriptions de l'erreur : this can occur if the number passed for the position parameter is less than one or greater than the number of variables in the SELECT clause. Je comprends encore moins ce résultat étant donné que j'ai un seul champ (count) pour une variable. |
||
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : juillet 2003 Messages : 538 ![]() |
déjà peux tu faire une sortie ( un dbms_output.put_line) de tes paramètres dans la boucle, avant le select ?
Histoire de vérifier que les valeurs que tu mets manuellement sont bien les mêmes.
__________________
C'est pas parce que ca marche que c'est bon!! Pensez au bouton "Résolu" Je ne réponds pas en privé aux questions |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
1. Le schéma n'est pas clean (colonnes mois et années en varchar au lieu d'une seule colonne de type date)
2. pourquoi voulez-vous compter ? |
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
Miloux, oui ce sont bien les mêmes, j'ai bien sur commencé par vérifier cela. Les données que je donne d'ailleurs dans la requete plus haut sont celles obtenues avec un dbms_output.put_line justement
LeoAnderson, oui je sais pour la date, mais la table a été faite comme ca et je ne peux pas la modifier. Sinon je dois compter car je ne vois pas d'autres solutions à mon problème. J'ai une table dont les colonnes correspondent à des dates (des jalons), et je dois savoir combien de ces colonnes sont renseignées parmi un panel de jalons prédéfinit. Ce panel correspondant au tableau que j'ai créé. En gros il faut que je compte le nombre de colonnes (parmi une liste) dont la données est non vide selon plusieurs critères. Peut être y a 'til une autre façon de faire plus simple. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
pourquoi voulez-vous compter ?
pour avoir le nombre exact ? pour savoir s'il y en a "au moins un" ? .... |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
Pour avoir le nombre exact.
|
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Citation:
Et je le prouve : Code :
|
|||
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
Effectivement c'est un test intéressant.
Ici, j'ai 3 variables de type varchar2: nannee, nmois et lst_type_jalons(j) (qui est un tableau de varchar2 en faite). Donc si je comprends bien comme je compare un varchar2 à un autre varchar2 et que ces valeurs sont déjà "quotés" inutile d'en rajouter. Néanmoins, j'ai également testé sans les quotes car sur ce point je n'étais pas sur de moi. Mais j'obtiens le même résultat c'est à dire nval=0. |
|
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : juin 2003 Messages : 52 ![]() |
ok, j'ai bien avancé sur le problème que je rencontre et je sais maintenant où ca coince.
ca vient ni d'un problème de quote ni de ma requete, juste un delete qui est executé plus tot et qui supprimait les lignes que je testais dsl pour le dérangement. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com