说明:

%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 的使用的更多相关文章

  1. SQL Server中@@ROWCOUNT的用法

    SQL Server中@@ROWCOUNT返回受上一语句影响的行数,返回值类型为 int 整型. 如果行数大于 20 亿,则需要使用 ROWCOUNT_BIG. @@ROWCOUNT和@@ERROR变 ...

  2. [转载]Oracle数据库 sql%found,sql%notfound,sql%rowcount

    sql%found,sql%notfound,sql%rowcount 在执行DML(insert,update,delete)语句时,可以用到以下三个隐式游标(游标是维护查询结果的内存中的一个区域, ...

  3. sql%found sql%notfound sql%rowcount sql%isopen

    原文引入:http://blog.csdn.net/mh942408056/article/details/6949325 sql%found sql%notfound sql%rowcount sq ...

  4. SQL PL/SQL语法手册

    SQL  PL/SQL语法手册 目   录 第一部分  SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...

  5. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  6. SQL Server SQL分页查询

    SQL Server SQL分页查询的几种方式 目录 0.    序言 1.    TOP…NOT IN… 2.    ROW_NUMBER() 3.    OFFSET…FETCH 4.    执行 ...

  7. pl/sql和sql的区别

    源地址:https://zhidao.baidu.com/question/187511430.html 1 sql(数据定义语言) 和PL/Sql的区别:答:SQL是结构化查询语言,比较接近自然语言 ...

  8. 对SQL Server SQL语句进行优化的10个原则

    1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大 ...

  9. PL/SQL --> 动态SQL调用包中函数或过程

    动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包 ...

随机推荐

  1. PyQt5 笔记(01):嵌套布局

    PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局, ...

  2. 4538: [Hnoi2016]网络

    4538: [Hnoi2016]网络 链接 分析: 整体二分. 对于一次操作,可以二分一个答案mid,判断权值大于mid的路径是否全部经过这个点.如果是 ,那么这次询问的答案在[l,mid-1]之间, ...

  3. lambda取两字符串的交集

    取两个有规律字符串的交集,字符串的格式如下: “[3095139,9080109]” jar支持: fastjson 程序demo: import com.alibaba.fastjson.JSON; ...

  4. JAVA的关键特性

    Java团队对设计Java时的关键考虑因素进行了总结,关键特性包含以下列表: 简单性 安全性 可移植性 面向对象 健壮性 多线程 体系结构中立 解释执行 高性能 分布式 动态性 简单性 Java的设计 ...

  5. linux下查看端口是否被占用以及查看所有端口

    1.查看服务器端口是否被占用 >lsof  -i:8081 2.查看服务器所有端口 >netstat -ntlp 3.查看服务器是否开放某端口 tcp端口:>netstat -ntp ...

  6. Unity Shader 学习之旅之SurfaceShader

    Unity Shader 学习之旅之SurfaceShader unity shader 图形图像  如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...

  7. oracle存储过程 关于update的动态SQL-工作心得

    本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 12 月 20 日 原地址:https://niaobulashi.com/archives/oracle-procedure ...

  8. 快手hr面

    快手hr面 20180918 自我介绍 hr部门介绍 效率工程 主要问题 问我对部门是否有感兴趣? 我要求地点在北京,然后就畅聊口音.老家,学校等 学校的成绩?(研究生.本科) 自己属于哪类学生?(属 ...

  9. Linux(Contos7.5)环境搭建之JDK1.8安装(二)

    1.下载安装包 wget -p 目录 url包地址 2.解压安装包 tar -xzvf  文件 -C 指定目录 3.修改名称 mv jdk1.8.0_45 jdk1.8 4.配置环境变量 vim /e ...

  10. 记一次centos6升级salt-minion启动失败的问题

    记一次centos6升级salt-minion启动失败的问题 作者:耀耀 blog:https://www.liuyao.me 一.起因 升级Salt-minion后 使用/etc/init.d/sa ...