鄢鸿实验五oracle综合性实验指导书.docx
- 文档编号:27168130
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:16
- 大小:44.24KB
鄢鸿实验五oracle综合性实验指导书.docx
《鄢鸿实验五oracle综合性实验指导书.docx》由会员分享,可在线阅读,更多相关《鄢鸿实验五oracle综合性实验指导书.docx(16页珍藏版)》请在冰豆网上搜索。
鄢鸿实验五oracle综合性实验指导书
湖南科技学院综合性实验指导书
实验名称:
PL/SQL编程
实验项目性质:
综合性
所涉及课程:
Oracle数据库
计划学时:
4
一、实验目的
(1)熟练掌握PL/SQL程序设计的基本知识。
(2)熟练掌握PL/SQL中控制结构的使用。
具体包括选择结构语句(IF语句和CASE语句),循环结构(四种循环结构)。
(3)熟练使用PL/SQL中系统函数。
(4)掌握PL/SQL中异常处理语句的使用
(5)掌握PL/SQL中SELECT语句和DML语句的综合运用。
二、实验内容及步骤
1.创建用户,指定密码、表空间。
用户名命名以本人姓名的缩写+‘_’+学号最后两位。
2.为该用户授予sysdba、connect、resource权限。
3.以本人的用户身份登录。
4.练习选择结构语句的使用方法。
1、条件语句IF语法:
IF<条件表达式>THEN
<执行语句>……<执行语句n>
[ELSIF<条件表达式>THEN
<执行语句>……<执行语句n>
……
ELSE
<执行语句>]
ENDIF;
2、分支语句CASE语法:
CASE<变量>
WHEN<表达式1>THEN值1
WHEN<表达式2>THEN值2
……
WHEN<表达式n>THEN值n
ELSE值n+1
END;
例1:
声明一个整型变量Num,使用IF语句判断Num变量是正数、负数或0。
SETServerOutputON;
DECLARE
NumINTEGER:
=-11;
BEGIN
IFNum<0THEN
dbms_output.put_line('负数');
ELSIFNum>0THEN
dbms_output.put_line('正数');
ELSE
dbms_output.put_line('0');
ENDIF;
END;
/
例2、使用CASE语句根据给定的整数输出对应的星期值:
SETServerOutputON;
DECLARE
varDAYINTEGER:
=3;
ResultVARCHAR2(20);
BEGIN
Result:
=CASEvarDAY
WHEN1THEN'星期一'
WHEN2THEN'星期二'
WHEN3THEN'星期三'
WHEN4THEN'星期四'
WHEN5THEN'星期五'
WHEN6THEN'星期六'
WHEN7THEN'星期七'
ELSE'数据越界'
END;
dbms_output.put_line(Result);
END;
5.练习循环结构语句的使用方法。
1、循环语句LOOP…EXIT…END
LOOP
<程序块1>
IF<条件表达式>THEN
EXIT
ENDIF
<程序块2>
ENDLOOP;
2、循环语句LOOP…EXITWHEN…END
LOOP
<程序块1>
EXITWHEN<条件表达式>
<程序块2>
ENDLOOP;
3、循环语句WHILE…LOOP…ENDLOOP
WHILE<条件表达式>
LOOP
<程序块>
ENDLOOP;
4、循环语句FOR…IN…LOOP…ENDLOOP
FOR<循环变量>IN<初始值>..<终止值>
LOOP
<程序块>
ENDLOOP;
例1、计算1到3的累加和。
SETServerOutputON;
DECLARE
v_NumINTEGER:
=2;
v_SumINTEGER:
=0;
BEGIN
LOOP
v_Sum:
=v_Sum+v_Num;
dbms_output.put_line(v_Num);
IFv_Num=100THEN
EXIT;
ENDIF;
dbms_output.put_line('+');
v_Num:
=v_Num+2;
ENDLOOP;
dbms_output.put_line('=');
dbms_output.put_line(v_Sum);
END;
例2、
SETServerOutputON;
DECLARE
v_NumINTEGER:
=1;
v_SumINTEGER:
=0;
BEGIN
LOOP
v_Sum:
=v_Sum+v_Num;
dbms_output.put_line(v_Num);
EXITWHENv_Num=3;
dbms_output.put_line('+');
v_Num:
=v_Num+1;
ENDLOOP;
dbms_output.put_line('=');
dbms_output.put_line(v_Sum);
END;
例3、
SETServerOutputON;
DECLARE
v_NumINTEGER;
v_SumINTEGER:
=0;
BEGIN
FORv_NumIN1..3
LOOP
v_Sum:
=v_Sum+v_Num;
dbms_output.put_line(v_Num);
IFv_Num<3THEN
dbms_output.put_line('+');
ENDIF;
ENDLOOP;
dbms_output.put_line('=');
dbms_output.put_line(v_Sum);
END;
6.练习异常处理语句的使用方法。
WHEN语句来定义异常处理:
EXCEPTION
WHEN<异常情况名>THEN
<异常处理代码>
WHEN<异常情况名>THEN
<异常处理代码>
……
WHENOTHERSTHEN
<异常处理代码>
例1、SETSERVEROUTPUTON;
DECLARE
xNUMBER;
BEGIN
x:
='a123';--向NUMBER类型的变量X中赋值字符串,导致异常
EXCEPTION
WHENVALUE_ERRORTHEN
DBMS_OUTPUT.PUT_LINE('数据类型错误');
END;
例2、
SETSERVEROUTPUTON;
DECLARE
v_resultNUMBER(10):
=0;
BEGIN
v_result:
=100/0;
DBMS_OUTPUT.PUT_LINE('结果是:
'||v_result);
EXCEPTION
WHENZERO_DIVIDETHEN
DBMS_OUTPUT.PUT_LINE('除数是零!
默认用1替代除数,结果是:
'||100/1);
END;
7.练习PL/SQL中SELECT语句和DML语句的综合运用。
创建表departments和表employees,并为两张表输入若干数据。
如下图所示。
表departments结构:
字段名称字段类型约束
Dep_idnumber主键
Dep_namevarchar2(20)
表employees结构:
字段名称字段类型约束
emp_idnumber主键
emp_namevarchar2(20)
sexvarchar2(20)
titlevarchar2(20)
wagenumber
idcardvarchar2(12)
dep_idnumber外键
完成思考题部分的PL/SQL程序编写。
三、实验(设计)仪器设备和材料清单
(1)硬件环境:
PC机
(2)软件环境:
Oracle10g
四、实验要求
1、验证实验内容部分的程序代码。
2、综合运用各种程序结构完成思考题部分的PL/SQL程序编写。
五、考核形式
以实验报告的程序代码结果作为成绩。
六、实验报告要求
(1)实验目的。
(2)思考题的源程序清单。
(3)写出在实验过程中遇到的问题及解决方法。
(4)要求字迹端正、条理清晰、概念正确。
七、思考题
1、编写PL/SQL程序,使用LOOP…EXIT…END语句计算1—100之间所有偶数之和.
2、编写PL/SQL程序,查询5号员工工资,如果工资小于3000,则加200员工资,并提示信息“5号员工工资已更新。
”,如果工资大于3000,则提示信息“5号员工工资为XXX,已达到规定标准。
”
3、编写PL/SQL程序,查询1号员工的工资,使用CASE语句输出其工资等级。
工资小于等于3000,等级为“低”;工资大于3000,小于5000,等级为”中”;工资大于等于5000,等级为高;
4、编写PL/SQL程序,查询的departments表中是否有部门号为“6”的记录,如果没有,插入新记录部门号为6,部门名称为“后勤部”。
如果有,显示查询结果。
湖南科技学院计算机与通信工程系
实验报告
实验项目
PL/SQL编程
课程名称
Oracle数据库
成绩
时间
2012年12月日第15周第9-12节
地点
E305
姓名
学号
班级
一、实验要求
在Oracle10g中综合运用PL/SQL中各种程序控制结构、系统函数、异常处理语句以及DML语句完成思考题部分的PL/SQL程序编写。
二、实验目的
(1)熟练掌握PL/SQL程序设计的基本知识。
(2)熟练掌握PL/SQL中控制结构的使用。
具体包括选择结构语句(IF语句和CASE语句),循环结构(四种循环结构)。
(3)熟练使用PL/SQL中系统函数。
(4)掌握PL/SQL中异常处理语句的使用
(5)掌握PL/SQL中SELECT语句和DML语句的综合运用。
三、实验环境
✧硬件设备:
PC机一台
✧操作系统:
WindowsXP
✧应用工具:
Oracle10g
四、实验内容及结果
(1)以SYS用户登录系统。
代码如下:
sqlplussys/jsjorclassysdba;
(2)创建用户,指定密码、表空间。
用户名命名以本人姓名的缩写+‘_’+学号最后两位。
代码如下:
createuseryh1_45
identifiedbyqq11111
defaulttablespacesystem
temporarytablespacetemp;
(3)为该用户授予sysdba、connect、resource权限。
代码如下:
grantunlimitedtablespacetoyh1_45;
(4)以自己的用户身份登录。
代码如下:
quit;
sqlplusyh1_45/qq11111assysdba;
(5)在本用户方案中创建表departments,并为该表输入若干数据。
程序代码如下:
createtableyh1_45.departments(
Dep_idnumberprimarykey,
Dep_namevarchar2(20)
);
Insertintoyh1_45.departments(dep_id,dep_name)values(1,'销售部');
Insertintoyh1_45.departments(dep_id,dep_name)values(2,'行政部');
Insertintoyh1_45.departments(dep_id,dep_name)values(3,'财务部');
Insertintoyh1_45.departments(dep_id,dep_name)values(4,'人事部');
Select*fromyh1_45.departments;
执行结果如下:
(6)在本用户方案中创建表employees,并为该表输入若干数据。
程序代码如下:
createtableyh1_45.employees(
emp_idnumberprimarykey,
emp_namevarchar2(20),
sexvarchar2(20),
titlevarchar2(20),
wagenumber,
idcardvarchar2(12),
dep_idnumber,
foreignkey(dep_id)referencesyh1_45.Departments(Dep_id)
);
insertintoyh1_45.employeesvalues(1,'张三','女','销售部经理',10000,201201,1);
insertintoyh1_45.employeesvalues(2,'李四','男','销售部职员',2000,201202,1);
insertintoyh1_45.employeesvalues(3,'王麻子','男','行政部经理',12000,201203,2);
insertintoyh1_45.employeesvalues(4,'钱六','女','财务部经理',20000,201204,3);
insertintoyh1_45.employeesvalues(5,'刘七','男','人事部经理',13000,201205,4);
select*fromyh1_45.employees;
执行结果如下:
(7)编写PL/SQL程序,使用LOOP…EXIT…END语句计算1—100之间所有偶数之和。
程序代码如下:
SETServerOutputON;
DECLARE
v_NumINTEGER:
=2;
v_SumINTEGER:
=0;
BEGIN
LOOP
v_Sum:
=v_Sum+v_Num;
dbms_output.put_line(v_Num);
IFv_Num=100THEN
EXIT;
ENDIF;
dbms_output.put_line('+');
v_Num:
=v_Num+2;
ENDLOOP;
dbms_output.put_line('=');
dbms_output.put_line(v_Sum);
END;
/
执行结果如下:
(8)编写PL/SQL程序,查询5号员工工资,如果工资小于3000,则加200员工资,并提示信息“5号员工工资已更新。
”,如果工资大于3000,则提示信息“5号员工工资为XXX,已达到规定标准。
”
程序代码如下:
declare
v_wageyh1_45.employees.wage%type;
begin
selectwageintov_wage
fromyh1_45.employees
whereemp_id=5;
ifv_wage<3000then
updateyh1_45.employeessetwage=wage+200wherev_wage<3000;
dbms_output.put_line('5号员工工资已更新。
');
else
dbms_output.put_line('5号员工工资为'||v_wage||',已达到规定标准。
');
endif;
end;
/
执行结果如下:
编写PL/SQL程序,查询1号员工的工资,使用CASE语句输出其工资等级。
工资小于等于3000,等级为“低”;工资大于3000,小于5000,等级为”中”;工资大于等于5000,等级为高;
程序代码如下:
setserveroutputon;
declare
varIdnumber;
varWagenumber;
resultevarchar2(20);
begin
selectemp_id
intovarId
fromyh1_45.employees
whereemp_id=1;
selectwage
intovarWage
fromyh1_45.employees
whereemp_id=1;
resulte:
=case
whenvarWage<=3000then'低'
whenvarWage>3000andvarWage<=5000then'中'
else'高'
end;
dbms_output.put_line(resulte);
end;
/
执行结果如下:
(9)编写PL/SQL程序,查询的departments表中是否有部门号为“6”的记录,如果没有,插入新记录部门号为6,部门名称为“后勤部”。
如果有,显示查询结果。
程序代码如下:
declare
v_dep_id yh1_45.departments.dep_id%type;
begin
select dep_id into v_dep_id
from yh1_45.departments
where dep_id=6;
dbms_output.put_line('部门号为'||v_dep_id||'的部门已存在');
exception
when no_data_found then
insert into yh1_45.departments values(6,'后勤部');
dbms_output.put_line('已插入完成');
end;
/
Select*fromyh1_45.departmentswhereDep_id=’6’;
Commit;
执行结果如下:
五、实验总结
通过这次上机实验,我有以下收获:
但是还上机操作过程中还存在以下几个方面的不足:
六、教师评语
教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 oracle 综合性 指导书