Oracle Database currently treats a character value with a length of
zero as null. However,this may not continue to be true in future
releases,and Oracle recommends that you do not treat empty strings
the same as nulls.
考虑一个函数getVersion,它返回一个可能是”的varchar2:
l_version := x.getVersion; if l_version is null then return 'V.1.0'; end if;
这将在当前的Oracle 11g上正常运行,但是一旦未来的Oracle版本处理’与null不同,它可能会中断.
我认为做以上未来证明的唯一方法是:
如果l_version为null或l_version =”那么
有一种不那么繁琐的方式吗?
当ANSI标准声明varchar应该将NULL和空字符串视为单独的实体时,Oracle创建了varchar2数据类型.目的是varchar2数据类型的行为将继续保持一致,而未来的varchar可以使用新的标准NULL比较语义.当然,今天varchar和varchar2是彼此的同义词,并且它们已经存在了至少几十年,因此Oracle在未来实际改变varchar数据类型行为的几率非常低.
当您查看documentation for the VARCHAR2
and VARCHAR
data types时,它讨论了VARCHAR的比较语义,可能在将来发生变化.不幸的是,他们所讨论的比较语义并不明确是NULL和空字符串之间的等价(或缺乏).但由于VARCHAR是ANSI标准数据类型,因此Oracle与ANSI标准之间的VARCHAR比较语义的唯一区别在于空字符串是否为NULL,这是普遍接受的解释.
Do not use the VARCHAR datatype. Use the VARCHAR2 datatype instead. Although the VARCHAR datatype is currently synonymous with VARCHAR2,the VARCHAR datatype is scheduled to be redefined as a separate datatype used for variable-length character strings compared with different comparison semantics.