说明:

%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. RabbitMQ(二):理解消息通信RabbitMQ

    原文:RabbitMQ(二):理解消息通信RabbitMQ 一.消费者.生产者和信道 生产者(producer):生产者创建消息,然后发布(发送)到代理服务器(RabbitMQ),可以说发送消息的程序 ...

  2. 仙人掌&圆方树

    仙人掌&圆方树 Tags:图论 [x] [luogu4320]道路相遇 https://www.luogu.org/problemnew/show/P4320 [ ] [SDOI2018]战略 ...

  3. 5-[HTML]-body常用标签2

    1.表格标签 table 表格由<table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由<td>标签定义).字母 td ...

  4. Webpack之Code Splitting 代码分块

    如何实现代码分块 默认情况webpack会将资源文件打包成一个js文件,比如app.bundle.js 实际情况我们需要按需加载 方法如下: require.ensure(dependencies, ...

  5. Laravel 跨框架队列交互

    公司大部分项目是laravel框架,但有些是yii框架,这两个框架之间有消息需要通信,比如在yii框架发布消息,laravel框架中的队列去处理,用redis作为消息连接纽带 laravel 队列原理 ...

  6. 【Java字符序列】Pattern

    简介 Pattern,正则表达式的编译表示,操作字符序列的利器. 整个Pattern是一个树形结构(对应于表达式中的‘|’),一般为链表结构,树(链表)的基本元素是Node结点,Node有各种各样的子 ...

  7. 关于big-endian和little-endian

    详解大端模式和小端模式 一.大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个 ...

  8. 网易公开课[一万分钟]《office办公达人养成计划》

    note: Shift表示移动 Ctrl表示复制 Excel: 快速选中单元格: 选中表格左上角Ctrl+A Ctrl+方向键,跳到行或列的尽头 Ctrl+Shift+方向键,选中一行或一列 Shif ...

  9. dbutis事务管理

    1.在dao层用dbutils实现事务管理 //从a--->b帐户转100元 public void transfer() throws SQLException{ Connection con ...

  10. Analysis 图标分析 - loadrunner

    analysis常见 /