sql%rowcount用于记录修改的条数,就如你在sqlplus下执行delete from之后提示已删除xx行一样, 这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修改行数。
例如:
SQL> declare n number;
  2  begin
  3  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  /
499

PL/SQL procedure successfully completed.
SQL> declare n number;
  2  begin
  3  insert into test_a select level lv from dual connect by level<500;
  4  commit;
  5  n:=sql%rowcount;
  6  dbms_output.put_line(n);
  7  end;
  8  /
如果我连续执行了3个select语句
然后调用sql%rowcount,得到的结果是最后一个select的条数。  要统计所有的,可以使用三个变量接收sql%rowcount,然后相加即可,不过貌似直接select的写法无法使用sql%rowcount。

以下转自

http://www.eygle.com/archives/2005/04/oracleoeouaeeae.html

测试过Delete和For all两种方法,for all在这里并没有带来性能提高,所以仍然选择了批量直接删除。

create or replace procedure delBigTab(p_TableName in varchar2,
                                      p_Condition in varchar2,
                                      p_Count     in varchar2)
aspragma autonomous_transaction;
 n_delete number := 0;
  begin
    while 1 = 1 loopEXECUTE IMMEDIATE 'delete from ' || p_TableName || ' where ' || p_Condition || ' and rownum <= :rn' USING p_Count;
     if SQL%NOTFOUND thenexit; elsen_delete := n_delete + SQL%ROWCOUNT;
end if;
 commit;
end loop;
 commit;
  DBMS_OUTPUT.PUT_LINE('Finished!'); DBMS_OUTPUT.PUT_LINE('Totally ' || to_char(n_delete) || ' records deleted!');
end;

以下是删除过程及时间:

SQL> create or replace procedure delBigTab2  (3    p_TableName       in    varchar2,4    p_Condition       in    varchar2,5    p_Count        in    varchar26  )7  as8   pragma autonomous_transaction;9   n_delete number:=0;10  begin11   while 1=1 loop12     EXECUTE IMMEDIATE13       'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'14     USING p_Count;15     if SQL%NOTFOUND then16        exit;17     else18              n_delete:=n_delete + SQL%ROWCOUNT;19     end if;20     commit;21   end loop;22   commit;23   DBMS_OUTPUT.PUT_LINE('Finished!');24   DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');25  end;26  /Procedure created.SQL> set timing on
SQL> select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;MIN(NUMDLFLOGGUID)
------------------11000000Elapsed: 00:00:00.23
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11100000','10000');PL/SQL procedure successfully completed.Elapsed: 00:00:18.54
SQL> select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;MIN(NUMDLFLOGGUID)
------------------11100000Elapsed: 00:00:00.18
SQL> set serveroutput on
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11200000','10000');
Finished!
Totally 96936 records deleted!PL/SQL procedure successfully completed.Elapsed: 00:00:18.61
10万记录大约19sSQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11300000','10000');
Finished!
Totally 100000 records deleted!PL/SQL procedure successfully completed.Elapsed: 00:00:18.62
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11400000','10000');
Finished!
Totally 100000 records deleted!PL/SQL procedure successfully completed.Elapsed: 00:00:18.85
SQL>
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 13000000','10000');
Finished!
Totally 1000000 records deleted!PL/SQL procedure successfully completed.Elapsed: 00:03:13.87100万记录大约3分钟
SQL> exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 20000000','10000');Finished!
Totally 6999977 records deleted!PL/SQL procedure successfully completed.Elapsed: 00:27:24.69
700万大约27分钟以上过程仅供参考.

sql%rowcount相关推荐

  1. oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen

    Oracle 存储过程 删除表记录时删除不存在的记录也是显示删除成功 create or replace procedure delDept(p_deptno in dept.deptno%type) ...

  2. oracle中的sql%rowcount

    sql%rowcount中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据. 如果是delete操作rowcount就是delete的数据,如果是in ...

  3. sql%rowcount转mysql_Oracle光速入门二 ——马士兵Oracle视频讲义笔记

    其实Oracle的管理没传说中那么难,刚到地税局搞运维,我基本就不会Oracle,仅仅熟悉MySQL,这东西听听课,只要笔记做得好,根本不用往脑子里记,用的时候翻出来照着颜色往上敲,就这么简单,又不是 ...

  4. oracle中 sql%rowcount 用法

    sql%rowcount用于记录修改的条数,必须放在一个更新或者删除等修改类语句后面执行,select语句用于查询的话无法使用, 当你执行多条修改语句时,按照sql%rowcount 之前执行的最后一 ...

  5. oracle sql%rowcount 返回影响行数

    sqlserver中,返回影响行数是:If @@RowCount<1 oracle中,返回影响行数是:If sql%rowcount<1 例: sqlserver: AS BEGIN Up ...

  6. SQL中的sql%rowcount

    sql%rowcount 的作用:记录修改的条数,当你进行删除,更新操作的时候,可以提示已删除\更新的行数,这个参数放在修改语句和commit之间 例如: SQL> declare v_coun ...

  7. SQL%BULK_ROWCOUNT 和SQL%ROWCOUNT的区别

    sql%rowcount中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据.这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修 ...

  8. oracle rowcount(),oracle 之 sql%rowcount 查看受影响的记录行数

    sql%rowcount必须在commit或者rollback之前 create or replace procedure t_ts(TABLE_NAME VARCHAR2) AS n     num ...

  9. oracle存储过程rowcount用法,oracle中的sql%rowcount,sql%found、sql%notfound、sql%rowcount和sql%isopen...

    sql%rowcount用于记录修改的条数,就如你在sqlplus下执行delete from之后提示已删除xx行一样,这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修改行数 ...

最新文章

  1. 超级实用的linux 下shell快捷键汇总
  2. 帝国cms7.5多终端刷新单条内容信息时不起作用的解决方法
  3. C++中的yield和fork
  4. IE8中HTTP连接数目的变化
  5. yolov4论文_YOLOv4论文详细解读
  6. python面试题总结(2)--编码规范
  7. oracle更新blol字段超长,oracle - 将对象值插入表PL / SQL而无需指定属性 - 堆栈内存溢出...
  8. JVM初学之堆的内存模型
  9. CKEditor 4.14 发布,支持复制粘贴 LibreOffice 文档
  10. 转载 Assert断言知识
  11. 深度学习入门——波士顿房价预测
  12. 使用javamail通过代理发送邮件
  13. ggplot2图集汇总(一)
  14. 管理感情:工作犯错了,不要狡辩,不要把错误推到别人身上
  15. 电脑蓝屏0x0000006B不重装系统的解决办法
  16. JS设计模式与开发实践
  17. 【计算机网络】网络层(六)—— IP组播与移动IP
  18. vmgsim 完整好用已经测试REFORM-3PC
  19. PyG搭建GCN实现链接预测
  20. 感谢在俄勒冈州Develo的SAOs软件协会参加我的演讲“音乐背后的Web服务”的所有人...

热门文章

  1. 关于ESM Flag问题
  2. 哈理工计算机学院学生会技术部,信息技术学院、软件学院学生会各部门工作职责...
  3. 《我是科比》—科比在湖人成长记录
  4. 一维谐振子定态 Schrödinger 方程的数值解法
  5. 关机时没有退出clash代理,导致重启后浏览器无法访问网页
  6. Linux效劳器装机平安疾速进阶指南(5)
  7. 王码五笔输入教程(转自电脑报)
  8. 7-58 计算油费 (15 分)
  9. OSV 智能桌面虚拟化_教育桌面云解决方案
  10. Bpl的使用以及与Dll的区别