对显式游标、隐式游标的理解

显式游标

显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下。
1、创建测试表,插入 测试数据
CREATE TABLE student1 (
sname varchar (20),
sage INTEGER,
semall varchar (20),
sphone VARCHAR (20),
saddress varchar (20)
);
insert into STUDENT1 (sname, sage, semall, sphone, saddress)
values (‘zhangsan’, 12, ‘zhu@163.com’, ‘1516127783’, ‘nanjing2’);
insert into STUDENT1 (sname, sage, semall, sphone, saddress)
values (‘zhangsan’, 15, ‘ss@163.com’, ‘1216127783’, ‘nanjing3’);
insert into STUDENT1 (sname, sage, semall, sphone, saddress)
values (‘zhangsan’, 17, ‘gfdf@163.com’, ‘16161271183’, ‘nanjing4’);
insert into STUDENT1 (sname, sage, semall, sphone, saddress)
values (‘zhangsan’, 82, ‘34df@163.com’, ‘1816127783’, ‘nanjing5’);
commit;
在这里插入图片描述
2、编写存储过程
create or replace procedure PRINTSTUDENT(sname in out varchar,sage in varchar)
as resultCount number; ----这里is,as都可以
begin
select count(1) into resultCount from student1;
if(resultCount = 4) then
resultCount := 4;
DBMS_OUTPUT.PUT_LINE(‘has 4 student’);
else
resultCount := 1;
DBMS_OUTPUT.PUT_LINE(‘has 1 student’);
end if;
exception
----这里写异常处理信息,常用处理方法when then—when others then—end;
when too_many_rows then
DBMS_OUTPUT.PUT_LINE(‘返回值多于1行’);
when others then
DBMS_OUTPUT.PUT_LINE(‘在printStudent过程中出错!’);
end;
3、编写显式游标调用存储过程
–显式游标的使用
declare
CURSOR C4(tname varchar,tage number) --申明游标
is
select sname,sage from student1 where sname = tname and sage = tage;
v_emp_record C4%ROWTYPE;
counts number; --计数器
begin
counts := 0;
OPEN C4(‘zhangsan’,12); --打开游标
LOOP
FETCH C4 INTO v_emp_record;
IF C4%FOUND THEN
DBMS_OUTPUT.PUT_LINE(counts ||’ ‘|| v_emp_record.sname || ’ 的年龄是:’ || v_emp_record.sage);
counts := counts +1;
ELSE
DBMS_OUTPUT.PUT_LINE(counts ||’ ‘||‘已处理’ );
counts := counts +1;
EXIT WHEN c4%NOTFOUND;
END IF;
END LOOP;
CLOSE C4; --关闭游标
END;
在这里插入图片描述
4、使用for循环 loop 游标
declare
CURSOR C4(tage number) --申明游标
is
select sname,sage from student1 where sage < tage;
counts number; --计数器
begin
counts := 0;
FOR everyC in C4(19) LOOP
DBMS_OUTPUT.PUT_LINE(counts ||’ ‘|| everyC.sname || ’ 的年龄是:’ || everyC.sage);
counts := counts +1;
END LOOP;
END;
在这里插入图片描述
FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能;
1、进入循环,自动打开游标,并提取一行数据;
2、程序处理完提取的数据,游标自动转移下一行数据;
3、循环结束,游标自动关闭。

隐式游标

    对于非查询语句,如修改、删除操作,则由ORACLE 系统自动地为这些操作设置游标并创建其工作区,隐式游标的名字为SQL,这是由ORACLE 系统定义的。
    对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的、最新处理的一条SQL 语句所包含的数据。

格式调用为: SQL%
–隐式游标
declare
v_rows number;
begin
update student1 set sage = 22 where sname = ‘zhangsan’;
v_rows := SQL%ROWCOUNT;
DBMS_OUTPUT.put_line(‘更新了’ || v_rows||‘行’);
delete from student1 where sname=‘aa’;
if SQL%notfound then
delete from student1 where sname =‘wanger’;
end if;
end;
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值