sql%bulk_rowcount && sql%rowcount 的使用
说明:
%BULK_ROWCOUNT 属性计算FORALL迭代影响行数
在进行SQL数据操作语句时,SQL引擎打开一个隐式游标(命名为SQL),该游标的标量属性(scalar attribute)有 %FOUND, %ISOPEN, %NOTFOUND, and %ROWCOUNT。
FORALL语句除具有上边的标量属性外,还有个复合属性(composite attribute):%BULK_ROWCOUNT,该属性具有索引表(index-by table)语法。它的第i个元素存贮SQL语句(INSERT, UPDATE或DELETE)第i个执行的处理行数。如果第i个执行未影响行,%bulk_rowcount (i),返回0。FORALL与%bulk_rowcount属性使用相同下标
--%bulk_rowcount 代码 :
/*
drop table TESTT ;
CREATE TABLE TESTT(TID varchar2(100)) ;
TRUNCATE TABLE TESTT ;
SELECT * FROM TESTT ; */ DECLARE
type stp_index is table of sys_product.productcode%type;
--idx_tab stp_index :=number_index(null) ;
idx_tab stp_index;
cursor cur_stp is
select productcode pcode from sys_product; BEGIN
----新增
open cur_stp;
loop
fetch cur_stp bulk collect
into idx_tab;
exit when cur_stp%notfound;
end loop;
close cur_stp ;
forall cur in idx_tab.first .. idx_tab.last
insert into testt values (idx_tab(cur));
dbms_output.put_line('insert --------------' ||sql%rowcount);
for i in idx_tab.first .. idx_tab.count loop
dbms_output.put_line(idx_tab(i)||' insert 受影响行为 ' || sql%bulk_rowcount(i)||' 行 !');
end loop;
COMMIT;
--修改
forall cur in idx_tab.first .. idx_tab.last
update testt set tid=idx_tab(cur)||' % ' where tid=idx_tab(cur);
dbms_output.put_line('update --------------' ||sql%rowcount);
for i in idx_tab.first .. idx_tab.count loop
dbms_output.put_line(idx_tab(i)||' update 受影响行为 ' || sql%bulk_rowcount(i)||' 行 ! '|| sql%rowcount);
end loop;
END;
---结果:
insert --------------19
GFWD insert 受影响行为 1 行 !
GOPTION insert 受影响行为 1 行 !
NCD insert 受影响行为 1 行 !
GLS insert 受影响行为 1 行 !
IBO insert 受影响行为 1 行 !
REPO insert 受影响行为 1 行 !
OBPO insert 受影响行为 1 行 !
BSD insert 受影响行为 1 行 !
DEPO insert 受影响行为 1 行 !
IRS insert 受影响行为 1 行 !
FXSWAP insert 受影响行为 1 行 !
FRA insert 受影响行为 1 行 !
IBL insert 受影响行为 1 行 !
FXFWD insert 受影响行为 1 行 !
CCS insert 受影响行为 1 行 !
FXOPTION insert 受影响行为 1 行 !
GSWAP insert 受影响行为 1 行 !
BSDC insert 受影响行为 1 行 !
CI insert 受影响行为 1 行 !
update --------------19
GFWD update 受影响行为 1 行 ! 19
GOPTION update 受影响行为 1 行 ! 19
NCD update 受影响行为 1 行 ! 19
GLS update 受影响行为 1 行 ! 19
IBO update 受影响行为 1 行 ! 19
REPO update 受影响行为 1 行 ! 19
OBPO update 受影响行为 1 行 ! 19
BSD update 受影响行为 1 行 ! 19
DEPO update 受影响行为 1 行 ! 19
IRS update 受影响行为 1 行 ! 19
FXSWAP update 受影响行为 1 行 ! 19
FRA update 受影响行为 1 行 ! 19
IBL update 受影响行为 1 行 ! 19
FXFWD update 受影响行为 1 行 ! 19
CCS update 受影响行为 1 行 ! 19
FXOPTION update 受影响行为 1 行 ! 19
GSWAP update 受影响行为 1 行 ! 19
BSDC update 受影响行为 1 行 ! 19
CI update 受影响行为 1 行 ! 19
--sql%rowcount && cursor%rowcount ;
declare
cursor cur_stp is
select s.productcode pcode from sys_product s;
TID varchar2(100);
begin
open cur_stp;
dbms_output.put_Line('0_cur_stp%rowcount='||cur_stp%rowcount);
loop
fetch cur_stp
into tid;
--注意这里没有换行;
dbms_output.put(cur_stp%rowcount||' '); --'0~19'
exit when cur_stp%notfound;
end loop;
--放到游标里面和外面的区别;
dbms_output.put_Line('sql%rowcount=' || sql%rowcount);
dbms_output.put_Line('1_cur_stp%rowcount=' || cur_stp%rowcount);
close cur_stp; for i in cur_stp loop
dbms_output.put_Line(cur_stp%rowcount || '--' || i.pcode);
end loop;
--放到底部的话会 抛错 :无效的游标; dbms_output.put_Line(cur_stp%rowcount);
end;
--结果:
0_cur_stp%rowcount=0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 19 sql%rowcount=
1_cur_stp%rowcount=19
1--GFWD
2--GOPTION
3--NCD
4--GLS
5--IBO
6--REPO
7--OBPO
8--BSD
9--DEPO
10--IRS
11--FXSWAP
12--FRA
13--IBL
14--FXFWD
15--CCS
16--FXOPTION
17--GSWAP
18--BSDC
19--CI
sql%bulk_rowcount && sql%rowcount 的使用的更多相关文章
- SQL Server中@@ROWCOUNT的用法
SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...
- [转载]Oracle数据库 sql%found,sql%notfound,sql%rowcount
sql%found,sql%notfound,sql%rowcount 在执行DML(insert,update,delete)语句时,可以用到以下三个隐式游标(游标是维护查询结果的内存中的一个区域, ...
- sql%found sql%notfound sql%rowcount sql%isopen
原文引入:http://blog.csdn.net/mh942408056/article/details/6949325 sql%found sql%notfound sql%rowcount sq ...
- SQL PL/SQL语法手册
SQL PL/SQL语法手册 目 录 第一部分 SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- SQL Server SQL分页查询
SQL Server SQL分页查询的几种方式 目录 0. 序言 1. TOP…NOT IN… 2. ROW_NUMBER() 3. OFFSET…FETCH 4. 执行 ...
- pl/sql和sql的区别
源地址:https://zhidao.baidu.com/question/187511430.html 1 sql(数据定义语言) 和PL/Sql的区别:答:SQL是结构化查询语言,比较接近自然语言 ...
- 对SQL Server SQL语句进行优化的10个原则
1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大 ...
- PL/SQL --> 动态SQL调用包中函数或过程
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...
随机推荐
- 【TJOI2017】DNA
题面 题解 对字符串一脸懵的我肯定只能用$FFT$这种暴力方法水过啊... 将后面那个字符串翻转一下,对$\text{AGCT}$分别统计,用$FFT$就可以啦 代码 #include<cstd ...
- mysql好用的函数
FIND_IN_SET 用法示意: INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin'); INSERT INTO `test` ...
- 传统路由和OVS区别
本文主要描述了一种将三层路由变成二层交换转发(以及二层转发变成三层路由)的实现方式,以应对OVS(OpenFlow)跨网段路由复杂的问题:当然技术本身是客观的,具体应用还要看场景. 随着SDN技术不断 ...
- 办公区公网Ip访问不到阿里云ECS
办公区公网Ip访问不到阿里云ECS 工作中遇见这样的问题, Hadoop 部署在办公区内网, 而应用有些的数据在阿里云ECS主机中,现在hadoop 访问ECS 却访问不到ESC ,最终电话咨询阿里云 ...
- django套用模板404报错小结
首先,我的项目名是MyProject.每次当我运行,然后测试页面的时候,总是弹出 其实根据stackoverflow上某大佬的解释大意就是在setting.py和urls.py的匹配上出了问题 此处放 ...
- flask入门补充
在上篇文章提到了json的编码问题.那么Flask是国外开发的框架,没有考虑到中文编码,那么我们就需要自己配置 那么在访问页面的时候会有 get 请求和post 请求.在下边我也会提到.以及没有接触 ...
- SURF算法的一篇翻译与论证
原文地址:http://www.sohu.com/a/157742015_715754 SURF: Speeded Up Robust Features 摘要 本文提出了一种新型的具有尺度和旋转不变特 ...
- Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用
Netty源码分析第一章:Netty启动流程 第四节:注册多路复用 回顾下以上的小节, 我们知道了channel的的创建和初始化过程, 那么channel是如何注册到selector中的呢?我们继 ...
- Python基础系列讲解——TCP协议的socket编程
前言 我们知道TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像HTTP/HTTPS等网络服务都采用TCP ...
- 2-Third Scrum Meeting-20151203
任务安排 闫昊: 今日完成:请假.(编译+计组,压力有点大) 明日任务:设计本地数据库. 唐彬: 今日完成:请假.(编译+计组,压力有点大) 明日任务:阅读ios客户端代码. 史烨轩: 今日完成:请假 ...