在oracle中''就是NULL.
为什么一定要插入''呢?这样很不好,就用NULL不可以吗?

解决方案 »

  1.   

    用NULL在许多地方都要特别考虑、特别处理,整个程序也许要有几百处,太麻烦了,而且容易出错。用空字符串,可以和普通字符串一样处理,不需要特别照顾。请各位高手提供一个插入空字符串的方法,谢谢!
      

  2.   

    to pos7445: 你这样插入的是一个空格,不是空字符串。空字符串是不包含任何字符的字符串,但是由于有确定的值,所以不是NULL。它可以和其他字符串一样参加运算,并且是任何非NULL字符串的子串。
      

  3.   

    Nulls"If a column in a row has no value, then the column is
     
      said to be null, or to contain a null. Nulls can appear in columns of any 
      datatype that are not restricted by NOTNULL or PRIMARY KEY integrity 
      constraints. Use a null when the actual value is not known or when a value 
      would not be meaningful.Do not use null to represent a value of zero, 
      because they are not equivalent. (Oracle currently treats a 
      character value with a length of zero as null. However, thismay not 
      continue to be true in future releases, and Oracle recommends that you do not 
      treat empty strings the same as nulls.) Any arithmetic expression
     
      containing anull always evaluates to null. For example, null added to 10 
      is null. In fact, all operators (except concatenation) return null when given 
      a null operand."
      

  4.   

    f.e.
    update student set student_name = 'null' where student_name is null
      

  5.   

    NULL怎么容易出错呢?
    NULL也可以运算,'abc'||NULL = 'abc'
    但是需要知道2*NULL=NULL
    可以用NVL(field,urvalue)如果是空,则指定别的值
    如select nvl(field,'') from table --如果是NULL,则转换为''
    在程序中,可以用ISNULL(rs("field"))这样的函数来处理(VB)。
      

  6.   

    Null 如果一条记录中的一个列没有值,那么这个列就为Null,或者说包含空值。Null可以在未指定NOTNULL或PRIMARY KEY的任何数据类型的列中出现。当实际的值未知或者没有意义时就使用NULL(来表示)。不要用NULL来表示零,因为他们并不相等。(Oracle目前将零长度的字符值当作NULL来处理,然而在将来发布的版本中可能并非如此,Oracle建议不要将空字符串当作NULL来等同处理)任何包含NULL的算术表达式的值都为NULL。实际上,任何运算(除了连接),如果包含了操作数NULL,都会返回NULL。to pos7445:你要告诉我什么呢?既然Oraclew建议不要将零长度字符值当作NULL来处理,那么我应该如何表示、如何插入呢?这正是我急切要知道的。请赐教!谢谢!
      

  7.   

    reference url: www.orafaq.com
      

  8.   

    www.orafaq.com一看都是一个好站点,值得收藏!
    我觉得讨论了这么多,要么你就把''当作NULL来处理,
    要么你就把''重新标记为别的标志。起码现在在oracle没有好的处理办法可以插入一个''有认成一个''
      

  9.   

    to penitent(只取一瓢) & pos7445:  小弟正在读orafaq呢,帖子真不错,讨论很切题也很激烈!
      

  10.   

    这样吧,我再等一等,万一哪位高人有解决办法呢?请各位别见怪!如果24小时还没有答案我立刻结帖!感谢各位帮我出主意!尤其感谢pos7445告诉我的url!
      

  11.   

    我觉得完全可以插入一个' '来标识,
    但判断是否为非空字符串的时候,需要用trim(str)先trim掉如果trim(str) is null,则此str当作''来处理,其它的按照字符串处理。
      

  12.   

    “空字符串”你是怎么理解的吗?在 c 程序中,声明一个字符串变量如 char szVar[10],此时能认为 szVar 是空的吗?还是 memset(szVar, 0, sizeof(szVar)) 后 szVar 中的值空呢?我认为 szVar[0] = '\0' 才能认为是空串,此时你使用 PROC*C 程序将 szVar 的值赋给 ORACLE 列或者PL/SQL程序时,ORACLE会当作 NULL 来处理的,因此,在 ORACLE 数据库中,空字符串既NULL,但NULL并非全是空串,明白?
      

  13.   

    to 大象:
      我的理解是这样的:假设有个字符串指针,若值为nil,则对应的字符串为Null,若指针指向一个合法的字符串,但第一个字符就是\0,则字符串为空字符串。或者类似于MS SQL Server 中的处理方法,紧邻的两个单引号表示空串。
      我感觉空串是有确定的值的,而Null是没有确定的值的。两个空串相等,两个Null却不相等。
      我之所以不愿意使用Null,是因为怕麻烦。Null和普通值不能等同处理,否则容易出错,所以每个地方都要单独判断空值,太麻烦了。
      

  14.   

    在oracle里面,''就是null,但是,出了oracle就不是了,
    所以,你可以用 penitent(只取一瓢) 提到的函数nvl,
    这样的话,在自己的程序里面是不用判断是不是空的!
    可以直接使用。
      

  15.   

    to 大象:
      获取到记录以后,可能要做运算,也可能要使用值;用户编辑后,可能要判断,也可能要插入数据库。在这些地方,Null和字符串的处理不同,如果都当作字符串处理就会出错。
      

  16.   

    比如一个非必填字段,虽然可能空着,但总是字符串,按字符串处理就行。
    如果用Null的话,就要特别照顾了。