人大金仓数据库KingbaseES 游标的介绍与使用

154 阅读2分钟

关键字:

KingbaseES 、游标属性 、游标使用、人大金仓

游标概述

PL/SQL游标允许我们封装一个查询,然后每次处理结果集中的一条记录。游标可以将大结果集拆分成许多小的记录,避免内存溢出。此外,我们可以定义一个返回游标引用的函数,然后调用程序可以基于这个引用处理返回的结果集,例如:dbms_xmlgen系统包的上下文句柄实质上就是一个游标。

游标属性

游标分为隐式游标和显式游标。隐式游标是由 PL/SQL 构造和管理的会话游标。每次运行 SELECT 或 DML 语句时,PL/SQL 都会打开一个隐式游标。您无法控制隐式游标,但可以从其属性中获取信息。隐式游标的常用属性为:

  • SQL%ISOPEN 属性:游标是否打开?
  • SQL%FOUND 属性:是否有任何行受到影响?
  • SQL%NOTFOUND 属性:没有行受到影响?
  • SQL%ROWCOUNT 属性:有多少行受到影响?

显式游标是用户构建和管理的会话游标。您必须声明并定义一个显式游标,为其命名并将其与查询相关联(通常,查询返回多行)。显式游标的属性和隐式游标相同,只是表示形式变为:游标名%不同属性。

游标使用

  1. 使用步骤:
  2. 声明和定义一个游标
  3. 打开一个游标
  4. 从结果集抓取行到游标
  5. 检查是否还有行需要抓取,如果是返回第三步执行抓取,如果不是,执行第五条
  6. 关闭游标
  7. 语法:
  8. 声明和定义游标
  • 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
  1. 打开游标

    • 打开未绑定的游标

open 游标名 for select * from 表格名[where 条件];

    • 打开已绑定的游标

open 游标名;

  1. 游标使用

LOOP

FETCH 游标名 INTO 变量名;

EXIT WHEN 游标名%NOTFOUND;

RAISE NOTICE '变量= %', 变量;

END LOOP;

  1. 关闭游标

close 游标名;

  1. 举例

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