异常处理
--异常处理分为预定义异常处理,非预定义异常处理,和自定义异常处理。
<1>.预定义异常处理
常见的Oracle已预定好的异常有:
异常名称 ORACLE错误 说明
CURSOR_ALREADY_OPEN ORA-6511 试图打开一个已打开的光标
DUP_VAL_ON_INDEX ORA-0001 试图破坏一个唯一性限制
INVALID_CURSOR ORA-1001 试图使用一个无效的光标
INVALID_NUMBER ORA-1722 试图对非数字值进行数字操作
LOGIN_DENIED ORA-1017 无效的用户名或者口令
NO_DATA_FOUND ORA-1403 查询未找到数据
NOT_LOGGED_ON ORA-1012 还未连接就试图数据库操作
PROGRAM_ERROR ORA-6501 内部错误
ROWTYPE_MISMATCH ORA-6504 主变量和光标的类型不兼容
STORAGE_ERROR ORA-6500 内部错误
TIMEOUT_ON_RESOURCE ORA-0051 发生超时
TOO_MANY_ROWS ORA-1422 SELECT INTD命令返回的多行
TRANSACTION_BACKED_OUT ORA-006 由于死锁提交被退回
VALUE_ERROR ORA-6502 转换或者裁剪错误
ZERO_DIVIDE ORA-1476 试图被零除
--eg:
declare
va number;
begin
va:=6;
dbms_output.put_line(va/0);
exception
when zero_divide then --zero_divide 是oracle内已经定义好的异常 可直接用.
dbms_output.put_line('被零整除了!');
end;
<2>.非预定义的异常处理
alter table emp modify --修改表emp使其empno不能为空
(empno not null);
declare
e_nullin exception; --自定义一个异常变量
pragma exception_init(e_nullin ,-01400);--将异常变量与标准oracle联系起来
begin
insert into emp values(null,'huam','kasdk',null,null,3000,600,10);
exception
when e_nullin then --利用异常 变量对其进行异常处理
dbms_output.put_line('你插入的empno值不能为空!');
end;
***预定义异常处理与非预定义异常处理的主要不同点在于 预定义异常中oracle既定义了错误信息
又定义了错误名称,而预定义异常处理中oracle只定义了错误信息,而没有定义错误名称,在使用
中还须要我们自已定义错误名称后再与错误信息相连之后才能使用。
<3>.自定义的异常处理
drop table emp--删除以前使用后的emp
create table emp as select * from SCOTT.emp --拷emp表
alter table emp
add constraint emp_ck check(sal>500 and sal <10000); --修改emp表使其sal在500--10000之间
declare
e_myexecption exception;--定义一个异常 变量
pragma exception_init(e_myexecption,-8888);--与自已定义的错误信息连接起来(这里的错误信息是oracal内不存在的)
aa number:=&sal;--从键盘接收数据
begin
if aa>10000 or aa<500 then
raise e_myexecption;--自定义异常必须要显示的抛出异常
else
update emp set sal=aa where empno =7788;
end if;
exception --当输入的不在500-10000之间时会异常处理
when e_myexecption then
dbms_output.put_line('你输入的工资超出500-10000之间!');
end;
<4>异常函数
当oracle出现异常时我们可以通过sqlcode来取的oracle的错误号,
利用sqlerrm可以取的错误文本信息 这两个函数在任何异常中都可
以用,但一般都用在others句子,others子句是异常处理的最后一
个重要环节。
--如在上题中当用户输入的不是number类型时若无others句子则要出现异常.修改如下
declare
va emp.ename%type;
begin
select ename into va from emp where sal = &aa;
dbms_output.put_line('雇员名' || va);
exception
when no_data_found then
dbms_output.put_line('没有找到数据');
when others then
dbms_output.put_line('sqlcode:' || sqlcode || ' sqlerrm' || sqlerrm);
end;
分享到:
相关推荐
Oracle学习笔记——day01 学习的好东西Oracle学习笔记——day01
Oracle学习笔记——day02 学习的好东西 Oracle学习笔记——day02
Oracle学习笔记——day04 学习的好东西 Oracle学习笔记——day04
Oracle学习笔记——day03 学习的好东西 Oracle学习笔记——day03
Oracle学习笔记——day05 学习的好东西 Oracle学习笔记——day05
Oracle SOA 套件——Oracle BPEL 流程管理器Oracle SOA 套件——Oracle BPEL 流程管理器
Oracle工作总结——日志文件切换频率的调整 Oracle工作总结——日志文件切换频率的调整
Oracle数据库教程——nbu恢复oracle数据库案例
Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛应用。本书设计了大量的应用情景,介绍了数据库管理员和开发人员常用的管理、维护和优化Oracle 11g数据库的技术和...
Oracle应用项目——使用OracleEM创建表空间.pdf 学习资料 复习资料 教学资源
Oracle9.0入门——基础篇 Oracle9.0入门——安装篇 Oracle9.0入门——数据库服务器管理篇 Oracle9.0入门——SQL篇 Oracle9.0入门——集成环境管理篇 Oracle9.0入门——DBA日常维护篇 Oracle9.0入门——常用数据方案...
该资源是关于Oracle数据库的入门知识,内容不是很深入,非常适合初学者阅读,我自己也是初学者,我觉得还不错,希望能帮倒需要的朋友!
Oracle数据库技术——动态SQL。详细资料~
《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地...对于初学者,《Oracle11g从入门到精通》是一本很好的入门教程,对Oracle管理员和应用程序开发员,也有很好的学习和参考价值。
Oracle数据库教程——oracle常见的等待事件说明[参照].pdf
Oracle 数据库系统——基础与工具.pdf
oracle 数据库系统——管理与应用
Oracle缓存连接——Timesten体系结构 .docx 内存数据库技术
Oracle10g——for AIX 安装指南.pdf