关键字:
KingbaseES 、游标属性 、游标使用、人大金仓
游标概述
PL/SQL游标允许我们封装一个查询,然后每次处理结果集中的一条记录。游标可以将大结果集拆分成许多小的记录,避免内存溢出。此外,我们可以定义一个返回游标引用的函数,然后调用程序可以基于这个引用处理返回的结果集,例如:dbms_xmlgen系统包的上下文句柄实质上就是一个游标。
游标属性
游标分为隐式游标和显式游标。隐式游标是由 PL/SQL 构造和管理的会话游标。每次运行 SELECT 或 DML 语句时,PL/SQL 都会打开一个隐式游标。您无法控制隐式游标,但可以从其属性中获取信息。隐式游标的常用属性为:
- SQL%ISOPEN 属性:游标是否打开?
- SQL%FOUND 属性:是否有任何行受到影响?
- SQL%NOTFOUND 属性:没有行受到影响?
- SQL%ROWCOUNT 属性:有多少行受到影响?
显式游标是用户构建和管理的会话游标。您必须声明并定义一个显式游标,为其命名并将其与查询相关联(通常,查询返回多行)。显式游标的属性和隐式游标相同,只是表示形式变为:游标名%不同属性。
游标使用
- 使用步骤:
- 声明和定义一个游标
- 打开一个游标
- 从结果集抓取行到游标
- 检查是否还有行需要抓取,如果是返回第三步执行抓取,如果不是,执行第五条
- 关闭游标
- 语法:
- 声明和定义游标
- CURSOR c1 RETURN student%ROWTYPE; -- 声明 c1
- CURSOR c2 IS SELECT id, name, score FROM student; -- 声明和定义 c2
- CURSOR c1 RETURN student%ROWTYPE IS SELECT * FROM student WHERE id = 1;-- 定义时带 return type
-
打开游标
- 打开未绑定的游标
open 游标名 for select * from 表格名[where 条件];
-
- 打开已绑定的游标
open 游标名;
- 游标使用
LOOP
FETCH 游标名 INTO 变量名;
EXIT WHEN 游标名%NOTFOUND;
RAISE NOTICE '变量= %', 变量;
END LOOP;
- 关闭游标
close 游标名;
- 举例
test=# \set SQLTERM /
test=# DECLARE
test-# name text;
test-# CURSOR c1 IS SELECT * FROM test1;
test-# BEGIN
test-# OPEN c1;
test-# LOOP
test-# FETCH c1 INTO name;
test-# EXIT WHEN c1%NOTFOUND;
test-# RAISE NOTICE 'name = %', name;
test-# END LOOP;
test-# CLOSE c1;
test-# END;
test-# /
注意: name = 1
注意: name = 2
注意: name = 3
ANONYMOUS BLOCK
参考资料
KingbaseES_PLSQL过程语言参考手册.pdf