ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:61.92KB ,
资源ID:5612570      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5612570.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Oracle实验四下PLSQL的游标和异常.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Oracle实验四下PLSQL的游标和异常.docx

1、Oracle实验四下PLSQL的游标和异常数据库开发技术实验4下 报告实验题目:PL_SQL的游标和异常日期2015 11 - 21班级计算机1301姓名实验环境:Win10 +Oracle11g一、实验内容与完成情况(记录所有的实验过程):1、编写匿名PL/SQL程序块,根据用户输入的部门编号实现在PL/SQL中逐行显示emp表中该部门员工的工资级别。工资级别是:当工资为空时,为空,工资在1000元以下的为低,在1000和3000之间的为中,高于3000元的为高。要求使用参数化游标。运行过程和效果如下:输入 dept_id 的值: 10原值 9: v_deptno:= &dept_id;新值

2、 9: v_deptno:= 10;7782,CLARK,2450,中7839,KING,5000,高7934,MILLER,1300,中PL/SQL 过程已成功完成。SQL语句set serveroutput ondeclare v_empno emp.empno%type; v_ename emp.ename%type; v_sal emp.sal%type; v_deptno emp.deptno%type := & deptno_id; v_grade varchar2(20); cursor emp_cursor(emp_deptno emp.deptno%type) is sele

3、ct empno,ename,sal from emp where deptno = emp_deptno;beginopen emp_cursor(v_deptno);loop fetch emp_cursor into v_empno,v_ename,v_sal; exit when emp_cursor%notfound; begin if v_sal = 1000 and v_sal 3000 then v_grade := 高; end if; if v_sal is null then v_grade := ; end if; dbms_output.put_line(v_empn

4、o|,|v_ename|,|v_sal|,|v_grade); end;end loop;close emp_cursor;end;/实验结果截图2、创建一个PL/SQL块,要求根据用户输入的员工编号(EMPNO),查询出EMP表中该编号员工所在的部门编号(deptno)及其直接管理者的姓名(ename),要有异常处理(该员工编号不存在时或者该员工是总裁无直接主管时)。查询效果形如下:输入 员工编号 的值: 7788原值 6: v_empno:= &员工编号;新值 6: v_empno:= 7788;员工编号 部门编号 上司姓名-7788 20 JONESPL/SQL 过程已成功完成。或者:输

5、入 员工编号 的值: 8001原值 6: v_empno:= &员工编号;新值 6: v_empno:= 8001;该员工不存在!PL/SQL 过程已成功完成。或者:输入 员工编号 的值: 7839原值 7: v_empno:= &员工编号;新值 7: v_empno:= 7839;该员工是总裁,无直接主管!PL/SQL 过程已成功完成。SQL语句set serveroutput ondeclare v_deptno emp.deptno%type; v_ename emp.ename%type; v_empno emp.empno%type := &员工编号; v_mgr emp.mgr%t

6、ype; e_null exception; -声明异常 e_mgr exception; -声明异常 cursor emp_cursor(emp_empno emp.empno%type) is select deptno,mgr from emp where empno = emp_empno;beginopen emp_cursor(v_empno);fetch emp_cursor into v_deptno,v_mgr;begin if emp_cursor%notfound then raise e_null; -显式抛出异常 end if; if v_mgr is null th

7、en raise e_mgr; -显式抛出异常 end if; select emp2.ename into v_ename from emp emp1,emp emp2 where emp1.mgr = emp2.empno and emp1.empno = v_empno; dbms_output.put_line(员工编号 部门编号 上司姓名); dbms_output.put_line(-); dbms_output.put_line(v_empno| |v_deptno| |v_ename);Exception when e_null then -处理异常 dbms_output.p

8、ut_line(此员工不存在!); commit; when e_mgr then -处理异常 dbms_output.put_line(该员工是总裁,无直接主管!); commit;end;close emp_cursor;end;/实验结果截图 3、*创建一个PL/SQL块,根据输入的部门编号,逐条输出EMP表中该部门每位员工的序号、编号(empno)、姓名(ename)和工资(sal)信息,要求用游标实现(参见教材P244例10.43)。信息显示格式要求如下:输入 dept_id 的值: 10原值 7: v_deptno:= &dept_id;新值 7: v_deptno:= 10;序号

9、 编号 姓名 工资1 7782 CLARK 24502 7839 KING 50003 7934 MILLER 1300PL/SQL 过程已成功完成。SQL语句set serveroutput ondeclare v_deptno emp.deptno%type := &部门编号; v_ename emp.ename%type; v_empno emp.empno%type; v_sal emp.sal%type; v_count number := 1; cursor emp_cursor(emp_deptno emp.deptno%type) is select empno,ename,s

10、al from emp where deptno = emp_deptno;beginopen emp_cursor(v_deptno);dbms_output.put_line(序号 编号 姓名 工资);loopfetch emp_cursor into v_empno,v_ename,v_sal;exit when emp_cursor%notfound; begin dbms_output.put_line(v_count| |v_empno| |v_ename| |v_sal); v_count := v_count + 1; end;end loop;close emp_cursor

11、;end;/实验结果截图4、创建一个PL/SQL块,每输出DEPT表的一条记录(DEPTNO,DNAME,LOC)后,随后输出该部门的员工记录(EMPNO,ENAME,HIREDATE,SAL),输出格式形如下:部门编号:10 部门名称:ACCOUNTING 部门位置:NEW YORK-7782 CLARK 06-09-81 $24507839 KING 11-17-81 $50007934 MILLER 01-23-82 $1300部门编号:20 部门名称:RESEARCH 部门位置:DALLAS-7369 SMITH 12-17-80 $8007566 JONES 04-02-81 $29

12、757788 SCOTT 04-19-87 $30007876 ADAMS 05-23-87 $11007902 FORD 12-03-81 $3000部门编号:30 部门名称:SALES 部门位置:CHICAGO-7499 ALLEN 02-20-81 $16007521 WARD 02-22-81 $12507654 MARTIN 09-28-81 $12507698 BLAKE 05-01-81 $28507844 TURNER 09-08-81 $15007900 JAMES 12-03-81 $950部门编号:40 部门名称:OPERATIONS 部门位置:BOSTON-PL/SQL

13、 过程已成功完成。SQL语句set serveroutput ondeclare v_deptno dept.deptno%type; v_dname dept.dname%type; v_loc dept.loc%type; v_empno emp.empno%type; v_ename emp.ename%type; v_hiredate emp.hiredate%type; v_sal emp.sal%type; v_mark number; v_tmp_deptno dept.deptno%type; cursor emp_dept_cursor is select deptno,em

14、pno,ename,hiredate,sal from emp order by deptno;beginv_mark := 1;v_tmp_deptno := 0;open emp_dept_cursor;loopfetch emp_dept_cursor into v_deptno,v_empno,v_ename,v_hiredate,v_sal;exit when emp_dept_cursor%notfound; begin if v_tmp_deptno = v_deptno then v_mark := 1; else v_mark := 0; end if; if v_mark

15、= 1 then dbms_output.put_line(v_empno| |v_ename| |v_hiredate| $|v_sal); else begin select dname,loc into v_dname,v_loc from dept where deptno = v_deptno; v_tmp_deptno := v_deptno; dbms_output.put_line(部门编号:|v_deptno| 部门名称:|v_dname| 部门位置:|v_loc); dbms_output.put_line(-); dbms_output.put_line(v_empno|

16、 |v_ename| |v_hiredate| $|v_sal); end; end if; end;end loop;close emp_dept_cursor;end;/实验结果截图5、*利用REF游标(游标变量)在student表中完成以下组合查询任务: 根据姓名、所在系任意组合查询学员信息。输出格式形如下:输入 name 的值: 王名原值 9: l_name := &Name;新值 9: l_name := 王名;输入 dept 的值: MA原值 10: l_sdept := &dept;新值 10: l_sdept := MA;SELECT * FROM student WHERE

17、1=1 AND sname=王名AND sdept=MA95003, 王名, 女, 18, MAPL/SQL 过程已成功完成。SQL语句set serveroutput ondeclare v_sname student.sname%type := &name; v_sdept student.sdept%type := &dept; type cur_type is ref cursor; cur cur_type; rec student%rowtype;begindbms_output.put_line(select * from student where sname =|v_snam

18、e| and sdept =|v_sdept|);open cur for select * from student where sname = |v_sname| and sdept = | v_sdept|;loop fetch cur into rec.sno,rec.sname,rec.ssex,rec.sage,rec.sdept; exit when cur%notfound; dbms_output.put_line(rec.sno|,|rec.sname|,|rec.ssex|,|rec.sage|,|rec.sdept);end loop;end;/实验结果截图附加题:*1

19、、利用SELECT FOR UPDATE游标和UPDATE语句中的WHERE CURRENT OF子句完成以下任务:把所有年龄小于18岁的学员成绩增加10分。SQL语句DECLARE CURSOR score_cursor ISselect s.sno,sage,grade from student s,stuscore g where s.sno = g.sno and sage 18 FOR UPDATE OF grade NOWAIT;BEGIN FOR score_record IN score_cursor LOOP UPDATE stuscore SET grade = score

20、_record.grade + 10 WHERE CURRENT OF score_cursor; END LOOP; COMMIT;END;/实验结果截图 2、有这么一张表t_t,他只有一个number(8)的字段a,由于在创建表时忘记设置主键约束,导致表中有很多重复的记录。请你编写一个程序,将表中重复的记录保留一个,删除其余的。create table t_t(a number(8);insert into t_t values(1);insert into t_t values(3);insert into t_t values(6);insert into t_t values(1);

21、insert into t_t values(6);insert into t_t values(5);insert into t_t values(3);insert into t_t values(1);insert into t_t values(1);- 可以通过查看表t_t的值来验证程序的执行情况。Select * from t_t;SQL语句declare v_a number; cursor t_t_cursor is select a from t_t;beginopen t_t_cursor;loopfetch t_t_cursor into v_a;exit when t_t_cursor%notfound; delete from t_t where a = v_a; insert into t_t(a) values(v_a); commit;end loop;end;/实验结果截图执行失败出现的问题:解决方案(列出遇到的主要问题和解决办法,列出没有解决的问题):问题一:附加题2无法成功运行原因:表或视图不存在 解决方案:建立表或视图

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2