当执行一条dml语句后,dml语句的结果保存在四个游标属性中,这些属性用于控制程序流程或者了解程序的状态。当运行dml语句时,pl/
sql%found,sql%notfound,sql%rowcount
在执行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:该数字属性返回了到目前为止,游标所检索数据库行的个数。