1.cursor定义
cursor 参数 is sql语句
在前面定义:

cursor list is select * from table;

2.cursor使用
在begin……end中使用

begin
	Open list;
	Close list; 
end;

注意:open cursor后一定要注意close cursor

3.对cursor游标数据每行使用(loop fetch使用)
定义:

cursor list is select * from table;
lis list%rowtype;  --定义lis 取list一行数据操作

%rowtype表示该类型为“行数据类型”,存储的是一行数据,一行数据里可以有多列,类似于表里的一行数据,也可以是游标里的一行数据。

Begin
	Open list;
		Loop fetch list into lis;
			……
			Exit when list%notfound; --退出循环
		End loop;
	Close list;
End;

用fetch来读取游标每一行数据,
使用fetch注意一定要加退出循环条件:Exit when 退出条件;
否则会陷入无限循环,循环到最后一条后,fetch又会从第一条数据开始抓取。
cursor%NOTFOUND
表示这个游标没有查到数据
–%FOUND – SQL语句影响了一行或多行时为 TRUE
–%NOTFOUND – SQL语句没有影响任何行时为TRUE
–%ROWCOUNT – SQL语句影响的行数
注:cursor%notfound有三种状态,true,false,null。如果游标是空游标,%NOTFOUND将为null . EXIT WHEN 条件不会计算为TRUE(null计算结果为false),然后,循环将永远持续下去,所以以后为了安全期间可以加上是否为空的判断:EXIT WHEN cursor%NOTFOUND OR cursor%NOTFOUND IS NULL;

4.对cursor游标批量数据处理(fetch BULK COLLECT)
定义:

cursor list is select * from table;
TYPE type_lis IS TABLE OF list%ROWTYPE INDEX BY BINARY_INTEGER;
lis type_lis;  --定义lis 是type_lis的数据
cn_batch_size constant pls_integer := 100;

说明:
– IS TABLE OF 指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型
– INDEX BY BINARY_INTEGER 指索引组织类型
– PLS_INTEGER是PLSQL环境中的一个特殊的数字类型,这种类型的值是通过硬件平台原生整数格式来表示的,PLS_INTEGER可以存储一个有符号的整形值,其精度范围和BINARY_INTEGER一样,是:-231~231

--接上面定义
Begin
	Open list;
	Loop
		fetch list BULK COLLECT into lis limit cn_batch_size;
		For i in 1.. lis.count loop
			……
		End loop;
		Commit;
		Exit when list.count < cn_batch_size ; --退出循环
	End loop;
	Close list;
End;

代码fetch list BULK COLLECT into lis limit cn_batch_size; 就是把list中的数据取cn_batch_size(这里为100条)数据赋给lis,再用for循环一条一条处理lis中的数据

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐