理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc

上传人:ng****60 文档编号:3208173 上传时间:2019-05-25 格式:DOC 页数:6 大小:44KB
下载 相关 举报
理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc_第1页
第1页 / 共6页
理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc_第2页
第2页 / 共6页
理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc_第3页
第3页 / 共6页
理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc_第4页
第4页 / 共6页
理解游标(2)游标的属性介绍及不同游标类别的案例演示.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、理解游标(2)游标的属性介绍及不同游标类别的案例演示相关链接:理解游标(1):游标的概述PL/SQL 提供了六种游标属性:游标属性名字 说明 举例%FOUND 如果成功取到记录就返回 true;否则,返回 false beginupdate t set name=f where id=2;if SQL%FOUND thendbms_output.put_line(cursor );end if;end;%NOTFOUND 如果没有成功取到记录就返回 true;否则,返回 false %FOUND 和%NOTFOUND 是相反属性,到底什么时候使用%FOUND 什么时候又该用%NOTFOUND

2、呢?要看使用哪一个属性表达得最自然,比如: exit when not sql%foundexit when sql%notfound显然,后者更自然%ROWCOUNT 返回到目前为止,已经从游标中取出的记录数量 beginupdate t set name=f where id=2;dbms_output.put_line(rows selected: |sql%rowcount);end;rows selected: 1%ISOPEN 如果游标是打开的就返回 true;否则,返回 false 通常用在确保当发生异常情况后游标不会一直打开着而不关闭exception when others

3、 thenif cursor_name%ISOPEN thenclose cursor_name;end if;%BULK_ROWCOUNT 返回 forall 语句修改的记录数量 %BULK_EXCEPTIONS 返回 forall 语句修改记录时出现的异常信息 我们可以在 pl/sql 中使用这些游标属性,但不能再 sql 语句中使用要使用一个游标属性,只需要在游标名字或游标变量后面加上%就可以,比如:cursor_name%attribute_name对于一个隐式游标,游标的名字固定就是“SQL”,比如 SQL%FOUND下面以 t 表为例,对各种游标类别作简单使用介绍sql SQL r

4、ollback; Rollback complete SQL select * from t; ID NAME - - 1 a 2 b 3 c 4 d 5 e 隐式游标实例:sql begin -执行 DML 操作 update t set name = ff where id = 5; -判断是否有受影响行 if sql%found then -打印受影响行数 dbms_output.put_line(影响行数: | sql%rowcount); end if; -判断是否没有受影响行 if sql%notfound then dbms_output.put_line(id 为 5 的记录不

5、存在); end if; end; 无参显式游标实例:sql declare -声明游标表变量并关联 sql cursor rowList is select * from t; -声明行变量 -如果上面的查询语句只有一个查询字段,这里也可以使用正常的变量声明方式(v_rowValue varchar2(20);)。 rowValue t%rowtype; begin open rowList; -打开游标 -如果确定游标中只有一条记录的话,loop 和 end loop 可以不写,而 exit 必须存在于游标循环内,所以也不需要写。 loop fetch rowList into rowVa

6、lue; -取出游标内的值放到 rowValue 中 exit when rowList%notfound; -判断是否还存在记录,如果不存在终止游标 dbms_output.put_line(rowValue.name); -将取到的值打印,如果查询只有一个字段这里只需写变量名即可。 end loop; close rowList; -关闭游标 end; 有参显式游标实例:sql declare -声明带参数的游标变量并关联 sql,并将参数与 sql 进行关联 cursor rowList(c_name varchar2, c_id number) is select * from t w

7、here t.name = c_name and t.id = c_id; -声明行变量 -如果上面的查询语句只有一个查询字段,这里也可以使用正常的变量声明方式(v_rowValue varchar2(20);)。 rowValue t%rowtype; begin open rowList(Think, 1); -打开游标,并将参数给出 -如果确定由表中只有一条记录的话,loop 和 end loop 可以不写,而 exit 必须存在于游标循环内,所以也不需要写。 loop fetch rowList into rowValue; -取出游标内的值放到 rowValue 中 exit whe

8、n rowList%notfound;-判断是否还存在记录,如果不存在终止游标 dbms_output.put_line(rowValue.name); -将的到的值打印,如果查询只有一个字段这里只需写变量名即可。 end loop; close rowList; -关闭游标 end; 游标 FOR 循环实例:游标 FOR 循环不需要手动进行打开和管理操作,全部由 PL/SQL 引擎进行管理FOR oo in xx 等同于 fetch xx into oo;sql declare -声明游标变量并关联 sql cursor rowList is select level a from dual

9、 connect by level = 10; begin for rowValue in rowList loop -rowValue 是每条记录不需要事先声明,rowList 是集合中的所有记录 dbms_output.put_line(rowValue.a);-取出集合中的值进行打印 end loop; end; declare begin -可以将 select 语句 for xx in 内,无论传参或是嵌套更为方便简洁。 for rowValue in (select level a from dual connect by level =10) loop for rv in (se

10、lect name from t where t.id = rowValue.a) loop dbms_output.put_line(rv.name );-将取到的值打印。 end loop; end loop; end; -这种是最简单的游标 declare begin for rowValue in 1.10 loop dbms_output.put_line(rowValue);-将取到的值打印,如果查询只有一个字段这里只需写变量名即可。 end loop; end; REF 游标实例:sql declare type cus_cur_type is ref cursor return

11、 t%rowtype; -强类型 Ref 游标,查询的 sql 必须返回 t 表类型 -type cus_cur_type is ref cursor;弱类型 Ref 游标,返回类型没有限制 rowList cus_cur_type; - 声明游标变量 rowValue t%rowtype; -声明行变量 begin open rowList for select * from t; -打开游标,并关联 sql loop fetch rowList into rowValue; -按行取出数据 exit when rowList%notfound;-判断是否还存在记录,如果不存在终止游标 dbms_output.put_line(rowValue.name);-将取到的值打印,如果查询只有一个字段这里只需写变量名即可。 end loop; close rowList;-关闭游标 end;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。