null不能和任何东西比较,这是没有意义的,null和他们比较不会产生逻辑值!
如果你那个字段需要比较。就不要允许为null值。或者在查入数据的时候如果没输那个数据。自定义为0!

解决方案 »

  1.   

    A=1
    B=null
    IF A==B          //这样是错误的,你不要以为他会产生逻辑 “否” 
    你可以在之前做判断赋值后在做比较
    A=1
    B=nullIF (B==null) B=0
    IF A==B 这样就可以比较了。。我也是初学的,说的不对请指正!
      

  2.   

    当 v_col 为null时候,要用  where v_col is null  才行.null 是一个很特别的值.null + - * \ || ... (任何值) = nullnull值与本身的比较也是null, 如: null=null,null<>null... 都是 null,都不为 true(false)
      

  3.   

    可以这样写:where NVL(cola,'NULL') = NVL(v_col,'NULL')
      

  4.   

    请问牧师大侠:“null + - * \ || ... (任何值) = null”,那为何我的 cola||''=v_col||''返回true,我确信cola,和v_col都为null?
    再有:我发现java中的""传到oracle中成了null,(符合 is null 条件),而不是我预想的‘’。但是对与varchar2类型的数据来说,‘’与null肯定是不同的。所以,当我在jdbc调用存储过程时候,传给存储过程的varchar2类型的参数,比如我本例子中的v_col为java中的“”时,我都不知到到了存储过程中到底是''和null在比较(假设此时cola的值是null),还是null和null在比较。
    说明:我在jdbc中insert into table1(cola ....) values('"+""+"',....)之后,数据库中新插入的记录里,cola 符合is null条件,这个事实千真万确!
    诸多不明之处,请大侠么指教一二。因为编程时候一旦碰上这累问题,就会大费脑筋!
      

  5.   

    oracle会自动将''置为null值。只是这个比较奇怪:cola||''=v_col||''返回true,我确信cola,和v_col都为null
    楼主能否帖出下面这条SQL在sqlplus中的运行结果?select nvl(cola,'aaaa'),nvl(v_col,'bbbb') from tabName;
      

  6.   

    记住有null或''值比较时不要用关系运算符比较就可以了,用nvl()转换一下,或者用is null来判定,或者这样也可以:where decode(cola,v_col,0) = 0
      

  7.   

    (寻)兄弟,我式了select * from t1 Where ''='',或者select * from t1 Where null=null,确实不行。select * from t1 Where decode(res_size,'','null') ='null',其中res_size为number类型,但是在decode函数中,仍然可以将res_size与‘’比较,尽管不能用=号直接比较。这说明,在oracle中,‘’与null在很多场合是一样的,但就是不能用=号来比较。
    如果=号的两边至少有一个是‘’,或者null,这个等于比较就会返回false;
    大侠门,对么?
      

  8.   

    真是屡教不改,我说错了:如果=号的两边至少有一个是‘’,或者null,这个等于比较就会返回null
    ,对吗?
    这些细节问题挺折磨人的呢
      

  9.   

    牧师兄弟:
    Select Null||'x ' from dual
    Select ''||'x' From dual  这两个sql都返回‘x’,可能你机错了某些规则。请以你的经验继续指点
    我的这个问题。
    谢谢
      

  10.   

    那么在我的过程中,即使cola,和vcol都有可能为null,我用这个条件cola||' '=v_col||' '是能行的,可以不使用decode和nvl,注意是‘ ’,而不是‘’,我用的是空格,而不是‘’,"寻”看错我的语句了,sorry