大型数据库技术实验72Word格式文档下载.docx
- 文档编号:15706847
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:16
- 大小:228.15KB
大型数据库技术实验72Word格式文档下载.docx
《大型数据库技术实验72Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大型数据库技术实验72Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
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
insertintoExam_Tablevalues(v_id,v_name,v_salary);
commit;
dbms_output.put_line('
数据插入成功'
/
(3)执行(调用)存储过程
execinsert_salary(6,'
g'
2000);
(4)查询执行结果
select*fromExam_Table;
给出执行的最后结果:
2.参数的使用:
in/out/inout参数
阅读以下程序,理解不同类型参数使用的不同,运行程序,给出运行结果。
(1)用两个参数:
in,out传入一个姓名,输出:
某某人你好:
--创建存储过程mp
createorreplaceproceduremp(v_invarchar2,v_outoutvarchar2)
v_out:
=v_in||'
你好'
;
---调用存储过程mp
setserveroutputon
v_namevarchar2(10);
mp('
scott'
v_name);
dbms_output.put_line(v_name);
--输出:
scott你好
--另一种方式调用存储过程
或者:
在sqlplus中使用execute命令调用过程
Variableg_namevarchar2(10);
--用variable命令绑定参数值,定义一个接受返回值的变量
Executemp(‘hello’,:
g_name);
(2)--inout类型参数
createorreplaceproceduremp(name_ininvarchar2,
name_outoutvarchar2,
name_in_outinoutvarchar2)is
dbms_output.put_line(name_in);
name_out:
='
返回的参数name_out是'
||name_in;
name_in_out:
name_in_out是'
||name_in||name_in_out;
--调用存储过程
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
returnname;
(2)调用函数
Setserveroutputon
v_name:
=f('
2.稍微复杂的函数
--编写函数
createorreplacefunctionsalarylevel(salarynumber)returnvarchar2
ifsalary<
1000then
return‘工资太低了,要加油了’;
--elsifsalary<
3000then
return'
还可以,但是也要努力啊'
5000then
这个还可以'
else
你的工资现在来说,是比较高了'
endif;
--调用函数
declare
v_salarylevelvarchar2(50);
begin
v_salarylevel:
=salarylevel(1000);
dbms_output.put_line(v_salarylevel);
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
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)
IFvalidate_comm(p_comm)THEN
g_comm:
=p_comm;
ELSE
RAISE_APPLICATION_ERROR(-20210,'
不合理的表达式'
ENDreset_comm;
----------完成在包体中声明的过程:
ENDcomm_package;
--测试包
EXECUTEcomm_package.reset_comm
(1);
EXECUTEcomm_package.reset_comm(.33);
comm_package.reset_comm(0.15);
g_comm='
||comm_package.g_comm);
-----------包的声明和使用2-------------------------
droptableExam_Emp;
createtableExam_Emp(
idnumber(5),
salarynumber(8,2)
insertintoExam_Empvalues(1,'
3000);
insertintoExam_Empvalues(2,'
3400);
insertintoExam_Empvalues(3,'
5600);
createorreplacepackagetax_pkgas
functiontax(v_valueinnumber)returnnumber;
endtax_pkg;
createorreplacepackagebodytax_pkg
as
-------------包体中的函数执行部分---------------
funct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 数据库技术 实验 72