美丽Oracle第五天 PLSQL编程、游标、异常
批处理:
一条或多条SQL语句
匿名块:
相当于批处理,成批执行数据
一、变量声明:
1、直接声明:
变量名 类型;
如:
i int;
注:一次仅能声明一个变量
2、列变量:与表中某一列的类型相同
变量名 表.列明%type;
如:
vname emp.ename%tyoe;
3、行变量:可存放表中一条记录
变量名 表%rowtype;
如:
e emp%rowtype;
引用行变量中某一列:
变量名.列名;
如:
e.name;
二、变量赋值:
1、直接赋值:
变量名:=表达式;
如:
i:=99;
vname:=’King’;
2、交互式赋值:
变量名:=’&变量名’;
变量名:=&变量名;
如:
i:=’&id’;
3、select语句赋值:将查询结果赋给变量
select * into 行变量 from 表where 条件;
或
select 字段1,……字段n into 变量1,……变量n from 表 where 条件;
注:
当查询结果只有一条记录,赋值成功;如果结果为0或多条记录赋值异常。
三、常见的异常:
1、no_data_found :没有找到数据异常
2、too_many_rows :返回多记录异常
3、others :其他异常
四、异常处理:
when 异常类型 then
执行体;
如:
when no_data_found then
dbms_output.put_line(‘没有此用户’);
五、流程控制:
1、if语句:
if 条件 then
……
end if;
2、if else 语句:
if 条件 then
……
else
……
end if;
3、else if 语句:
if 条件1 then
……
elsif 条件2 then
……
else
end if;
六、循环:
1、loop循环:
loop
……
exit when 条件;
……
end loop;
2、while循环:
while 条件
loop
……
end loop;
3、for循环:
for 变量 in 最小值..最大值
loop
……
end loop;
reverse 反向输出
4、case语句
1)单值:
case 表达式
when 条件1 then 值1
……
when 条件n then 值n
else
值0;
end;
2)多值:
case
when 条件1 then 值1
……
when 条件n then 值n
else
值0;
end;
七、游标:
是一个内存区域,可以通过指向记录的指针逐行访问记录。
使用:
1) 声明游标:
cursor 游标名 is select 语句;
2) 打开游标:
open 游标名;
3) 读取游标中的记录:
fetch 游标名 into 变量;
4) 关闭游标:
close 游标名;
游标的属性:
1、游标名%found 读取到数据为true,否则为false
2、游标名%notfound 读取到数据为false
3、游标名%rowcount 游标读取记录条数,游标打开后值为0,每读取一次加1
4、游标名%isopen 判断游标是否打开,true为打开
如:
loop中使用游标
declare
cursor mycur is select * from emp;
e emo%rowtype;
begin
open mycur;
loop
fetch mycur into e;
exit when mycur%notfound;
dbms_output.put_line(‘’);
end loop;
close mycur;
end;
5、带参数的游标:
cursor 游标名(参数) is select 语句;
打开:
open 游标名(参数);
八、自定义异常:
自定义异常名 exception;
如:
declare
--变量声明;
ex exception;
begin
……
raise ex; --用户抛出异常
exception
when ex then --捕获异常
……
end;
九、动态抛出异常:
raise_application_error(错误代码, ‘错误信息’);
错误代码的范围:-20000~-20999
捕获异常错误信息和错误代码的函数:
1、sqlerrm 错误的信息,返回字符型
2、sqlcode 错误代码,返回数值型