我有变量里面的存储过程有一个行为我不理解,一个循环内的变量保留以前的循环值!!
下面是存储过程
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 !!,作为一种工作,我在while
语句之后直接在每个循环的第一个中将两个变量设置为null,但是为什么变量:v_axis
和:v_dim_val
在v_counter = 2时没有分配给null,为什么它们保留以前的循环值??
我怀疑你实际上在tdetail
中没有pos = 2
的记录,对吗?因此,选择查询的结果是空结果集,而不是所有字段都是NULL
的行。由于结果集中没有行,因此没有什么可以分配给变量(:v_axis
, :v_dim_val
),因此它们保留其值。