:变量名
类似
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之间。