您的位置:首页 > 数据库 > Oracle

Oracle PL/SQL学习笔记

2006-03-02 17:06 836 查看
学习oracle的笔记:
一个学习PL/SQL的实例:
应用:考察表emp中没一个员工的工资,如果工资高于4000,则征收工资20%的税;否则均征收200。将员工的员工号、姓名、税额、存在tax表中,同时,在该表中设一个message字段,对征税较高的进行特别说明。

SQL>declare 'declare是定义部分的开始.一个基本pl/sql块分declare(定义)、begin(可执行部分)、exeception(异常处理)三部分
record emp%rowtype; '定义一个名为record的变量,其类型同emp表的数据结构相同
v_tax number(4);
v_message char(100);
cusor emp_cursor is '定义一个名为emp_cursor的游标
select * from emp;
begin '开始可执行部分
open emp_cursor; '打开游标
<<repeat>> '插入一个标签,名称为repeat,可在goto语句中使用;尽量避免使用goto和标签实现跳转
fetch emp_cursor into record; '使用游标提取数据到record
declare
over_sal exception; '定义一个名为over_sal的用户自定义异常
begin
if record.sal>4000 then
raise over_sal; '如果该员工的工资高于4000,抛出over_sal异常
else
v_tax:=200;
end if;
v_message:='';
exception '开始异常处理部分
when over_sal then '截获到over_sal异常,进行如下处理
v_message:='His sal is too high!He should pay more tax!';
v_tax:=record.sal*0.2;
when others then '截获到非用户自定义异常,不进行处理
null;
end;
insert into tax(empno,ename,tax,message)
values(record.empno,record.ename,v_tax,v_message);
if emp_cursor%found then '如果游标fetch操作有结果返回,则跳转至repeat标签,循环操作。可在for循环中使用该游标,如下所示:
goto repeat; 'FOR 变量名 IN 游标名 LOOP ... END LOOP;
else '如果游标的fetch操作没有返回结果,则关闭游标
close emp_cursor; '游标属性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT
end if; '游标属性只能在PL/SQL中使用,不能在sql命令中使用
end;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: