实验7 过程和函数

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

《数据库开发技术》课程之实验七

PL/SQL过程和函数

1、实验目的

1.掌握正确使用异常处理的方法。

2.掌握局部(本地)过程和存储过程的正确使用方法。

3.掌握局部(本地)函数和存储函数的正确使用方法。

2、实验内容和要求

1. 创建一个显示EMP表中雇员总人数的存储过程。然后在程序块

中和SQL*Plus环境中调用该存储过程。

执行结果:

雇员总人数为:17

2. 编写一个存储函数函数,用于判断DEPT表中某一编号的部门是

否存在,若存在此部门编号,则返回TRUE,否则返回FALSE。

3. 编写一过程,调用第2题的函数判断某一编号的部门是否存在,

存在则输出该部门员工的姓名、工作,否则提示不存在此部门

或此部门无员工。

4. 调用第2题的存储函数,查询并显示30号部门的人数。要求函数

体内有对不存在部门的异常处理,给用户的错误指示信息是:

该部门不存在!

5. 有一个权限控制的表中有三个字段,分别存放用户姓名、密码

和权限级别。创建一个用户登录存储函数,用户登录时核对用

户名和密码,正确则函数返回真,否则返回假。要求有适当的

异常处理,还要求进行适当的测试以验证函数的正确性。Create table login(uname varchar(12), pw varchar(12), right_lel varchar(12)); insert into login values('xiaoli','12345','DBA');

insert into login values('zhangsan','zzz','GUEST');

--登录函数测试

输入 user_name 的值: xiaoli

输入 password 的值: 12345

登录成功!

PL/SQL 过程已成功完成。

6. *阅读、理解并执行以下程序,并在注释处完成填空,指明当条

语句的作用或意义,一行不够写自行加一行注释。最后要求写

出你的上机执行结果,对此执行结果写出一句总结。

DECLARE

TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE; --

emp_tab EmpTabTyp := EmpTabTyp(NULL); --

t1 NUMBER(5);

t2 NUMBER(5);

t3 NUMBER(5);

PROCEDURE get_time (t OUT NUMBER) IS -- 过程头:创建过程,过程有一

个输出

--参数, 参数模式为,参数类型是

型。

/* 'SSSSS'日期/时间格式的含义为:距离午夜的秒数(0 ~ 86399)。*/

BEGIN --以下语句将赋给输出参数。

SELECT TO_CHAR(SYSDATE,'SSSSS') INTO t FROM dual;

END;

PROCEDURE do_nothing1 (tab IN OUT EmpTabTyp) IS --过程有一个

模式的参数tab,数

-- 据类型是,根据PL/SQL的默认方式,实参与形参间是按

传递的。

BEGIN

NULL; -- 过程do_nothing1是一个什么也不做的过程

END;

PROCEDURE do_nothing2 (tab IN OUT NOCOPY EmpTabTyp) IS --过

程有一个IN OUT模式的参

-- 数tab,实参与形参间由于有,所以是按传递的。

BEGIN NULL; END;

BEGIN

T * INTO emp_tab(1) FROM emp WHERE empno = 7788; -- 将雇员7788的信息存入

表元

-- 素1中

emp_tab.EXTEND(249999, 1); --

-- 。

get_time(t1);

do_nothing1(emp_tab); -- 将嵌套表emp_tab传递给过程do_nothing1

的IN OUT 形参

get_time(t2);

do_nothing2(emp_tab); -- 将嵌套表传递给过程do_nothing2的IN OUT NOCOPY形参

get_time(t3);

dbms_output.put_line('Call Duration (secs)');

dbms_output.put_line('--------------------');

dbms_output.put_line('Just IN OUT: ' || TO_CHAR(t2 - t1)); --显示出

执行用时(秒)。

dbms_output.put_line('With NOCOPY: ' || TO_CHAR(t3 - t2)); --显示出执行用时(秒)。

END;

/

Call Duration (secs) --250000条记录,即25万条记录

--------------------

Just IN OUT: 2

With NOCOPY: 0

PL/SQL 过程已成功完成。

Call Duration (secs) --2500000条记录,即250万条记录

--------------------

Just IN OUT: 381

With NOCOPY: 0

PL/SQL 过程已成功完成。

3、实验报告

记录实验过程中遇到的困难和解决问题的方法。

4、实验小结

分析本次实验主要综合运用了哪些知识点,你的运用情况如何等。

相关文档
最新文档