oracle异常处理

:变量名
类似
Pst 中 sql 的  ?

分支
java
 if(..){
 }else if(..){
 }else{

 }

oracle:

if(..)then
--begin

end if

case
...
end case;

loop
...
end loop;


if ... then
  ...
elsif .. then
..
else  --好的编程习惯一定要有else
..
end if;

如何解决if层次过多?

java:
int i=..;
switch(i) {
   case 1: ...break;
   case 2:... break;
   default:...
}

判断多个值相等时
case 变量
   when 1then  ...
   when 2 then ...
   else ...
end case;

判断多个值不相等时
case
   when (a>10) then  ...
   when (a<10 or b>10) then ...
   else   ...                                                                                                                                                    
end case;

case表达式
declare
  age number;
begin
   age := (case ....end);
end;

用在select中的case!


任务:建立stu表,统计<18,>=18 and <=25,>25各有多少人数。


技巧 null语句用于占位
如写存储过程的结构
create or replace procedure sp_xx
begin
   null;
end;


循环 先执行后判断
loop
  任何退出条件;
end loop;

相当于 java 的 do while

先判断后执行
while 退出条件
loop
  
end loop;
相当于java的while循环


数星星循环
for i in 小..大
loop

end loop;
相当于java的for循环


自定义异常,主要用于中断业务流程处理。

 

捕获异常对象
1、将已知异常编号(不同的异常有不同的编号)与一个变量关联,这个变量 的类型是 Exception。 (因为不能直接使用这个编号)

深刻理解 “数据没有找到”!

1种:select 字段 into 变量 where 条件;
当返回0行时,Oracle没有找到数据。
此时要报异常。
2种:update/delete ... where 条件;
当返回0行时,Oracle没有找数据。
此时“不会”报异常。

只要一条语句Oracle没有报异常,则会将执行这条sql语句的信息放到一个特殊的对象中,这个对象叫SQL,又叫隐式游标对象。
相关语句:insert,delete,update

所以如果想知道增删改语句执行以后的状态(如要知道影响了多少行),在PL/SQL中就用SQL对象!

JAVA:执行增删改
int i = pst.executeUpdate();
i 返回影响的行数
如果执行的DDL,则固定返回 0


异常小结
1、有些sql执行要报异常,抛出一个异常对象
2、异常对象有两个属性:编号=sqlcode 描述=sqlerrm
3、要捕捉一个异常对象,就要定义一个异常变量,与该异常的编号进行绑定
4、要抛出一个异常 raise_application_error(编号,描述)
5、如果要知道增删改sql返回了多少行,就要用到SQL这个隐式游标对象。

三种异常的区别
1、如果一个异常对象,Oracle已经预定义一个名称:预定义异常
2、如果一个异常对象,要由程序员来定义,叫 “非预定义异常”
   共同点:都是Oracle系统报的异常

3、用raise_application_error抛出的异常,叫“自定义异常”,不过编号要在-20001到-20999之间。

 

 

你可能感兴趣的:(数据结构,oracle,sql,编程)