Skip to content

隐式游标

在执行块语句或存储过程/函数的过程中,DML 语句会使用隐式游标,即:

  • 插入操作:INSERT
  • 更新操作:UPDATE
  • 删除操作:DELETE
  • 查询操作:SELECT ... INTO ...

当系统使用隐式游标时,可通过游标属性获取操作状态与结果,需注意的是游标属性只针对前一个DML操作或查询语句有效,所以若想正确获得游标属性需在执行DML或查询语句后立即使用。

隐式游标属性包括:

  • SQL%FOUND:返回一个布尔值,以指示隐式游标执行是否成功,当 DML 操作或单行查询语句执行成功该值为 TRUE,失败为 FALSE。

    说明:

    隐式游标语句执行前该属性值为NULL,而非FALSE。

  • SQL%NOTFOUND:与SQL%FOUND相反,当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE;当SQL%FOUND为FALSE时,SQL%NOTFOUND为TRUE。同理,在隐式游标执行前该值为NULL。

  • SQL%ROWCOUNT:前一DML语句或单行查询语句执行影响行数。

示例

更新test_cur表中id大于1的所有记录,将id增加1并输出受影响的行数。SQL%ROWCOUNT返回上一条DML语句影响的行数。

sql
-- 创建表并插入数据
SQL> CREATE TABLE test_cur(id INT,name VARCHAR(20));

SQL> INSERT INTO test_cur VALUES(1,'TEST1')(2,'TEST2')(3,'TEST3');

SQL> DECLARE
BEGIN
  UPDATE test_cur SET id = id + 1 WHERE id > 1;
  SEND_MSG('TOTAL UPDATE:' || SQL%ROWCOUNT || ' ROWS');
  ROLLBACK;
END;
/
-- 输出
TOTAL UPDATE:2 ROWS