异常的异常处理

sxccya 2008-10-29 03:32:17
1 DECLARE
2 invalidsno EXCEPTION;
3 sid VARCHAR2(10);
4 pname VARCHAR2(10);
5 BEGIN
6 sid:='&sss'; --这里如果直接写'07001'则通过
7 IF sid NOT IN ('07001','07002','07003') THEN
8 RAISE invalidsno;
9 ELSE
10 select sname into pname from student
11 where sno=sid;
12 DBMS_OUTPUT.PUT_LINE(sid||'的姓名是'|| pname);
13 END IF;
14 EXCEPTION
15 WHEN invalidsno THEN
16 DBMS_OUTPUT.PUT_LINE('无法识别该学生');
17 end;

输入 sss 的值: 07002
原值 7: sid:='&sss';
新值 7: sid:='07002';
DECLARE
*
第 1 行出现错误:
ORA-01403: 未找到数据
ORA-06512: 在 line 11

????怎会这样?11行有错吗,
...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxccya 2008-10-29
  • 打赏
  • 举报
回复
找到问题了,原来是数据类型不匹配
codearts 2008-10-29
  • 打赏
  • 举报
回复
1 DECLARE
2 invalidsno EXCEPTION;
3 sid VARCHAR2(10);
4 pname VARCHAR2(10);
5 BEGIN
6 sid:='&sss'; --这里如果直接写'07001'则通过
7 IF sid NOT IN ('07001','07002','07003') THEN
8 RAISE invalidsno;
9 ELSE
10 select sname into pname from student
11 where sno=sid;
12 DBMS_OUTPUT.PUT_LINE(sid||'的姓名是'|| pname);
13 END IF;
14 EXCEPTION
15 WHEN invalidsno THEN
16 DBMS_OUTPUT.PUT_LINE('无法识别该学生');
--加上下面的2句,你就知道了
WHEN no_data_found then
dbms_output.put_line('没找到你输入的sid');
17 end;
sxccya 2008-10-29
  • 打赏
  • 举报
回复
07001、07002在表中都有对应数据,关键是sid的问题
codearts 2008-10-29
  • 打赏
  • 举报
回复
你输入'07001'就能找到数据了
codearts 2008-10-29
  • 打赏
  • 举报
回复
set define off

11 where sno=sid;

你输入的07002 在student 表里没有这条数据,oracle会抛出一个NO_DATA_FOUND的异常的,所以。。。
codearts 2008-10-29
  • 打赏
  • 举报
回复
你这是在sqlplu里执行,&在sqlplus里是个转换符号。

有个开关可以设置的,我去找找
sxccya 2008-10-29
  • 打赏
  • 举报
回复

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧