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:该数字属性返回了到目前为止,游标所检索数据库行的个数。

oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen相关推荐

  1. oracle dba_waiters中的lockid是什么,查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL...

    查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL 数据库阻塞检查处理方法 当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起. 如果 ...

  2. oracle中prad函数_024 SQL函数

    1. 使用ORDER BY排序 (1) ORDER BY 子句的作用是什么? 用ORDER BY子句排序. 用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序(DESC)如果不指定排序规则默 ...

  3. sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符

    用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a   111 -- b   222 -- a   ...

  4. oracle中角色和用户权限,Oracle用户、角色、权限管理

    用户在会话的权利上,应该有其他操作的权利:Oracle的用户和口令不区分大小写,真是让人大跌眼镜:Oralce中,所有用户必须明确被 create or replace type address as ...

  5. java oracle to date_用TRUNC和TO_DATE截斷oracle中的java格式化日期()

    當談到Oracle時,我並不是一個特別優秀的人,因爲我對數據庫的大部分經驗都來自SQL服務器.用TRUNC和TO_DATE截斷oracle中的java格式化日期() 我有一個java日期,我想轉換爲只 ...

  6. oracle substr(table),oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned]) 其中,cExpression指定要从其中返回字符串的字符表达式或备注字段: nSta ...

  7. mysql导出oracle_如何将mysql中的表结构导出放入oracle中

    展开全部 将mysql中的表结构导出放入oracle中的方法: 1.导出mysql的表结构sql脚本,然后修改mysql中的数据类型为oracle中的数据类型: MySql与Oracle数据类型的62 ...

  8. oracle怎么声明nvl函数,[转载]Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  9. oracle中rowid列,Oracle中的rowid

    ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...

  10. Oracle中对空字符串的判断

    目录 1.在Oracle中,将长度为零的字符值视为NULL 2.在PL/SQL中判断空字符串 2.1 使用nvl函数空值处理 2.2 使用is not null改写 写在最前面:在Oracle 11g ...

最新文章

  1. 从这篇YouTube论文,剖析强化学习在工业级场景推荐系统中的应用
  2. “艾妮”(ANI)蠕虫病毒
  3. Javascript 中变更Html标签label的文本
  4. c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
  5. orcad如何设置模块化设计_充气膜结构送风设置设计以及通风效果如何呢?
  6. 淘宝登货员1.02(重要升级)
  7. CentOS7.5下搭建zabbix3.4监控
  8. jquery如何实现ajax技术,使用JavaScript和jQuery简单实现Ajax技术(示例代码)
  9. 华为卡槽打不开怎么办_17500元!华为5G折叠手机刷屏,有人焦虑连夜开会…
  10. 云开发无需服务期无需域名壁纸小程序源码
  11. ETDM:基于显式时间差分建模的视频超分辨率(CVPR 2022)
  12. struck在c语言中的作用,C语言-选择题及答案.doc
  13. 最小二乘法进行曲线拟合(Python)
  14. Docker网络基础---Docker跨主机容器访问通信
  15. 高等数学在计算机领域的应用,计算机专业高等数学应用性改革探索论文
  16. 注册界面模板HTML+CSS
  17. Python的IDLE无法打开
  18. 《会计学》简单的思维导图(第一版)
  19. FTT 海面模拟(DirectX11)
  20. 著名的菲波拉契(Fibonacci)数列,其第一项为0,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。

热门文章

  1. Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer
  2. Chrome使用技巧和编辑框拖动怪问题。
  3. 2008找回企业久违的网速
  4. 36.intellij idea 如何一键清除所有断点
  5. 《数学建模:基于R》一一2.2 方差分析
  6. js 闭包 实战1
  7. HTML5 canvas处理图片的各种效果,包括放大缩小涂鸦等
  8. android读取大图片并缓存
  9. Fedora下配置网卡
  10. javascript断点调试方法