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
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;

目录
相关文章
|
1月前
|
Oracle 关系型数据库 数据库
Oracle中merge Into的用法
Oracle中merge Into的用法
|
4月前
|
SQL Oracle 关系型数据库
Oracle之你知道哪几种多表Insert的方式?
Oracle之你知道哪几种多表Insert的方式?
33 0
|
Oracle 关系型数据库 数据库
Oracle生产数据库insert插入较慢分析过程和解决办法
Oracle生产数据库insert插入较慢分析过程和解决办法
317 0
|
1月前
|
SQL Oracle 关系型数据库
Oracle insert数据时字符串中有‘单引号问题
Oracle insert数据时字符串中有‘单引号问题
|
11月前
|
SQL Oracle 关系型数据库
Oracle-数据泵expdp/impdp实操
Oracle-数据泵expdp/impdp实操
260 0
|
11月前
|
Oracle 关系型数据库 数据库
Oracle实例迁移_真实场景实操
Oracle实例迁移_真实场景实操
78 0
Zp
|
SQL Oracle 关系型数据库
Oracle sql 批量插入 Insert all into
Oracle sql 批量插入 Insert all into
Zp
281 0
|
SQL Oracle 关系型数据库
|
存储 SQL 专有云
Oracle存储过程迁移ODPS-01(专有云):支持DML(delete/update/merge)SQL
关系型数据库支持的DML(delete/update/merge)SQL ,在maxcompute(ODPS)该如何写? 总有人问,现写了一个例子,应该可以说明了。 有问题,欢迎大家指正。
2511 0

推荐镜像

更多