|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |||
|
Membre Expert
![]() ![]() |
Salut à tous
sans trop tarder voici mon code : Code :
ce que je veux faire est de récupérer la valeur du nombre de pompes si celle-ci vaut 1 alors la variable locale nb_p prend 1 sinon elle prend la valeur trouvé dans la table de données. ceci dans le but de calculer le volume moyen journalier dans une SR (station de relevage) comme décrit plus haut Citation:
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|||
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Bonjour
nb_p n'est pas déclaré dans le RETURNS, Normal ? et dans ta requête, je ne vois pas d'affectation pour la colonne tb_sr.nbr_pompe à une variable. Code sql :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() |
ok mon ami, je vais corriger et faire le retour.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() |
ok ça marche à merveille mais je voudrais pas faire figurer le nombre de pompe dans ma vue y'a t-il un truc pour le faire ?
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#5 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Tous les éléments qui doivent "sortir" doivent être inscrites dans la clause RETURNS et le choses qui doivent rester en interne déclares-les juste après cette clause avec "declare variable"
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() |
oui oui, je comprends bien la structure de la PS, d'ailleurs c'est pour cela que dans mon 1er code j'ai pas mis nbr_pompe comme variable de sortie mais hélas elle restait inconnue !!
ta proposition marche bien sauf que je veux rendre le nombre de pompe invisible est-il possible tout en gardant le teste évidement ?!
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#7 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
pas sur de bien saisir ta demande
![]() cette variable "nombre de pompe"que tu ne veux pas retrouver en sortie est celle nommée Nb_P ? si oui, tu la place en variable déclarée : Dans ce cas, les 2 variables déclarées avec cette "procédure" se seront jamais visible à l’extérieur de la PS seul, ces variables seront transmises vers l'extérieur : Code :
|
||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() |
très bien vu de ta part mon ami.
voici le code final : Code :
__________________
Bon courage ou Bonne Chance (selon le contexte) |
||
|
|
00
|
|
|
#9 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
heuuuu
Je ne vois pas l'affectation à "nbr_pompe" et je dois avouer que je reste dubitatif si ça marche je verrais plutôt la chose comme ceci : Code :
|
||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() |
non non je me suis trop précipité, le résultat est faux.
ce que je voudrais faire, pour ne pas rester dans mon esprit qui est peut-être sur ce coup tordu. j'ai un champ qui renseigne le nombre de pompe dans une station de relevage. je veux calculer le volume journalier à partie du débit nominal. en règle général, une station de relevage est équipée de n+1 pompe, le nombre de pompes en marche et n, le (1) c'est la pompe de secours, donc dans le calcul du volume on doit faire (débit * (nbr_pompe - 1)). mais comme certaine stations de relevage ne sont équipées que d'une seule pompe cette formule renvoi (0) comme résultat. alors, je dois auparavant vérifier si le nombre de pompe est différent de 1 sinon la formule redevient (debit*1) dans ce cas là. mon code ne parvient pas à faire ça et je ne trouve pas la bonne manière pour retirer le nombre de pompe, faire le teste puis exécuter la formule selon le cas. merci encore.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#11 | ||||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
et pourquoi ne pas calculer le volume non pas dans la requête, mais dans le corps de la PS ?
ex : Code :
ou dans la requete, en utilisant la fonction IIF de FIREBIRD Code :
|
||||
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() |
Re,
enfin de compte je retiens la seconde solution celle du IIF, elle me semble plus adéquate dans mon cas. mon problème est résolu mais tant qu'on y est je pose cette question pour ceux qui ont une bonne expérience en SQL : dans quel cas on utilise les requêtes et dans quel cas on utilise les PS ? car il me semble que le problème que j'ai posé peut-être résolu en requête sans passer par une PS. merci encore.
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#13 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
re
si tu retiens la 2eme solution, l'utilisation d'une PS n'est pas utile. Quand à généraliser, je ne suis pas assez théoricien, pour y répondre. une réponse simpliste sans doute, serait d'utiliser la PS quand l'opération n peux se résoudre assez une seule requête
|
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() ![]() |
ok
tant qu'on y est. dans une autre PS j'ai dans la clause where une variable type caractère, je voudrais garder le '%' mais la compilation m'indique une erreur et je vois mal comment ajouter ce fameux caractère. pour bien comprendre ma demande voici mon code : Code :
__________________
Bon courage ou Bonne Chance (selon le contexte) |
||
|
|
00
|
|
|
#15 | |||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
re
je vois 2 problèmes : le + et le " Citation:
Code :
|
|||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() |
Re,
Merci et bien vue une autre fois. à la compilation comme à l'exécution aucune erreur n'est signalée mais le résultat est faux. je m'explique, en enlevant la partie (|| + '%') j'ai le bon résultat tout avec comme contrainte d'écrire la totalité de ma chaine. mais quand j'ajoute cette portion à la ligne de code ce qui revient à ça Code :
(tb_curage.date_curage =: date_bilan AND tb_unite.nom_unite = upper(:unite || '%')) comme je suis ous IBX, celui là me permet de suivre ma variable et à ma surprise l'expression n'est pas évoluée puisque la variable vaut les lettres tapées !!!
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#17 | |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Citation:
Remplace-le pas LIKE ou mieux STARTING WITH Code :
(tb_curage.date_curage =: date_bilan AND tb_unite.nom_unite LIKE upper(:unite || '%')) Code :
(tb_curage.date_curage =: date_bilan AND tb_unite.nom_unite STARTING WITH upper(:unite)) |
|
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() ![]() |
oui c'était une omission de ma part, j'utilise le like mais l'ensemble renvoyé est toujours vide.
je viens d'essayer avec STARTING with est ensemble vide aussi je comprends pas où est le problème !
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
00
|
|
|
#19 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
n'y aurait-il un problème de casse ?
(tb_curage.date_curage =: date_bilan AND Upper(tb_unite.nom_unite) STARTING WITH upper(:unite)) |
|
|
00
|
|
|
#20 | |
|
Membre Expert
![]() ![]() |
Citation:
ce qui me tracasse c'est quand j'enlève cette syntaxe et que je mets l'ancienne sans le '%' le résultat et bien exact
__________________
Bon courage ou Bonne Chance (selon le contexte) |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com