oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen
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相关推荐
- oracle dba_waiters中的lockid是什么,查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL...
查询Oracle中的阻塞锁(以及阻塞在哪个数据上)的SQL 数据库阻塞检查处理方法 当应用服务器发生阻塞时(特别是集群1),应先按下面方法检查数据库,以判明应用服务器阻塞是否由数据库阻塞引起. 如果 ...
- oracle中prad函数_024 SQL函数
1. 使用ORDER BY排序 (1) ORDER BY 子句的作用是什么? 用ORDER BY子句排序. 用于对结果集进行排序处理,提供了升序排序(ASC)与降序排序(DESC)如果不指定排序规则默 ...
- sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符
用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a 111 -- b 222 -- a ...
- oracle中角色和用户权限,Oracle用户、角色、权限管理
用户在会话的权利上,应该有其他操作的权利:Oracle的用户和口令不区分大小写,真是让人大跌眼镜:Oralce中,所有用户必须明确被 create or replace type address as ...
- java oracle to date_用TRUNC和TO_DATE截斷oracle中的java格式化日期()
當談到Oracle時,我並不是一個特別優秀的人,因爲我對數據庫的大部分經驗都來自SQL服務器.用TRUNC和TO_DATE截斷oracle中的java格式化日期() 我有一個java日期,我想轉換爲只 ...
- oracle substr(table),oracle中的substr()函数
SUBSTR(cExpression,nStartPosition [,nCharactersReturned]) 其中,cExpression指定要从其中返回字符串的字符表达式或备注字段: nSta ...
- mysql导出oracle_如何将mysql中的表结构导出放入oracle中
展开全部 将mysql中的表结构导出放入oracle中的方法: 1.导出mysql的表结构sql脚本,然后修改mysql中的数据类型为oracle中的数据类型: MySql与Oracle数据类型的62 ...
- oracle怎么声明nvl函数,[转载]Oracle中的NVL函数
Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...
- oracle中rowid列,Oracle中的rowid
ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是O ...
- Oracle中对空字符串的判断
目录 1.在Oracle中,将长度为零的字符值视为NULL 2.在PL/SQL中判断空字符串 2.1 使用nvl函数空值处理 2.2 使用is not null改写 写在最前面:在Oracle 11g ...
最新文章
- 从这篇YouTube论文,剖析强化学习在工业级场景推荐系统中的应用
- “艾妮”(ANI)蠕虫病毒
- Javascript 中变更Html标签label的文本
- c语言入门至精通(全集),C语言入门至精通(全集)知识讲解.ppt
- orcad如何设置模块化设计_充气膜结构送风设置设计以及通风效果如何呢?
- 淘宝登货员1.02(重要升级)
- CentOS7.5下搭建zabbix3.4监控
- jquery如何实现ajax技术,使用JavaScript和jQuery简单实现Ajax技术(示例代码)
- 华为卡槽打不开怎么办_17500元!华为5G折叠手机刷屏,有人焦虑连夜开会…
- 云开发无需服务期无需域名壁纸小程序源码
- ETDM:基于显式时间差分建模的视频超分辨率(CVPR 2022)
- struck在c语言中的作用,C语言-选择题及答案.doc
- 最小二乘法进行曲线拟合(Python)
- Docker网络基础---Docker跨主机容器访问通信
- 高等数学在计算机领域的应用,计算机专业高等数学应用性改革探索论文
- 注册界面模板HTML+CSS
- Python的IDLE无法打开
- 《会计学》简单的思维导图(第一版)
- FTT 海面模拟(DirectX11)
- 著名的菲波拉契(Fibonacci)数列,其第一项为0,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。