当在PL_SQL中执行SELECT … INTO …语句时,如果返回结果集为空,则回触发NO_DATA_FOUND错误。但是当 SELECT 中有字段用到函数时...

当在PL_SQL中执行SELECT … INTO …语句时,如果返回结果集为空,则回触发NO_DATA_FOUND错误。但是当 SELECT 中有字段用到函数时,即使结果集为空,也不会触发NO_DATA_FOUND错误。
这里就涉及到有一条记录但是记录是空记录和没有一条记录的问题了。
首先弄清楚no data found异常是在找不到一条记录的时候报的异常,但是在找到一条空记录的时候是不会报这个异常的。
用集合函数之所以不会报错原因是:用集合函数的时候,当参数没有赋值时,函数会默认赋一个空值来进行计算,返回的结果也是一个空值(不是没有值)。
而to_char、substr这些函数就不会当参数没有赋值时默认赋空值,也就没有结果返回。
所以区别就是一个有记录返回,但是个空记录,而一个是没有记录返回。
其实你要看清楚空记录和没有记录的区别可以执行如下的程序看返回结果的差别就懂了。
OPEN OUTCURSOR FOR
select MAX(t.Time) from dept t where t.id>'10';
比较
OPEN OUTCURSOR FOR
select t.Time from dept t where t.id>'10';
再比较
OPEN OUTCURSOR FOR
select to_char(t.Time,'yyyy-mm-dd') from dept t where t.id>'10';
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值