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;
/
一个学习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 记录(Record)学习笔记(一)
- 【数据库学习笔记】Oracle_02_序列,分页,常用函数,jdbc,PL/SQL
- Oracle PL/SQL 学习笔记(三)
- Oracle PL/SQL 学习笔记 (2)
- ORACLE PL/SQL 触发器(trigger)学习笔记
- Oracle PL/SQL语句基础学习笔记(上)
- 学习笔记-oracle-PL/SQL-动态游标
- Oracle 学习笔记 16 -- 游标(PL/SQL)
- ORACLE PL/SQL 记录(Record)学习笔记(二)
- Oracle PL/SQL 学习笔记(1)
- Oracle基础学习笔记(五) (PL/SQL)
- Oracle 学习笔记 15 -- PL/SQL基本语法、流程控制
- ORACLE PL/SQL 对象(object)学习笔记(二)
- ORACLE PL/SQL 集合学习笔记(一)
- Oracle PL/SQL 学习笔记(四)
- Oracle PL/SQL 学习笔记(二)
- 【数据库学习笔记】Oracle_03_PL/SQL深入:游标编程,自定义异常
- ORACLE PL/SQL 对象(object)学习笔记(三)
- ORACLE PL/SQL 集合学习笔记(二)
- Oracle PL/SQL语句基础学习笔记(下)