`
luozhonghua2014
  • 浏览: 62335 次
文章分类
社区版块
存档分类
最新评论

oracle merge和批量insert实操

 
阅读更多
create table small_customers 
(customer_id	number,
 sum_orders		number)
;


create table medium_customers 
(customer_id	number,
 sum_orders		number)
;


create table large_customers 
(customer_id	number,
 sum_orders		number)
;


select * from small_customers ;

select * from medium_customers ;

select * from large_customers ;



insert all
when sum_orders < 10000 then
into small_customers
when sum_orders >= 10000 and sum_orders < 100000 then
into medium_customers
else
into large_customers
select customer_id, sum(order_total) sum_orders
from oe.orders
group by customer_id ;


select * from small_customers ;

select * from medium_customers ;

select * from large_customers ;






create table dept60_bonuses
(employee_id number
,bonus_amt number);

insert into dept60_bonuses values (103, 0);

insert into dept60_bonuses values (104, 100);

insert into dept60_bonuses values (105, 0);

commit;

select employee_id, last_name, salary
from hr.employees
where department_id = 60 ;

select * from dept60_bonuses;

merge into dept60_bonuses b
using (select employee_id, salary, department_id
         from hr.employees
        where department_id = 60) e
on (b.employee_id = e.employee_id)
when matched then
  update
     set b.bonus_amt = e.salary * 0.2
   where b.bonus_amt = 0 delete
   where (e.salary > 7500)
when not matched then
  insert
    (b.employee_id, b.bonus_amt)
  values
    (e.employee_id, e.salary * 0.1) where
    (e.salary < 7500);

select * from dept60_bonuses;

rollback;




create table subs(msid number(9),
                      ms_type char(1),
                      areacode number(3)
                      );

create table acct(msid number(9),
                      bill_month number(6),
                      areacode   number(3),
                       fee        number(8,2) default 0.00);
                       
                       
                       
insert into subs values(905310001,0,531);
insert into subs values(905320001,1,532);
insert into subs values(905330001,2,533);
commit;
            

select * from subs;
select * from acct;


--  insert
 merge into acct a 
     using subs b on (a.msid=b.msid)
   when MATCHED then
        update set a.areacode=b.areacode
   when NOT MATCHED then
        insert(msid,bill_month,areacode) 
        values(b.msid,'200702',b.areacode);
  commit;
  
   select * from subs;
select * from acct;  
  --update
  merge into acct a 
     using subs b on (a.msid=b.msid)
   when MATCHED then
        update set a.areacode=b.areacode
        where b.ms_type=0;
  commit;
 select * from subs;
select * from acct;   
delete from     subs;
delete from     acct;




merge into acct a
using subs b
on (a.msid = b.msid)
when MATCHED then
  update set a.areacode = b.areacode
when NOT MATCHED then
  insert
    (msid, bill_month, areacode)
  values
    (b.msid, '200702', b.areacode);
commit;
select * from subs;
select * from acct;



 merge into acct a
 using subs b
 on (a.msid = b.msid)
 when MATCHED then
   update set a.areacode = b.areacode 
   delete where (b.ms_type != 0);
 commit;
 
 select * from subs;
select * from acct;

分享到:
评论

相关推荐

    oracle merge 用法详解

    1. **UPDATE或INSERT子句成为可选项**:与Oracle 9i不同的是,在Oracle 10g中,`MERGE`语句允许用户只指定`UPDATE`或`INSERT`中的任意一个操作。 2. **支持WHERE子句**:在`UPDATE`和`INSERT`子句后可以添加`WHERE`...

    merge_批量导入MAX.zip,3dmax批量导入obj插件

    这时,"merge_批量导入MAX.zip" 提供的3ds Max批量导入OBJ插件就显得非常实用。 标题中的"merge_批量导入MAX.zip" 指的是一个压缩包文件,它包含了一个名为"merge_批量导入MAX.mse"的插件。这个插件是为了解决3ds ...

    oracle merge into的使用

    在Oracle 9i版本中,Merge Into 的引入使得开发者能够同时执行更新(UPDATE)和插入(INSERT)操作,而到了Oracle 10g及后续版本,这一功能得到了进一步增强,提供了更丰富的条件选择和操作选项。 ### 知识点详述:...

    Oracle merge into用法

    在Oracle 9i中,`MERGE INTO`语句首次被引入,它允许在同一语句中执行`INSERT`和`UPDATE`操作。到了Oracle 10g,这个功能得到了进一步增强,使其更加强大和灵活。通过`MERGE INTO`,可以基于源表和目标表之间的匹配...

    oracle Merge 函数.doc

    Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge 函数的基本语法结构为: ```sql MERGE INTO 目标表 USING 来源表 ON (条件) WHEN MATCHED THEN 更新操作 ...

    Mybatis批量foreach merge into的用法

    首先,需要使用Oracle 9i及其以后版本支持的merge into语句,该语句可以实现insertOrUpdate的功能。然后,使用Mybatis的动态SQL语法foreach循环插入,待插入的实体bean的List通过查询数据库dual形成表。foreach的 ...

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    oracle死锁原因解决办法

    Oracle数据库提供了一系列工具来帮助管理员检测和处理死锁。 ##### 3.1 死锁日志记录 当Oracle数据库检测到死锁时,会在警报日志文件(alert.log)中记录相关信息。这些信息对于分析死锁的原因至关重要。例如,在...

    Oracle_merge

    为了解决这一问题,Oracle 引入了 `MERGE` 语句,它允许用户在一个步骤中同时执行这两种操作,从而大大提高了数据处理的效率和准确性。 #### 三、`MERGE` 语句的结构 `MERGE` 语句的基本结构如下: ```sql MERGE ...

    Merge Into 语句代替InsertUpdate

    非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者

    浅谈Oracle数据库中Merge Into的用法.pdf

    在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则是“有则更新,无则插入”。 Merge ...

    Oracle merge合并更新函数实例详解

    Oracle的MERGE语句是一种强大的数据操作工具,它在Oracle9i版本中被引入,用于合并UPDATE和INSERT操作。在处理需要根据特定条件更新或插入数据的场景时,MERGE语句提供了高效的解决方案,尤其适合那些需要在单个SQL...

    oracle使用 merge 更新或插入数据(总结)

    oracle使用 merge 更新或插入数据(总结)

    Oracle MERGE INTO的用法示例介绍

    1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作 — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 2)MERGE语句的...

    winmerge文件比较工具

    WinMerge是一款开源的文件和文件夹比较软件,适用于Windows操作系统。它以其直观的用户界面和强大的对比功能,使得文件比较变得简单易行。通过对文件内容的逐行比较,WinMerge能清晰地标识出两份文件之间的差异,并...

    oracle merge

    merge 详解 及实例 优点:  — 避免了分开更新  — 提高性能并易于使用  — 在数据仓库应用中十分有用  — 使用merge比传统的先判断再选择插入或更新快很多

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB&gt;0,...

    oracle同一个表中使用merge.txt

    oracle同一个表中使用merge

Global site tag (gtag.js) - Google Analytics