金仓数据库KingbaseES隐式、显式游标
关键字:
KingbaseES、CURSOR、隐式游标、显式游标、人大金仓
游标
游标是指向私有SQL区域的指针,该区域存储有关处理特定SQL语句或PL/SQLSELECTINTO语句的信息。
游标的分类
根据创建者分为隐式游标和显式游标:
由系统创建并管理的游标是隐式游标。由用户创建并管理的游标是显式游标。
隐式游标
每次运行SELECT或DML语句时,PL/SQL都会打开一个隐式游标。注意的是,隐式游标是无法控制的,但可以从其属性中获取信息。
隐式游标属性值的语法是SQL%attribute(因此,隐式游标也称为SQL游标。)。SQL%attribute总是指最近运行的SELECT或DML语句。如果没有运行这样的语句,则SQL%attribute的值为NULL。隐式游标在其关联语句运行后关闭。但是,在另一个SELECT或DML语句运行之前,它的属性值仍然可用。最近运行的SELECT或DML语句可能在不同的范围内。要保存属性值以供以后使用,请立即将其分配给局部变量。否则,其他操作(例如子程序调用)可能会在您测试之前更改属性的值。
隐式游标属性:
- SQL%ISOPEN 属性:游标是否打开?
- SQL%FOUND 属性:是否有任何行受到影响?
- SQL%NOTFOUND 属性:没有行受到影响?
- SQL%ROWCOUNT 属性:有多少行受到影响?
- SQL%BULK_ROWCOUNT(请参阅 获取受 FORALL 语句影响的行数 )
- SQL%BULK_EXCEPTIONS(请参阅 FORALL 语句完成后处理 FORALL 异常 )
这些属性当中:
SQL%ISOPEN 属性总是是为false。因为隐式游标在select语句或者DML语句后会立即自动关闭,所以总是返回false。
示例演示:
SQL%FOUND 属性和SQL%NOTFOUND 属性的返回值是逻辑反义词。
示例演示:
SQL%ROWCOUNT:
如果没有运行 SELECT 或 DML 语句,则为 NULL
否则,SELECT 语句返回或受 DML 语句影响的行数(整数)
示例演示:
SQL%ROWCOUNT这个隐式游标属性一般用于确定已删除的行数。
SQL%BULK_ROWCOUNT也是现实影响的行数但是和SQL%ROWCOUNT的区别在于,他显示的是每个delete所影响的行数,而SQL%ROWCOUNT则是显示最后影响的总行数。将一个执行块中所有的SQL%BULK_ROWCOUNT相加就是SQL%ROWCOUNT。
示例演示:
显式游标
显式游标是用户构建和管理的会话游标。必须声明并定义一个显式游标,为其命名并将其与查询相关联(通常,查询返回多行),然后可以通过以下任一方式处理查询结果集:
- 打开显式游标(使用OPEN语句),
- 从结果集中获取行(使用FETCH语句),
- 然后关闭显式游标(使用CLOSE语句)。
- 在游标FOR LOOP语句中使用显式游标
值得注意的是: 不能为显式游标赋值、在表达式中使用它,或者将其用作正式的子程序参数,但是可以使用游标变量来执行这些操作。
显示游标的声明和使用已经在上一次《产品能力&实现原理-金仓数据库KingbaseES 游标介绍》这个文档中进行了详细的介绍,这里不再过多的赘述。