创建表的时候 列名是ParentID 列类型是varchar2(64)
然后我在toad里面执行一个insert语句 该列插入的是空字符串('')
然后用select查找,当使用ParentID=''的时候,一条也查不出来
使用ParentID is null 的时候,所有记录都出来了
也就是说执行insert语句之后,ParentID字段里面存的并不是空字符串('')
而是null, 请问原因是什么?
我理想的结果是保存个空字符串(''),又该怎么处理?

解决方案 »

  1.   

    zt
     3、 空 值 和 算 术、 字 符 操 作 符 
    ---- (1) 算 术 操 作 符: 空 值 不 等 价 于0, 任 何 含 有 空 值 的 算 术 表 达 式 其 运 算 结 果 都 为 空 值, 例 如 空 值 加10 为 空 值。 
    ---- (2) 字 符 操 作 符||: 因 为ORACLE 目 前 处 理 零 个 字 符 值 的 方 法 与 处 理 空 值 的 方 法 相 同( 日 后 的 版 本 中 不 一 定 仍 然 如 此), 所 以 对 于||, 空 值 等 价 于 零 个 字 符 值。 例: 
    SQL >select ename,mgr,ename||mgr,sal,comm,sal+comm from emp;
    ENAME            MGR ENAME||MGR          SAL      COMM  SAL+COMM
    ---------- --------- ------------- --------- --------- ---------
    SMITH           7902 SMITH7902           800 
    ALLEN           7698 ALLEN7698          1600       300      1900
    WARD            7698 WARD7698           1250       500      1750
    JONES           7839 JONES7839          2975 
    MARTIN          7698 MARTIN7698         1250      1400      2650
    BLAKE           7839 BLAKE7839          2850 
    CLARK           7839 CLARK7839          2450 
    SCOTT           7566 SCOTT7566          3000 
    KING                 KING               5000 
    TURNER          7698 TURNER7698         1500         0      1500
    ADAMS           7788 ADAMS7788          1100 
    JAMES           7698 JAMES7698           950 
    FORD            7566 FORD7566           3000 
    MILLER          7782 MILLER7782         1300 
    ---- 我 们 可 以 看 到, 凡mgr 为 空 值 的,ename||mgr 结 果 等 于ename; 凡 是comm 为 空 值 的 行,sal+comm 均 为 空 值。 
      

  2.   

    因为传入的参数有可能是个字符串或者是个''值
    譬如ParentID='ABCD' 如果是个null值 就必须写成 ParentID is null
    总不能在where的每个条件都判断一下传入参数是不是null吧
      

  3.   

    在oracle中''既是空,字符串连接时空既是''
      

  4.   

    因为传入的参数有可能是个字符串或者是个''值
    譬如ParentID='ABCD' 如果是个null值 就必须写成 ParentID is null
    总不能在where的每个条件都判断一下传入参数是不是null吧
    --
    那也没办法啊,只能判断是否为null
    要么加默认值好了
      

  5.   

    试:
    SELECT v, nvl(v,'NULL'), length(v), 'abc'||v
    from(select '' v from dual)a
      

  6.   

    可以使用default值,可以一次性update
      

  7.   

    ORACLE这个就是不标准,其实''字符串不等于null;   null不等于任何值.
      

  8.   

    如果不指定,oracle在没有数据插入的时候,默认把内容做为null来处理
    注意好,是null,而不是''
      

  9.   

    当你执行insert的时候,如果values(''),在oracle中相当于没有对该字段插入值,系统默认用当然是null;
    如果你不想在查询中使用 ParentID is null,在insert的时候,应该values(' ')!
      

  10.   

    >ORACLE这个就是不标准,其实''字符串不等于null;   null不等于任何值
    觉得不是标不标准的问题,从存储上来讲:首先,在程序设计语言中,所谓的空串即空字符串载比如说C/C++这一系列的语言中实际上会保存成一个字符串结束符,但是在Oracle里面,不会把你的空串保存成一个字符串结束符。从模式上来讲才会有所谓的''不等以NULL还是''等于NULL的问题。