隐式游标
在执行块语句或存储过程/函数的过程中,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