如何获取MERGE操作中UPDATE行数和INSERT行数

php中文网
发布: 2016-06-07 17:17:57
原创
1343人浏览过

在进行MERGE操作的时候,如何取得更新的行数和插入的行数?

在进行merge操作的时候,如何取得更新的行数和插入的行数?
 
首先创建测试表如下:
create table emp_source as 
select * from emp;       -- 14 rows
 
create table emp_target as 
select * from emp_source where rownum     -- 8 rows
 
创建用于获取插入行数的包:
create or replace package merge_demo as
  function merge_counter return pls_integer;
  function get_merge_insert_count return pls_integer;
  procedure reset_counters;
end merge_demo;
/
 
create or replace package body merge_demo as
  g_insert_counter pls_integer not null := 0;
 
  function merge_counter return pls_integer is
  begin
        g_insert_counter := g_insert_counter + 1;--注意:此函数永远返回0,即此函数不影--响插入,,但在每次插入都进行计数。此是关键。
        return 0;
  end merge_counter;
 
  function get_merge_insert_count return pls_integer is
  begin
        return g_insert_counter;
  end get_merge_insert_count;
 
  procedure reset_counters is
  begin
        g_insert_counter := 0;
  end reset_counters;
 
end merge_demo;
/
 
以下代码通过上述包获取插入行数,并结合使用sql%rowcount取得更新行数:
begin
     merge into emp_target et
        using ( select * from emp_source ) es
        on   ( et.empno = es.empno )
     when matched then
          update
          set et.ename = es.ename, et.sal = es.sal, et.mgr = es.mgr, et.deptno = es.deptno
     when not matched then
          insert  ( et.empno, et.ename, et.sal, et.mgr, et.deptno)
          values ( case merge_demo.merge_counter
                              when 0 then es.empno
                         end
                       , es.ename, es.sal, es.mgr, es.deptno
                       );
     dbms_output.put_line( 'total ' || sql%rowcount || ' rows merged.' );
     dbms_output.put_line(merge_demo.get_merge_insert_count || ' rows inserted.');
     dbms_output.put_line( sql%rowcount - merge_demo.get_merge_insert_count || ' rows updated.');
     merge_demo.reset_counters;
end;

行者AI
行者AI

行者AI绘图创作,唤醒新的灵感,创造更多可能

行者AI 100
查看详情 行者AI

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号