Orale数据库实验PLSQL游标过程函数包使用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库基础

实验5 PL/SQL游标、过程、函数、包的使用

【实验学时】

2学时

【实验目的】

1.了解PL/SQL语言中显式游标和隐式游标的概念和属性。

2.了解显式游标和隐式游标的差异。

3.掌握PL/SQL中cursor for循环的使用方法。

4.学会在PL/SQL程序中使用游标来解决实际问题。

5.学会在PL/SQL程序中进行异常处理的方法。

6.练习在PL/SQL中自定义异常。

7.理解过程和函数的作用。

8.学会编写过程、函数、包,并加以调用。

【实验内容】

1.用显式游标编写程序,程序的功能是:计算每一个部门的平均工

资。注意异常的处理(例如,分母为0的异常)。

已写入文件afiedt.buf

1 declare

2 cursor c_dept is select * from dept order by deptno;

3 cursor c_emp(p_dept emp.deptno%type)is select

ename,sal from emp where deptno=p_dept

4 order by ename;

5 r_dept dept%rowtype;

6 v_ename emp.ename%type;

7 v_salary emp.sal%type;

8 v_tot_salary emp.sal%type;

9 begin

10 open c_dept;

11 loop

12 fetch c_dept into r_dept;

13 exit when c_dept%notfound;

14

dbms_output.put_line('department:'||r_dept.deptno||'-'||r_de

pt.dname);

15 v_tot_salary:=0;

16 open c_emp(r_dept.deptno);

17 loop

18 fetch c_emp into v_ename,v_salary;

19 exit when c_emp%notfound;

20

dbms_output.put_line('name:'||v_ename||'salary:'||v_salary);

21 v_tot_salary:=v_tot_salary+v_salary;

22 end loop;

23 close c_emp;

24 dbms_output.put_line('total salary for

dept:'||v_tot_salary);

25 end loop;

26 close c_dept;

27* end;

SQL> /

PL/SQL 过程已成功完成。

2.用cursor for编写上题的程序。

1 declare

2 cursor c_dept is select deptno,dname from dept order

by deptno;

3 cursor c_emp(p_dept emp.deptno%type)is

4 select ename,sal

5 from emp

6 where deptno=p_dept

7 order by ename;

8 v_tot_salary emp.sal%type;

9 begin

10 for r_dept in c_dept loop

11

dbms_output.putline('department:'||r_dept.deptno||'-'||r_dept.e name);

12 v_tot_salary:=0;

13 for r_emp in c_emp(r_dept.deptno)loop

14

dbms_output.put_line('name:'||r_emp.ename||'salary:'||r_emp.sa l);

15 v_tot_salary:=v_tot_salary+r_emp.sal;

16 end loop;

17 dbms_output.put_line('total salary for

dept:'||v_tot_salary);

18 end loop;

19* end;

QL> /

dbms_output.putline('department:'||r_dept.deptno||'-'||r_dept.e

name);

3.创建两个表格,myemp和mybonus表,分别与员工emp表和津

贴bonus表的结构及数据相同。要求用游标完成操作:取出

myemp表中工资大于1000元的记录,将其工资的30%作为奖金插入到mybonus表中。

create or replace procedure insertjintie() is

CURSOR emp IS SELECT 工号,姓名,工资FROM 职工表

where 工资>1000;

begin

for v_emp in emp loop

insert into 津贴表(工号,工资) values(v_emp.工号,v_emp.工资*0.3);

end loop;

commit;

exception when others then

rollback;

dbms_output.put_line(sqlerrm);

end insertjintie;

4.定义一个存储过程,使用游标方式,根据员工编号参数,查询并打印

该员工的下属的姓名,职位,工资等信息。

相关文档
最新文档