复合数据类型和游标

1.       利用游标技术将‘95001’学生选修的所有课程名称放进一个嵌套表变量中,然后遍历该嵌套表并输出该学员选修的课程名称。

执行结果形式如下:

95001 选修的课程如下:

数据库

数学

信息系统

数据结构

PL/SQL 过程已成功完成。

SET SERVEROUTPUT ON

declare

v_cno sc.cno%type;

v_cname course.cname%type;

cursor c_cno is select cno from sc where sno='95001';

begin

open c_cno;

loop

fetch c_cno into v_cno;

exit when c_cno%notfound;

select cname into v_cname from course where v_cno=cno;

dbms_output.put_line(v_cname);

end loop;

close c_cno;

end;

2.     用带参数的显式游标技术将用户输入学号的学生选修的所有课程成绩放进一个VARRAY变量中,然后遍历该VARRAY并输出该学员选修的课程成绩。

执行结果形式如下:

输入 sno 的值: 95001

原值   10: v_sno:='&sno';

新值   10: v_sno:='95001';

95001 选修的课程成绩如下:

58

85

70

92

0

PL/SQL 过程已成功完成。

SET SERVEROUTPUT ON

declare

v_grade sc.grade%type;

vsno sc.sno%type;

cursor v_sno(varry sc.sno%type) is select grade from sc where sno=varry;

begin

   vsno:=&v_input;

   open v_sno(vsno);

loop

fetch v_sno into v_grade;

exit when v_sno%notfound;

dbms_output.put_line(v_grade);

end loop;

close v_sno;

end;

3.       有这么一张表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);

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);

set serveroutput on

declare

xx t_t.a%type;

temp2 t_t.a%type;

cursor v_a is select A from t_t;

cursor v_aa(temp t_t.a%type) is select A from t_t where A=temp for update of A nowait;

begin

      open v_a;

      loop fetch v_a into xx;

           exit when v_a%notfound;

           open v_aa(xx);

           fetch v_aa into temp2; //向后走一个记录,如果没有这条语句,所有的记录就回被清空。有这条语句,那么会保留跳过的这条记录,而只删除后面的那些重复的记录。

           loop fetch v_aa into temp2;

                 exit when v_aa%notfound;

                 delete from t_t where current of v_aa;

           end loop;

           close v_aa;

      end loop;

      close v_a;

end;

此题解方法采用两个游标,外游标v_at_t中读取所有数据信息,然后从v_a中提取信息,后根据提取的信息从v_aa中打开,v_aa是查找信息为temp的数据,然后将信息存储到v_aa中,此时我们只需在游标v_aa中删除重复的信息(注意:第一条信息以后的信息都为重复信息,需删除。)这样此题得到解决。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27042095/viewspace-739593/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27042095/viewspace-739593/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值