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

news/2024/7/7 21:28:59
Oracle 存储过程 删除表记录时删除不存在的记录也是显示删除成功
create or replace procedure delDept(p_deptno in dept.deptno%type) is
begindelete from dept where deptno=p_deptno;dbms_output.put_line('部门删除成功...');exception when others thendbms_output.put_line('部门删除失败...');
end;
删除不存在的数据并不会促发Oracle的异常
对于delete from dept where deptno=p_deptno;
判断是否有数据被删除可以用sql%rowcount,sql%notfound 来判断
  if sql%rowcount = 0 thendbms_output.put_line('部门删除失败...');end if;或者if sql%notfound thendbms_output.put_line('部门删除失败...');end if;create or replace procedure delDept(p_deptno in dept.deptno%type) is
EmpCount    NUMBER; --影响的记录数
begindelete from dept where deptno=p_deptno;EmpCount := SQL%ROWCOUNT;if(EmpCount <>0)thendbms_output.put_line('部门删除成功...');exception when others thendbms_output.put_line('部门删除失败...');
end;

 

sql%rowcount用于记录修改的条数,就如你在sqlplus下执行delete from之后提示已删除xx行一样,这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修改行数。

例如:

SQL> declare n number;2  begin3  insert into test_a select level lv from dual connect by level<500;4  n:=sql%rowcount;5  commit;6  dbms_output.put_line(n);7  end;8  /

如果我连续执行了3个select语句
然后调用sql%rowcount,得到的结果是最后一个select的条数。  要统计所有的,可以使用三个变量接收sql%rowcount,然后相加即可,不过貌似直接select的写法无法使用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:该数字属性返回了到目前为止,游标所检索数据库行的个数。


http://lihuaxi.xjx100.cn/news/257915.html

相关文章

AJAX范例大搜罗(转载)

1&#xff0e;每天一个AJAX 该网站提供了很多非常酷的AJAX例子&#xff0c;号称是每天更新一个。 网址&#xff1a;http://www.ajaxcompilation.com/ 2&#xff0e;210个AJAX框架 一个不错的提供Ajax范例的网站&#xff0c;Ajax框架已更新至210个。 网址&#xff1a;http:…

为什么贝叶斯统计如此重要?

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 译者&#xff1a;张峰&#xff0c;Datawhale成员即使对于一个非数据科学家来说&#xff0c;贝叶斯统计这个术语也已经很流行了。你可能在大学期间把它作为必修课之一来学习&…

用不惯VMware?试试这款更轻量级的虚拟机!

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典说起虚拟机工具大家最熟悉的自然是 VMware&#xff0c;功能很多很强大&#xff0c;最让我认可的地方就是可以非常方便的修改虚拟机的配置&#xff0c;让虚拟机达到自己想要的性能&#xff5e;&#xff5e;可是 VMware 好…

地球超2亿蛋白质结构全预测,AlphaFold引爆「蛋白质全宇宙」!

视学算法报道 编辑&#xff1a;拉燕 Aeneas 如願 桃子【导读】今天&#xff0c;AlphaFold又让学术界沸腾了。DeepMind官宣&#xff0c;AlphaFold可以预测出2亿多个蛋白质结构&#xff0c;几乎覆盖了整个「蛋白质宇宙」。今天&#xff0c;DeepMind再次引爆学术界&#xff01;Al…

Zookeeper源码分析:主从角色关系流程概述

参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0主从关系概述 在概述了主从角色的初始化流程之后&#xff0c;本文主要来梳理分析一下Zookeeper服务端的逻辑关系&#xff0c;包括选举的情况的分析&#xff0c;客户端数据与服务端的数据交…

JVM GC 垃圾回收(二)之 判断那些可回收,怎么回收

1、哪些对象可回收&#xff1f; 可行性分析算法 通过一系列GC Roots&#xff08;1&#xff09;作为起始点&#xff0c;其到对象之间的引用&#xff08;2&#xff09;称为引用链&#xff0c;当对象到GC Roots之间不存在引用链相连&#xff0c; 则此对象是不可用的。如下&#xf…

如何制作风格迁移图?

本微信图文介绍了实现风格迁移图的基本原理并在此基础上制作了效果展示图。

AI 帮忙找 Bug ,英特尔开源代码编程工具 ControlFlag

整理 | 孙胜出品 | CSDN近日&#xff0c;英特尔开源了自动代码调试工具 ControlFlag 源代码&#xff0c;ControlFlag 源码现在可通过 GitHub 获得。据了解&#xff0c;ControlFlag 可用来帮助更多开发者自主检测代码错误&#xff0c;主要利用 AI 自动识别软件和固件代码中的错误…