Oracle数据库系统应用开发实用教程教学课件作者第2版朱亚兴文本文本ch8实验报告课件.doc
广东科学技术职业学院
计算机工程技术学院(软件学院)
实 验 报 告
专业 班级 成绩评定______
学号 姓名 (合作者____号____) 教师签名
实验 题目 存储过程、函数、程序包和触发器 第 周 星期 第 节
实验目的与要求
1.掌握编写存储过程和调用过程的方法
2.掌握编写函数和调用函数的方法
3.掌握程序包的编写规范
4.掌握执行程序包中过程和函数的方法。
5.掌握语句级触发器的原理。
6.语句级触发器的编写方法。
7.测试语句级触发器是否生效。
8.掌握行级触发器的原理。
9.行级触发器的编写方法。
10.测试行级触发器是否生效。
11.掌握替代触发器的原理。
12.创建DDL触发器。
13.替代触发器的测试方法。
14.掌握DDL触发器的原理。
15.创建DDL触发器。
16.DDL触发器的测试方法。
17.掌握数据库级触发器的原理。
18.创建数据库级触发器。
19.数据库级触发器的测试方法。
实验环境及方案
Windows Server 2000 sp1或更高版本;或Windows Server 2003的所有版本;
或Windows XP专业版;
Oracle10g;
Internet 环境及浏览器。
实验步骤
实训8.1 存储过程
目的和要求
掌握编写存储过程和调用过程的方法
实训内容
指导:
编写一个存储过程,要求根据用户输入的员工号(employee_id)查询EMPLOYEES表,返回员工的姓名、工作职位和薪水(first_name, last_name, job_title,salary)。并编写一个匿名块调用此过程。 (使用HR用户的EMPLOYEES表、JOBS表,其中关联字段为EMPLOYEES. JOB_ID和JOBS. JOB_ID。以下同)
(1)编写存储过程
create or replace procedure pro_emp(emp_id number)
as
vfname varchar2(20);
vlname varchar2(20);
vjob varchar2(20);
nsal number;
begin
select e.first_name,e.last_name,j.Job_title,e.salary into vfname,vlname,vjob,nsal from employees e,jobs j where employee_id=emp_id and e.job_id=j.job_id ;
dbms_output.put_line ('雇员的姓名是:'||vfname||' '||vlname);
dbms_output.put_line ('雇员的职位是:'||vjob);
dbms_output.put_line ('雇员的薪水是:'||nsal);
exception
when no_data_found then
dbms_output.put_line ('雇员编号未找到!');
end pro_emp;
(2)调用执行存储过程
exec pro_emp(104);
执行结果为
雇员的姓名是:Bruce Ernst
雇员的职位是:Programmer
雇员的薪水是:6000
练习:
1.编写一个过程,要求根据用户输入的员工号(employee_id)查询EMPLOYEES表,返回员工的工作职位、工作年限、电话和Email。并编写一个匿名块调用此过程。
2.创建一个过程,用来实现九九乘法表。
实训8.2 函数
目的和要求
掌握编写函数和调用函数的方法
实训内容
指导:
编写函数以部门号为参数,并计算该部门的平均工资。
(1)编写函数
create or replace function fun_avgsal(dept_id number)
return float
as
sal_avg float(10);
begin
select avg(salary) into sal_avg from employees where department_id =dept_id;
return sal_avg;
EXCEPTION
when NO_DATA_FOUND then
DBMS_OUTPUT.PUT_LINE('部