Oracle PL/SQL学习笔记

学习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;

    /

你可能感兴趣的:(Oracle PL/SQL学习笔记)