Oracle:例外exception

什么是例外呢?是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。

Java中的例外:

Try{

}catch(exception1 e1){

}catch(exception2 e2){

}finally{}

Java的exception处理是向上处理机制,页脚父类处理机制。下面的那一行调用上面的那一行。比如在这个方法中没有处理这个异常,那么就向上抛,上面的方法也没有处理,就在下面一行打印exception信息,再抛,直到抛给JVM为止。

 

PL/SQLexception

与Java的区别就是没有finally。

分为系统定义的例外和用户自定义例外。

系统定义的例外有:

No_data_found(没有找到数据)

Too_many_rows(select … into 语句匹配多个行)

Zero_divide(被0除)

Value_error(算术或转换错误)

Timeout_on_resource(在等待资源发生时超时)

 

分布式数据库:

物理上不在一起,逻辑上在一起的数据库。

两个数据库之间通过数据库链路访问,可以使网线。

一个数据库向另一个数据库发送请求,请求超时,就抛出Timeout_on_resource。

 

--被0除的例外

Set serveroutput on

Declare

         Pnumnumber;

Begin

         Pnum:= 1/0;

Exception

         --when表示,当是这个例外的时候,这样处理,

         WhenZero_Divide then dbms_output.put_line(‘0不能做被除数’);

         WhenValue_error then dbms_output.put_line(‘算术转换错误’);

         --要抓住所有的例外,否则会抛给数据库,使用when others

         Whenothers then dbms_output.put_line(‘其他例外’);

End;

/

 

自定义例外:

定义变量时:No_data exception。当成变量定义。

--查询50号部门的员工姓名。没有找到员工的时候就抛出一个自定义例外。

Set serveroutput on

Declare

         --定义一个光标,代表50号部门的员工。

         Cursorcemp is select ename from emp where deptno=50;

         Penameemp.ename%type;

         --自定义例外

         No_emp_foundexception;

Begin

         Opencemp;

         --取一个员工,因为50号部门不存在,所以取不到

         Fetchcemp into pename;

         Ifcemp%notfound then

                   --抛出一个例外。

                   Raiseno_emp_found;

         Endif;

         --Oracle设定:如果在PL/SQL执行中,如果产生例外,自动关闭光标。

         Closecemp;

Exception

         Whenno_emp_found then dbms_output.put_line(‘没有找到员工’);

         Whenothers then dbms_output.put_line(‘其他例外’);

End;

/

这里有个问题,如果一个语句抛出例外,后面的语句将不执行。但是关闭光标的语句会自动执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值