在执行
DML
(
insert
,
update
,
delete
)语句时,可以用到以下三个隐式游标(游标是维护
查询结果的内存中的一个区域,运行
DML
时打开,完成时关闭,用
sql%isopen
检查是否打
开):
sql%found
(布尔类型,默认值为
null
)
sql%notfound
(布尔类型
,
默认值为
null
)
sql%rowcount(
数值类型默认值为
0)
sql%isopen(
布尔类型
)
当执行一条
DML
语句后,
DML
语句的结果保存在四个游标属性中,这些属性用于控制程序流
程或者了解程序的状态。当运行
DML
语句时,
PL/SQL
打开一个内建游标并处理结果,游标
是维护查询结果的内存中的一个区域,
游标在运行
DML
语句时打开,
完成后关闭。
隐式游标
只使用
SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT
三个属性
.SQL%FOUND,SQL%NOTFOUND
是布尔
值,
SQL%ROWCOUNT
是整数值。
SQL%FOUND
和
SQL%NOTFOUND
在执行任何
DML
语句前
SQL%FOUND
和
SQL%NOTFOUND
的值都是
NULL,
在执行
DML
语句后,
SQL%FOUND
的属性值将是:
. TRUE :INSERT
. TRUE :DELETE
和
UPDATE
,至少有一行被
DELETE
或
UPDATE.
. TRUE :SELECT INTO
至少返回一行
当
SQL%FOUND
为
TRUE
时
,SQL%NOTFOUND
为
FALSE
。
SQL%ROWCOUNT
在执行任何
DML
语句之前,
SQL%ROWCOUNT
的值都是
NULL,
对于
SELECT
INTO
语句,如果
执行成功,
SQL%ROWCOUNT
的值为
1,
如果没有成功或者没有操作
(
如
update
、
insert
、
delete
为
0
条),
SQL%ROWCOUNT
的值为
0.
SQL%ISOPEN
SQL%ISOPEN
是一个布尔值,如果游标打开,则为
TRUE,
如果游标关闭,则为
FALSE.
对
于隐式游标而言
SQL%ISOPEN
总是
FALSE
,这是因为隐式游标在
DML
语句执行时打开,结束
时就立即关闭。
no_data_found
与
sql%notfound
以及
sql%rowcount
的区别:
NO_DATA_FOUND
:该异常可以在两种不同的情况下出现:第一种:当
SELECT
。。。。
INTO
语的
WHERE
子句
没匹配任何数据行时;第二种:试图引用尚未赋值的
PL/SQL
index-by
表
元素时。
SQL%NOTFOUND
:是隐匿游标的属性,当没有可检索的数据时,该属性为:
TRUE
;常作为检索
循环退出的条件。若某
UPDATE
或
DELETE
语句的
WHERE
子句不匹配任何数据行,该属性为:
TRUE
,但不并不出现
NO_DATA_FOUND
异常
.
SQL%ROWCOUNT
:该数字属性返回了到目前为止,游标所检索
数据库
行的个数。