select decode('x','x',null,d.col)
   from tab d
 union all
 select  sum(null) from dual其中tab.col字段是number型的。
但是如果换成下面就不报错:
 select decode('x','x',5,null,null,d.col)
   from tab d
 union all
 select  sum(null) from dual;
这个也不报错
 select null from dual
 union all
 select  sum(null) from dual
这个单独执行也不报错
 select decode('x','x',null,d.col)
   from tab d为什么?

解决方案 »

  1.   

    SQL> 
    SQL> select decode('x','x',null,d.sal)
      2    from emp d
      3  union all
      4  select sum(null) from dual;select decode('x','x',null,d.sal)
      from emp d
    union all
    select sum(null) from dualORA-01790: 表达式必须具有与对应表达式相同的数据类型SQL> 
    SQL> select decode('x','x',d.sal,NULL)
      2    from emp d
      3  union all
      4  select sum(null) from dual;DECODE('X','X',D.SAL,NULL)
    --------------------------
                           800
                          1600
                          1250
                          2975
                          1250
                          2850
                          2450
                          3000
                          5000
                          1500
                          1100
                           950
                          3000
                          130015 rows selectedSQL> select decode('x','x',null,d.col) 
      from tab d 返回的null,类型未知。
    select  sum(null) from dual 返回number,故无法union all
      

  2.   

    union all 要求链接的上下语句返回的类型必须一致,
    union all下面的语句select sum(null) from dual 返回类型为number型,
    而select decode('x','x',5,null,null,d.col) 返回的是null,没有类型,
    虽然select sum(null) from dual的值为null,但类型还是number型
    例如:
    select  sum(null) from dual 
    union all 
    select 1 from dual
    结果:
    1
    2 1
      

  3.   

    但关键是这个也不报错:这个同样也是未知型(null)与number型union all并呢
    select null from dual 
    union all 
    select  sum(null) from dual 
      

  4.   

    如果都是不定类型的话,是可以的,例如:
    select decode('x','x',null,d.account_number) 
      from accounts d 
    union all 
    --select  sum(null) from dual 
    --union all 
    select null from dual
      

  5.   


    select null from dual 返回null
    select decode('x','x',null,d.col)  不确定返回类型
      

  6.   

        我觉得问题是出在第一个查询返回了varchar类型或者是一个确定类型,而第二个子查询返回的是不确定的null,比如下面的查询就不会出错。
    --------------
    select decode('x','x',null,d.owner) 
      from dba_tables  d 
      where rownum <10
    union all 
    select  to_char(sum(null)) from dual 
    -------------------
      

  7.   

    楼主可以将decode('x','x',null,d.col)中“null”换为0
      

  8.   

    受6楼朋友的启发,我觉得应该是null默认为类型为char型,但sum默认为number型,大家可以看看这几个例子:
    1、这个不报错:
    select decode('x','x',null,d.col)
    from tab d
    union all
    select to_char(sum(null)) from dual
    2、但这个就报错了
    select decode('x','x',5,d.col)
    from tab d
    union all
    select to_char(sum(null)) from dual