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;
时间: 2024-10-28 10:15:02

oracle merge和批量insert实操的相关文章

select-mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急

问题描述 mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急 <insert id="saveManyPopInfo" parameterType="java.util.List"> insert into popinfo (popid,popname,remark) select seq_popid.nextval,p.* from ( <foreach collection="lis

Oracle MERGE INTO的用法示例介绍

 这篇文章主要介绍了Oracle MERGE INTO的用法,需要的朋友可以参考下 很多时候我们会出现如下情境,如果一条数据在表中已经存在,对其做update,如果不存在,将新的数据插入.如果不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否存在,然后决定怎么操作,这样的话需要写更多的代码,同时性能也不好,要来回数据库两次.使用merge的话则可以一条SQL语句完成. 1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作

为什么oracle定时任务 都用 insert语句不用crate as语句

问题描述 为什么oracle定时任务 都用 insert语句不用crate as语句 为什么oracle定时任务 都用 insert语句不用crate as语句: 一.用insert create or replace procedure ACCESS_PROD is begin execute immediate 'truncate table access_prod_inst'; insert into access_prod_inst select* from access-prod_in

mybatis 向oracle 采用foearch批量插入,如果包含clob字段报错

问题描述 mybatis 向oracle 采用foearch批量插入,如果包含clob字段报错 mybatis 向oracle 采用foearch批量插入 如下代码: insert into (id,name,clobs) SELECT #{item.id},#{item.name},#{item.clobs} FROM DUAL 报错信息:仅能绑定要插入 LONG 列的 LONG 值 可是如果采用普通的insert into (id,name,clobs) values(#{id},#{nam

mybatis-Mybatis操作Oracle数据库:批量修改成功后返回的值是-1?

问题描述 Mybatis操作Oracle数据库:批量修改成功后返回的值是-1? Mapper.xml <update id="updateByMultiConditions" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="begin"

新站实操:疯狂外链与定向投稿的不同性

经过1个月的建站时间,我用两个网站通过不同的方式去推广,至今天观察,似乎已经开始向稳定收录迈进.现在我来说一说我两个网站这一个月的操作经验. 第一个网站:垃圾外链法 先说说第一个网站的基本情况:域名在7月12日购买,已经备/*-案的域名,一周后正式上线,期间改动过title.关键词.内容数次,但是都是在没收录的情况下改动的.该站从建站开始,我进行了一部分采集,但是采集的资源都是百度没有收录的文章,总计400余篇.可以说是个90%的原创网站了. SEO情况:之后每天一篇原创(来自网络,百度没有的)

使用Oracle sql loader批量导入数据

在性能测试中,有一项十分重要的准备工作就是准备测试数据.在进行性能测试之前,首先要保证测试数据库中有测试所需要的足够多的数据.对于数据的准备工作,有时候我会使用LoadRunner生成相应的脚本去准备数据,这样的做法有一个好处就是简便易行,然而它有一个很大的缺点就是效率太慢,当我们需要的数据量极大时,这样做是非常耗时间的,所以我觉得还需要掌握各种不同的技能来完成这个任务.以下就是我在前不久的一次测试中学到的经验: 使用oracle sql loader批量导入数据(在准备测试数据时很有用!) 生

实操 Web Cache

实操 Web Cache http://netkiller.github.io/journal/cache.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> $Id$ 版权 2011, 2012, 2013, 2014 http://netkiller.github.io $Date$ 摘要 写这篇文章的原

【转载】Docker助你攻克数据库难题,原来数据库还可以这么操作!(附实操教程)

写在前面 Microsoft SQL Server 2017首次应用于Windows.Linux 和Docker 容器中.如今在容器中,您的数据库只需要花费很短的时间就可以完成安装并且不再需要其它的安装环境,使用Docker 企业版(EE)会让你的数据库交付变得更具现代化.多年来IT人员和开发人员一直享受Docker 和容器化APP所带来的这种速度和效率的优势,现在,DBAs也可以体验到这种快感了. 开启挑战 尝试登录Docker SQL Server lab(实操教程链接:https://gi