for t in (select F_DATACODE as code ,F_TOTALNUM
              from t_er_organsum
             where F_REPORTID = ReportID
             and F_DATACODE in ('101', '1011', '1012', '102', '1021', '103',
                    '1031', '1032', '1033', '1034', '1035')) loop
    if (t.F_TOTALNUM is not null and t.code is not NULL) then
      strSql   := strSql || ',F_NUM' || t.code; 
      strValue := strValue || ',' || t.f_totalnum;
    end if;
  end loop;
测试的时候发现code的值一直是NULL自己查找了结果发现F_DATACODE 都不为空,还有一个很奇怪的t.code is not NULL这个判断没效果,if里面的都会执行,换成t.code!=NULL就不判断效果。我还尝试过将t_er_organsum其他列值赋值给code有值不过测试的时候发现中文有乱码显现。他们都没说出为什么不可以,叫我换成游标。我很想确认下这样写是否可以。问题出在那里?很急,麻烦办法看看

解决方案 »

  1.   

    1  t.code is not null 是正确的写法,code != null 永远是false
    2 数据库说它是null,它才是null,数据库告诉你不是null,你觉得它是null,说明你自己的判断出了问题,描述问题时以数据库的结果为准,你的想法不要作为结论,只会误导帮你分析问题的人。
      

  2.   

    那我测试的时候看变量里code一直是NULL是不是说明读取到的code一直都是为NULL,我按照调试时候的条件查看有记录,那我是不是应该认为赋值到t的时候出错了?
      

  3.   

    1 用什么测试?怎么看见的变量值?在哪行看见的?进游标循环了吗?2 调试的条件?调试的条件里能直接写 F_REPORTID = ReportID 吗?  ReportID的值确定正确吗?用看见的ReportID的值去查询过吗?
      

  4.   

    测试是用plsql测试的
    点单步进入的执行到上面那段的时候时候下面有输入t.code是NULL 用当前的ReportID的变量值70b2d8a5-4bcb-4fbd-9cb7-36cbb8ecb4c4在新建个sql查询窗口查询结果看到的结果是有记录并且F_DATACODE都不为空。应该是这样调试的吧?我现在用游标变量去做就可以取到值。
      

  5.   


    t.code一般不会解析 ,
      换成显式调用 
         或者 
      再声明一个变量 t_code 把t.cdoe赋值给t_code 观察t_code 的值。