收藏 分销(赏)

数据库实验报告.doc

上传人:精*** 文档编号:1228512 上传时间:2024-04-18 格式:DOC 页数:15 大小:431.01KB 下载积分:8 金币
下载 相关 举报
数据库实验报告.doc_第1页
第1页 / 共15页
数据库实验报告.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
《大型数据库技术及应用》实验报告 4  实验名称: PL/SQL基础(2)           专业班级: 姓名:         学号: 实 验 日 期 : 年 月 日  一、 实验目的 1、 掌握隐式游标的基本操作; 2、 掌握游标的属性操作; 3、 掌握参数化游标的使用; 4、 掌握存储过程的创建及使用; 5、 掌握复用重做日志文件组的方法及复用重做日志成员文件的方法; 6、 掌握日志组及日志成员状态的相应视图; 7、 掌握数据库归档模式的切换; 二、 实验内容 1、 掌握隐式游标的基本操作; 2、 游标的属性操作 3、参数化游标 4、存储过程的创建及使用  实验报告填写说明:PART A 为说明部分,不要打印到实验报告中,PART B为练习部分 ,将对应的实验截图粘贴入对应位置。 PART A 说明: 1、掌握隐式游标的基本操作; 隐式游标 ---由Oracle数据库自动创建,名称是(SQL) ,主要用途是可以返回一个操作是否成功或失败. (1) 由Oracle在内部声明,由系统管理 (2) 用于处理 -DML语句 --注意只能用于DML语句哦。 -返回单行的查询--如果使用select .. into ,则要求该select查询的结果只包含一条记录 (3) 用于判断一个操作是否成功. SQL%notfound --返回Boolean值 存在结果集返回 False SQL%found --返回Boolean值 存在结果集返回 True SQL%rowcount --修改涉及到的记录的行数 SQL%isopen --在隐式游标里一般这个属性是自动打开和关闭的,且任何时候查询都返回False。 例1、 Set serveroutput on declare iCount int:=0; begin insert into emp(empno,enmae) values(2,'jerry'); DBMS_output.put_line('游标所影响的行数:'||SQL%rowcount); if SQL%NotFount then DBMS_output.put_line('NotFount为真); else DBMS_output.put_line('NofFount为假'); end if; 2、显式游标的属性操作 (1) 是否找到游标-%FOUND 此属性表示当前游标是否指向有效的一行,取值:TRUE FALSE 例2: Begin Delete from emp Where empno=7934; If sql%found then Dbms_output.put_line(‘delete success’); Else Dbms_output.put_line(‘delete fail’); End if; End; 说明:该例使用了隐式游标,当然,显式游标也可以使用属性%FOUND (2)是否未找到游标-%NOTFOUND 上例等价于: 例3: Begin Delete from emp Where empno=7934; If sql%notfound then Dbms_output.put_line(‘delete fail’); Else Dbms_output.put_line(‘delete success’); End if; End; / (3) 游标行数-%ROWCOUNT 此属性记录了用户成功提取数据的行数,也可以了解为游标所在的行数。 例4: Declare Empl emp%rowtype; Cursor emp_cur is Select * from emp; Begin Open emp_cur; Loop Fetch emp_cur into empl; Dbms_output.put_line(to_char(empl.empno)); Exit when emp_cur%rowcount=5; End loop; Close emp_cur; End; (4) 是否打开游标-%ISOPEN 例5: Declare Empl emp%rowtype; Cursor emp_cur is Select * from emp; Begin If emp_cur%isopen then Fetch emp_cur into empl; Dbms_output.put_line(to_char(empl.empno)); Else Dbms_output.put_line(‘emp_cur is not open’); Open emp_cur; Loop Fetch emp_cur into empl; Dbms_output.put_line(to_char(empl.empno)); Exit when emp_cur%rowcount=5; End loop; Close emp_cur; End if; End; / 3、参数化游标 在定义游标时可以带上参数,使得在使用游标时,根据参数不同所选中的结果集也不同,达到动态使用游标的目的。 例6: 首先在SQL/PLUS上输入下面的语句: Accept dept_id prompt ‘please input the deptno:’ 说明:accept是SQL/PLUS的命令,不是pl/sql语句,类似于c语言的cin,该命令可以接受你的键盘输入到dept_id。 例6: Declare Did emp.Deptno%type:=&dept_id; Empl emp%rowtype; Cursor emp_cur(deptid number)is Select * from emp where deptno=deptid; Begin Open emp_cur(did); Loop Fetch emp_cur into empl; Dbms_output.put_line(to_char(empl.empno)); Exit when (emp_cur%rowcount=3) or (emp_cur%notfound) ; End loop; Close emp_cur; End; 4、存储过程的创建及使用  所谓的存储过程就是存储在数据库中的过程,该过程与数据库中的表、视图一样属于数据库对象。 (1)语法 Create [or replace] procedure <过程名> (<参数1>,[方式1]<数据类型1>, <参数2>,[方式2]<数据类型2>… ) Is|as Pl/sql (2) 例 例7: 创建存储过程 Create or replace procedure dept_member_num ( in_deptno in emp.deptno%type) As Out_num number; Begin Select count(*) into out_num From emp where deptno=in_deptno; Dbms_output.put_line(‘the number of dept’||to_char(in_deptno)||’ is ’||to_char(out_num)) ; End dept_member_num; 调用存储过程: 分别执行 Execute dept_member_num(10); Execute dept_member_num(20); Execute dept_member_num(30); PART B 练习: 1、 将工资小于1000的员工的工资更新为原始工资的1.2倍,并将影响到的行数输出到屏幕上; 2、 将工资大于50000的员工的工资更新为原始工资的1.5倍,如果找不到,请输出“未找到工资大于50000的员工” 3、 从键盘输入员工的员工号,使用参数化游标在屏幕输出显示员工的基本信息; 4、 从键盘输入员工的员工号,使用参数化游标在屏幕输出显示入职日期早于1985年12月1日的员工的基本信息; 列出现有日志文件的位置和名称,显示数据库所拥有的重做日志文件组号,成员的数量和日志文件的大小 select group#,sequence#,members,bytes,status,archived from v$log; select * from v$logfile; 查询数据库的归档模式,查看是否启用了自动归档 archive log list; 说明当前日志组号和最大日志序列号,进行手工日志切换,重新说明当前日志组号和最大序列号, select group#,sequence# from v$log; 进行手工日志切换, alter system switch logfile; select group#,sequence# from v$log; 在E盘增加新的日志组,其中包含两个成员,大小为1M 5、 在E:\盘为每个日志组添加一个成员,要求新增日志成员的大小与原有日志成员大小一致; 6、 添加一个日志文件组,参考课本P.366-P.367; 7、 查看刚添加日志组的group#,sequence#,members,status信息; 8、 查看刚添加日志成员文件的group#,members,status信息; 9、 将数据库设置为归档模式,并通过log_archive_dest_n设置两个归档文件的位置;参考课本P.367;实验截图必须包含实际归档日志的信息。 三、实验数据   SCOTT.EMP SCOTT.DEPT SCOTT.SALGRADE 四、 思考题 1、 如何将数据库设置为自动管理UNDO数据? 2、 如果设置了undo_retention, Oracle overwrites undo数据块的顺序是什么? 3、 查看网络资源:Oracle concepts Table 9-1 Preventable Read Phenomena by Isolation Level。总结心得 (不计分)。 4、 Redo 日志组的状态active和inactive区别是什么? 5、 日志成员的布局原则有哪些? 6、 如何将日志组的状态由active变为inactive,由current变为active? 15
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 报告/总结

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服