您好,欢迎来到微智科技网。
搜索
您的当前位置:首页Oracle--异常处理

Oracle--异常处理

来源:微智科技网
Oracle--异常处理

Oracle 的异常分类:1. 预编译异常:

    Oracle 可以直接捕获异常, 并且给这个异常取了异常

/*

异常名

NO_DATA_FOUND 语句⽆返回数据 V

TOO_MANY_ROWS 在执⾏select into 语句时返回多⾏时出现 VLOGIN_DENIED 使⽤⽆效的⽤户名和⼝令登录Oracle

INVALID_NUMBER 试图将⼀个⾮有效的字符串转换成数字

DUP_VAL_ON_INDEX 重复的值存储在使⽤唯⼀索引的列中( 违反主键约束,唯⼀约束抛的异常)ACCESS_INTO_NULL 试图给⼀个没有初始化的对象赋值ZERO_DIVIDE 除以0

VALUE_ERROR 算术或转换错误

TIMEOUT_ON_RESOURCE 在等待资源时发⽣超时*/

例:

--预编译的异常, oracle捕获到这个异常, 编码的时候,只需要进⾏异常处理declare

v_empno emp.empno%type :='&请输⼊员⼯编号'; v_name emp.ename%type;

begin

select ename into v_name from emp where empno = v_empno; dbms_output.put_line(v_name); exception --异常处理 -- when 异常名 then -- 处理异常的代码

when NO_DATA_FOUND then

dbms_output.put_line('查⽆此⼈!!'); when TOO_MANY_ROWS then

dbms_output.put_line('数据台多'); when others then

dbms_output.put_line('未知错误'); end;

2.⾮预定义异常:

    Oracle 会捕获这个异常(这个异常有⼀个异常错误代码), 但是Oracle 没有这个异常取名

--SQL 错误: ORA-02291: 违反完整约束条件

-- Oracle 异常: 错误代码: -2291 异常名, 异常信息--处理⽅案:

-- 给这个异常绑定⼀个名字(异常变量名) -- 步骤: 变量名 数据类型

-- 1. 声明⼀个异常类型的变量 异常变量名 exception;

-- 2. 把异常错误代码与异常变量名绑定在⼀起, Oracle 抛出异常代码:-2291, 找到⾃定义的异常变量名-- 给指定错误代码的异常取⼀个名字 PRAGMA EXCEPTION_INIT(⾃定义异常名,异常代码);-- 3. 在exception中,when 异常变量名 then 处理异常

例:

declare

--1.声明⼀个异常类型的变量 FK_EXCEPTION exception; --2.把异常变量绑定⼀个错误代码

PRAGMA EXCEPTION_INIT(FK_EXCEPTION,-2291);begin

insert into emp_back3 values(1002,'JACK','SALESMAN','7902','1990-01-01',1500,300,50); --3处理异常 exception

when FK_EXCEPTION then

dbms_output.put_line('添加失败,没有该部门!!'); when others then

dbms_output.put_line('未知错误');end;

3.⾃定义异常:

    Oracle不会捕获这个异常(把这个当成⼀个错误, 逻辑错误), 也没有异常名

-- ⼈为的创建⼀个异常, 根据需求来/*

1.申明⼀个异常, 异常名 exception;

2.在指定的地⽅抛出这个异常 RAISE 异常名; ⼈为的抛出这个异常,类似 throw 异常对象; 3.捕获这个异常,然后进⾏处理 在exception中,when 异常变量名 then 处理异常*/

例:

--⾃定义⼀个 奖⾦为null的异常declare

--1. 声明⼀个异常

my_exception exception; v_comm emp.comm%type;

v_empno emp.empno%type := '&请输⼊员⼯编号';begin

select comm into v_comm from emp where empno = v_empno; if v_comm is null then --2.抛出异常

RAISE my_exception; --抛出异常 else

dbms_output.put_line('哥们你的奖⾦:'||v_comm); end if;

--3.处理异常 exception

when my_exception then

dbms_output.put_line('奖⾦为空,赶快去找⽼板要!!');end;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务