Rol*_*and 8 oracle varchar plsql varchar2
Oracle数据库当前将长度为零的字符值视为null.但是,在将来的版本中,这可能不会继续存在,Oracle建议您不要将空字符串视为与空值相同.
考虑一个getVersion返回varchar2 的函数,该函数可能是'':
l_version := x.getVersion;
if l_version is null then
return 'V.1.0';
end if;
Run Code Online (Sandbox Code Playgroud)
这将在当前的Oracle 11g上正常工作,但是一旦未来的Oracle版本处理''不同,它可能会中断null.
我认为做上述未来证明的唯一方法是:
if l_version is null or l_version = '' then
有一种不那么繁琐的方式吗?
假设您在varchar2整个代码中使用,l_version is null将来会证明.
varchar2当ANSI标准声明varchar应该将NULL和空字符串视为单独的实体时,Oracle创建了数据类型.目的是varchar2数据类型的行为将继续保持一致,而varchar将来可以使用新的标准NULL比较语义.当然,今天varchar并且varchar2是彼此的同义词,并且它们已经存在了至少几十年,因此Oracle实际上varchar在未来改变数据类型行为的可能性非常低.
当您查看和数据类型的文档时VARCHAR2VARCHAR,它会讨论VARCHAR将来可能发生变化的比较语义.不幸的是,他们所讨论的比较语义并不明确是NULL和空字符串之间的等价(或缺乏).但由于VARCHAR是ANSI标准数据类型,并且VARCHAROracle和ANSI标准之间的比较语义的唯一区别在于空字符串是否为NULL,这是普遍接受的解释.
不要使用VARCHAR数据类型.请改用VARCHAR2数据类型.尽管VARCHAR数据类型当前与VARCHAR2同义,但VARCHAR数据类型计划重新定义为与不同比较语义相比用于可变长度字符串的单独数据类型.
如果行为确实发生了变化,那么当这种事情可能发生时,您是否不希望能够区分空字符串和 null?换句话说,将空字符串和空值视为相同的未来证明代码可能需要在将来重新访问。
此外,目前全球 Oracle 数据库中存储的大约 1000 亿个空字符串将继续为空。
所以我的建议是忘记它,只使用 IS NULL。