变量在循环中保留先前赋值的值



我有变量里面的存储过程有一个行为我不理解,一个循环内的变量保留以前的循环值!!

下面是存储过程

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),因此它们保留其值。

相关内容

  • 没有找到相关文章

最新更新