我在存储过程中有变量有一个我不明白的行为,循环内的变量保留了前一个循环值!!
这是存储过程
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
我这里有两个表,tmaster作为主表,tdetail作为详细表。在上面的代码中单独执行Select
语句时,v_counter = 1,2,而3应该导致
axis dim_val
----------------
X 14
null null
X 14
但是当v_counter = 2时,axis
获得'X',dim_val
获得14',作为解决方法,我将两个变量在每个循环的第一个中设置为null while
语句,但是为什么变量:v_axis
和:v_dim_val
在v_counter = 2时没有赋值为null,为什么它们保留以前的循环值?
答案 0 :(得分:1)
我怀疑你tdetail
pos = 2
实际上没有记录,对吧?因此,select查询的结果是空结果集,而不是所有字段都为NULL
的行。由于结果集中没有行,因此没有任何内容可以分配给变量(:v_axis
,:v_dim_val
),因此它们会保留其值。