游标与异常处理

一.实验目标

掌握游标的基本用法与Oracle异常处理的方法,具备如下能力:

1、针对数据库应用领域的数据需求,设计出基于Oracle数据库的解决方案的能力;

2、承担Oracle数据库系统的实施、运行与维护等基本工作的能力。

二.实验项目

编写存储过程或存储函数完成以下各题,存储过程或函数依次命名为obj3_1、obj3_2、…

1.用显式游标输出emp表的所有信息。

SET SERVEROUTPUT ON;
create or replace procedure obj3_1
 as
 begin
DECLARE
   CURSOR obj3_1 IS SELECT EMPNO, ENAME,JOB,MGR ,HIREDATE, SAL,COMM FROM emp;
   emp_record obj3_1%ROWTYPE;
BEGIN
   OPEN obj3_1 ;
   LOOP
      FETCH obj3_1 INTO emp_record;
      EXIT WHEN obj3_1%NOTFOUND;
     dbms_output.put_line(emp_record.empno||','||emp_record.ename||','||emp_record.job||','||emp_record.mgr||','||emp_record.hiredate||','||emp_record.sal||','||emp_record.comm);
   END LOOP;
   dbms_output.put_line('row count:'||obj3_1%rowcount);
    CLOSE obj3_1;
END;
end;
.
/

2.用隐式游标输出dept表的所有信息。

SET SERVEROUTPUT ON;
create or replace procedure obj3_2
 as
 begin
DECLARE
   CURSOR obj3_2 IS SELECT DEPTNO, DNAME,CID,LOC,EMPS, INCOME FROM dept;
   dept_record obj3_2%ROWTYPE;
BEGIN
   FOR dept_record IN (SELECT DEPTNO, DNAME,CID,LOC,EMPS, INCOME FROM dept) 
   LOOP
     dbms_output.put_line(dept_record.DEPTNO||','||dept_record.DNAME||','||dept_record.CID||','||dept_record.LOC||','||dept_record.EMPS||','||dept_record.INCOME);
   END LOOP;
END;
end;
.
/
exec obj3_2

3.利用游标,修改员工工资。根据job不同,为员工增加相应的sal:

Job     raise
 clerk    +500
 salesman +750
 analyst  +1000
 otherwise +2000

create or replace procedure obj3_3
as
begin
DECLARE
  CURSOR obj3_3 IS SELECT * FROM emp FOR UPDATE;
   v_zl NUMBER;
   v_emp obj3_3%rowtype;
BEGIN
     FOR v_emp IN obj3_3 LOOP
        CASE v_emp.job 
             WHEN 'clerk' THEN v_zl:=500;
             WHEN 'salesman' THEN v_zl:=750;
             WHEN 'analyst' THEN v_zl:=1000;
             ELSE         v_zl:=2000;
       END CASE;
    UPDATE emp SET sal=sal+v_zl WHERE CURRENT OF obj3_3;
  END LOOP;
END; 
end;
.
/

4.用显式游标输出指定学年欠费的学生名单(含姓名、专业、欠费金额)。

create or replace procedure obj3_4 (ye 收费表.学年%type) as
  va 学生.姓名%type;
  vb 学生.专业%type;
  v1 number;
  v2 number;
  cursor obj3_4 is
    select 姓名,专业,应交学费,已交学
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值