J'ai des variables dans la procédure stockée a un comportement que je ne comprends pas, les variables à l'intérieur d'une boucle conservent la valeur de la boucle précédente !!Varriable conserve la valeur assignée précédente dans une boucle
Voici la procédure stockée
v_no = 3;
v_counter = 1;
is_special = 1;
while (:v_counter <= :v_no) do begin
if (:is_special = 1) then begin
select tmaster.axis, tdetail.dim_val
from tdetail
right outer join tmaster on (tdetail.sp_id = tmaster.sp_id)
where (tmaster.sp_id = 17) And (tdetail.pos = :v_counter)
into :v_axis, :v_dim_val; /* variable retain previous loop values */
/* ..... more code here */
end
end
J'ai ici deux tables, tmaster comme une table maître et tdetail comme table détail. Lors de l'exécution de la seule déclaration Select
dans le code ci-dessus avec v_counter = 1,2, et 3 devrait aboutir à
axis dim_val
----------------
X 14
null null
X 14
mais quand v_counter = 2 I get 'X' pour axis
et 14 pour dim_val
!!, comme un travail autour de I définir les deux variables à null dans le premier de chaque boucle directement après l'instruction while
, mais pourquoi les variables :v_axis
et :v_dim_val
n'a pas été affecté à null lorsque v_counter = 2 et pourquoi ils conservent les valeurs de boucle précédentes ??
Oh oui pas d'enregistrement où pos = 2, existe-t-il un moyen de retourner null? – Wel
Oui, vous pouvez écrire une requête qui renvoie "null row" mais IMO le code serait beaucoup plus difficile à lire/comprendre alors. Mieux vaut juste initialiser les variables à 'NULL' avant' select', c'est facile à suivre ... – ain
oui mais juste pour information à quoi devrait ressembler cette requête? – Wel