gpt4 book ai didi

oracle - 检查varchar2是否为空的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 16:05:48 24 4
gpt4 key购买 nike

According to official 11g docs

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区别对待,则可能会中断。

我认为做上述 future 证明的唯一方法是:
if l_version is null or l_version = '' then
有没有那么麻烦的方法?

最佳答案

假设您在整个代码中都使用varchar2,则l_version is null将是 future 的证明。

当ANSI标准声明varchar2应该将NULL和空字符串视为单独的实体时,Oracle创建了varchar数据类型。目的是,将来varchar2数据类型的行为将保持一致,而将来varchar可以使用新的标准NULL比较语义。当然,今天varcharvarchar2是彼此的同义词,而且它们已经存在了至少二十年,因此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.

关于oracle - 检查varchar2是否为空的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com