too_many_rows异常问题

[复制链接]
查看11 | 回复5 | 2014-7-12 06:00:13 | 显示全部楼层 |阅读模式
本帖最后由 rgshh1990 于 2018-4-24 12:48 编辑
今天同事测试一个存过,先不说逻辑对不对发现一个问题,我做了个简易的declare
v_vcsvccode inas.tneticket_cdma.vcsvccode%type := null;
begin
select a.vcsvccode
into v_vcsvccode
from inas.tneticket_cdma a
where a.vccustomer = '18971414162';
dbms_output.put_line('first get value:' || v_vcsvccode);
exception
when too_many_rows then
--是否取到第一个值
dbms_output.put_line('exception first get value:' || v_vcsvccode);
dbms_output.put_line('Too many rows are returned');
select a.vcsvccode
into v_vcsvccode
from inas.tneticket_cdma a
where a.vccustomer = '18971414162'
and a.vcsvccodev_vcsvccode;
dbms_output.put_line('secend get value:' || v_vcsvccode);
end;
输出如下
exception first get value:602303
Too many rows are returned
secend get value:602304

我发现这个进入了异常
正常的block里面select后面dbms没有出来但是下面的exception里面还是会带出里面的寻找到的第一个值,那么我试了10g和11g这个有人有研究过么

回复

使用道具 举报

千问 | 2014-7-12 06:00:13 | 显示全部楼层
嗯,第一个select出发了例外,进入例外处理,楼主的问题是什么呢?
回复

使用道具 举报

千问 | 2014-7-12 06:00:13 | 显示全部楼层
sqysl 发表于 2018-4-24 13:35
嗯,第一个select出发了例外,进入例外处理,楼主的问题是什么呢?

这个参数依旧被赋值了并且带入了exception当中,和我预想的不一样应该是直接判断出很多个值然后不赋值直接进入异常
回复

使用道具 举报

千问 | 2014-7-12 06:00:13 | 显示全部楼层
应该是运行select后才触发了例外的,从游标取值后发现没到游标尾端,于是触发了例外。
回复

使用道具 举报

千问 | 2014-7-12 06:00:13 | 显示全部楼层
sqysl 发表于 2018-4-24 15:18
应该是运行select后才触发了例外的,从游标取值后发现没到游标尾端,于是触发了例外。

居然没有一本书提过这个好坑啊,差点就做出逻辑问题了
回复

使用道具 举报

千问 | 2014-7-12 06:00:13 | 显示全部楼层
rgshh1990 发表于 2018-4-24 16:06
居然没有一本书提过这个好坑啊,差点就做出逻辑问题了

呵呵,确实,除非遇到,这个问题一般不容易被想到,多谢共享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行