oracle中的sql%found、sql%notfound、sql%rowcount和sql%isopen

来源:互联网 发布:php服务器 编辑:程序博客网 时间:2024/04/28 15:36

在执行

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

:该数字属性返回了到目前为止,游标所检索

数据库

行的个数。


0 0