Oracle Null系列(四)

空字符串’’与 null 的关系

空字符串 ‘’ 等价于 null,不过有些人喜欢钻牛角尖,所以我改一下说法,空字符串 ’’ 是 null 的字符类型的表现格式。

证明空字符串就是 null 是很容易的:
在这里插入图片描述

上面三个 SQL 语句,任意一个都足以证明空字符串 ‘’ 就是 NULL。

有些人可能会说,既然 空字符串’’ 就是 NULL,为什么不能进行 is ‘’ 的判断呢 ?

    其实从上面的错误信息就可以看到答案。原因就是 is null 是 Oracle 的语法,在 Oracle 运行的时刻 ’’ 是 null,但是现在 Oracle 还没有运行这条 SQL,就由于语法不正确被 SQL 分析器挡住了。Oracle 的语法并不包含 is ’’ 的写法,所以,这一点并不能成为 ’’ 不是 NULL 的理由。

    那么为什么要说 ’’ 是 null 的字符表示形式呢:因为 ’’ 和 null 还确实不完全一样,对于 null 来说,它表示了各种数据类型的 null 值。而对于空字符串’’来说,虽然它也具有 null 的可以任意转化为其他任何数据类型的特点,但是无论是从形式上还是从本质上它都表现出了字符类型的特点。

create or replace package p_test_null is
  function f_return(para_in number) return varchar2;
  function f_return(para_in varchar2) return varchar2;
end;
/
--创建重载方法,系统自动判断参数类型调用方法
create or replace package body p_test_null is

  function f_return(para_in number) return varchar2 is
  begin
         return 'number';
  end; 
  
  function f_return(para_in varchar2) return varchar2 is
  begin
         return 'varchar2';
  end;
end;
/

结果如下:
在这里插入图片描述

利用重载的原理,字符类型输出 varchar2,而数值类型输出 number。输入为空字符串 ‘’ 时,输出为varchar2,从这一点上可以看出字符串 ‘’ 实际上已经具备了数据类型。所以我将 ’’ 表述为空字符串是 null 的字符类型表现形式。
根据 除了 is null、is not null 以外,对 null 的任何操作的结果还是null可得 null || ‘A’ 应该为 null。但实际结果为如下图:
在这里插入图片描述

认为空字符串 ‘’ 是字符形式的 NULL,那么 || 操作的结果就不难理解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ts16dmy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值