大型数据库技术实验72.docx
- 文档编号:2795762
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:16
- 大小:228.15KB
大型数据库技术实验72.docx
《大型数据库技术实验72.docx》由会员分享,可在线阅读,更多相关《大型数据库技术实验72.docx(16页珍藏版)》请在冰豆网上搜索。
大型数据库技术实验72
实验7
(2) 过程、函数和和程序包
姓名:
林丹萍
学号:
0910012115
专业:
信息与计算科学
班级:
09信计1班
同组人:
无
实验日期:
2012-5-2
【实验目的与要求】
⏹掌握过程的创建与调用
⏹掌握PL/SQL函数的编写与调用
⏹熟悉程序包的使用
【实验内容与步骤】
7.0.实验准备工作:
PL/SQL程序文件的编辑与执行
1.使用文档编辑器编辑以下文件,并保存为aa.sql:
1)建立一个表在scott用户下
Createtableerrors(error_textvarchar2(20))
2)建立一个aa.sql将其保存在oracle目录bin下面
declare
person_noemp.empno%type;
person_nameemp.ename%type;
begin
selectempno,enameintoperson_no,person_name
fromemp
whereempno>7788;
exception
whenno_data_foundthen
insertintoerrorsvalues('nodatafound');
whentoo_many_rowsthen
insertintoerrorsvalues('toomanyrows');
end;
3)select*fromerrors;
2.以scott身份登录,在SQLPlus中执行@aa命令运行程序:
给出运行结果:
7.1.存储过程
1.最简单的存储过程编写与执行
(1)创建测试表
droptableExam_Table;
createtableExam_Table(
e_idnumber(5),
e_namevarchar2(20),
e_salarynumber(8,2)
);
(2)创建存储过程
createorreplaceprocedureinsert_salary(v_idnumber,v_namevarchar2,v_salarynumber)
is
begin
insertintoExam_Tablevalues(v_id,v_name,v_salary);
commit;
dbms_output.put_line('数据插入成功');
end;
/
(3)执行(调用)存储过程
execinsert_salary(6,'g',2000);
(4)查询执行结果
select*fromExam_Table;
给出执行的最后结果:
2.参数的使用:
in/out/inout参数
阅读以下程序,理解不同类型参数使用的不同,运行程序,给出运行结果。
(1)用两个参数:
in,out传入一个姓名,输出:
某某人你好:
--创建存储过程mp
createorreplaceproceduremp(v_invarchar2,v_outoutvarchar2)
is
begin
v_out:
=v_in||'你好';
end;
---调用存储过程mp
setserveroutputon
declare
v_namevarchar2(10);
begin
mp('scott',v_name);
dbms_output.put_line(v_name);
end;--输出:
scott你好
--另一种方式调用存储过程
或者:
在sqlplus中使用execute命令调用过程
Variableg_namevarchar2(10);--用variable命令绑定参数值,定义一个接受返回值的变量
Executemp(‘hello’,:
g_name);
给出运行结果:
(2)--inout类型参数
createorreplaceproceduremp(name_ininvarchar2,
name_outoutvarchar2,
name_in_outinoutvarchar2)is
begin
dbms_output.put_line(name_in);
name_out:
='返回的参数name_out是'||name_in;
name_in_out:
='name_in_out是'||name_in||name_in_out;
end;
--调用存储过程
variableg_name_outvarchar2(80);
variableg_name_in_outvarchar2(80);
executemp('scott2',:
g_name_out,:
g_name_in_out);
--给出运行结果
Printg_name_out;
Printg_name_in_out;
给出运行结果:
7.2.函数
1.最简单的函数:
--简单函数
(1)创建函数
createfunctionf(nameinvarchar2)returnvarchar2
is
begin
returnname;
end;
(2)调用函数
Setserveroutputon
declare
v_namevarchar2(10);
begin
v_name:
=f('scott');
dbms_output.put_line(v_name);
end;
给出运行结果:
2.稍微复杂的函数
--编写函数
createorreplacefunctionsalarylevel(salarynumber)returnvarchar2
is
begin
ifsalary<1000then
return‘工资太低了,要加油了’;
--elsifsalary<3000then
return'还可以,但是也要努力啊';
--elsifsalary<5000then
return'这个还可以';
else
return'你的工资现在来说,是比较高了';
endif;
end;
--调用函数
declare
v_salarylevelvarchar2(50);
begin
v_salarylevel:
=salarylevel(1000);
dbms_output.put_line(v_salarylevel);
end;
给出运行结果:
7.3.包的声明和使用
阅读以下程序,理解包的声明和使用。
-----------包的声明和使用1-------------------------
DROPTABLEExam_Emps;
CREATETABLEExam_Emps(
idnumber(5)primarykey,
namevarchar2(30),
commission_pctnumber(3,2)
);
insertintoExam_Empsvalues(1,'张一',0.13);
insertintoExam_Empsvalues(2,'张二',0.23);
insertintoExam_Empsvalues(3,'张三',0.33);
insertintoExam_Empsvalues(4,'张四',0.43);
commit;
select*fromExam_Emps;
--创建包头
CREATEORREPLACEPACKAGEcomm_package
IS
g_commNUMBER:
=0.10;
PROCEDUREreset_comm(p_commINNUMBER);
ENDcomm_package;
/
--创建包体
CREATEORREPLACEPACKAGEBODYcomm_package
IS
-------------在包体中定义的局部函数--------------
/*
如果输入的参数p_comm大于Exam_Emps表中最大的commission_pct
字段,则函数返回FALSE,否则函数返回TRUE
*/
FUNCTIONvalidate_comm(p_commINNUMBER)
RETURNBOOLEAN
IS
v_max_commNUMBER;
BEGIN
SELECTMAX(commission_pct)
INTOv_max_comm
FROMExam_Emps;
IFp_comm>v_max_commTHEN
RETURNFALSE;
ELSE
RETURNTRUE;
ENDIF;
ENDvalidate_comm;
---------在包体中定义的局部函数:
结束------------
------------完成在包体中声明的过程--------------
PROCEDUREreset_comm(p_commINNUMBER)
IS
BEGIN
IFvalidate_comm(p_comm)THEN
g_comm:
=p_comm;
ELSE
RAISE_APPLICATION_ERROR(-20210,'不合理的表达式');
ENDIF;
ENDreset_comm;
----------完成在包体中声明的过程:
结束------------
ENDcomm_package;
--测试包
EXECUTEcomm_package.reset_comm
(1);
EXECUTEcomm_package.reset_comm(.33);
给出运行结果:
begin
comm_package.reset_comm(0.15);
dbms_output.put_line('g_comm='||comm_package.g_comm);
end;
/
给出运行结果:
-----------包的声明和使用2-------------------------
droptableExam_Emp;
createtableExam_Emp(
idnumber(5),
namevarchar2(30),
salarynumber(8,2)
);
insertintoExam_Empvalues(1,'张一',3000);
insertintoExam_Empvalues(2,'张二',3400);
insertintoExam_Empvalues(3,'张三',5600);
commit;
createorreplacepackagetax_pkgas
functiontax(v_valueinnumber)returnnumber;
endtax_pkg;
/
createorreplacepackagebodytax_pkg
as
-------------包体中的函数执行部分---------------
funct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 数据库技术 实验 72