Oracle SQL:insert into语句总结 与 merge into用法总结

insert into语句总结  merge into用法总结

insert SQL用途:

1、为表插入单行数据

2、也可以通过子查询将一张表的多行数据插入到另外一张表里面

3、同时为多张表插入数据

 

语法:

INSERT INTO <TABLE> [(colum[,column.....])]VALUES (values[,value....])

     table:    指定表或视图

     column:指定列名,多列之间用,分开

     value:    指定待插入的数据,多值之间依,分开

 

注意事项:

①.INSERT时既可以指定列,也可以不指定列表

    如果不指定列表,则values子句必须为table中的每个列提供数据,且数据顺序与列顺序相同

    如果    指定列表,提供的数据的顺序需与相应列对应

②.数字列可之间写入,字符列或日期列插入数据时必须使用单引号引住

③.插入数据必须满足约束规则,主键列和NOT NULL列必须提供数据值

④.插入的数据必须与列的个数及顺序保持一致

 

insert into应用实例:

基础应用

--新增一个部门:提供列
insert into gem_file(gem01,gem02,gem03,gem07,gem05,gemacti)
      values('2BSB','文青部','文艺青年部','M','Y','Y');
--新增一个部门:不提供列名,则需为table中的每列提供数据,即使为NULL也要提供
insert into gem_file 
      values('2BNB','文青部','文艺青年部',DEFAULT,'Y','','M',DEFAULT,'Y','terry','','','','','');
                                 --可以使用 DEFAULT 提供默认值,如果没有设置默认值则此列数据为NULL

使用子查询插入数据

①.当使用VALUES子句插入数据时,一次只能够插入一行数据

②.还可以将一张表的数据赋值到另外一张表中,方便处理数据表的迁移复制及装载

    语法:INSERT INTO <TABLE> [(column[,column],.....)] subQuery

    注意:insert列的数据个数必须和subQuery子查询的列的个数及数据类型完全匹配

--将sstl_ft该用户azi_file表中有效的币别档信息复制到sstl_dx用户同表中
     insert into sstl_dx.azi_file
            select * from sstl_ft.azi_file where aziacti = 'Y';
--将sstl_ft该用户azi_file表中有效的币别档信息复制到sstl_dx用户同表中
--采用APPEND直接装载
     insert /*+APPEND */ into sstl_dx.azi_file   -- /*+APPEND */ 直接装载
            select * from sstl_ft.azi_file where aziacti = 'Y';
     --上面两条SQL结果的效果是一样的,但是后面一条使用的直接装载当大批量数据时,直接装载速度远远优于普通的insert

使用多表插入数据( oracle 9i后的功能 )

语法:INSERT ALL insert_into_clause [value_clause] subquery;
                INSERT condition_insert_clause sunquery;
说明:insert_into_clause:         指定insert 子句
          value_clause:                指定值子句
          subquery:                     提供数据的子查询
          condition_insert_clause:insert条件子句

--使用ALL关键字将总公司的AR单依来源分别复制到子公司AR单
insert ALL
       WHEN oma66='SSTL_DX' THEN INTO sstl_dx.oma_file
       WHEN oma66='SSTL_ZK' THEN INTO sstl_zk.oma_file
       WHEN oma66='SSTL_FT' THEN INTO sstl_ft.oma_file
  SELECT * from sstl.oma_file where omaacti = 'Y';

--使用FIRST关键字将总公司的AR单依来源分别复制到子公司AR单
--如果数据已经满足了先前条件并且已经被插入到某表,那么该行数据在后续插入将不会被再次使用
--主要应用于WHEN后面的条件判断交叉时做条件管控
insert FIRST
       WHEN oma66='SSTL_DX' THEN INTO sstl_dx.oma_file
       WHEN oma66='SSTL_ZK' THEN INTO sstl_zk.oma_file
       WHEN oma66='SSTL_FT' THEN INTO sstl_ft.oma_file
   SELECT * from sstl.oma_file where omaacti = 'Y';


merge into应用:实现 无则insert插入,有则update更新,一条语句直接进行insert/update操作

merge ino语法:

   MERGE INTO table1 alias1
         USING (table2|view2|sub_query2) alias2
         ON (join condition)
     WHEN MATCHED THEN
         UPDATE table1
               SET col1 = col_val1,
                     col2  = col2_val
     WHEN NOT MATCHED THEN
               INSERT (column_list) VALUES (column_values); 

--将总公司sstl的客户信息occ_file数据表和子公司sstl_dx的客户信息occ_file核对
--如果sstl_dx公司的客户信息和sstl不同,则依据sstl客户信息更新sstl_dx的客户信息
--如果sstl_dx公司没有,则将sstl的客户信息新增入sstl_dx公司
    MERGE INTO sstl_dx.occ_file dx_occ
          USING sstl.occ_file sstl_occ
          ON(dx_occ.occ01 = sstl_occ.occ01)
        WHEN MATCHED THEN
          update
            set dx_occ.occ02 = sstl_occ.occ02,
                dx_occ.occ03 = sstl_occ.occ03,
                dx_occ.occ04 = sstl_occ.occ04,
                dx_occ.occ05 = sstl_occ.occ05,
                ...
            where dx_occ.occacti = 'Y'
        WHEN NOT MATCHED THEN
          insert
            values(sstl_occ.occ01,sstl_occ.occ02,sstl_occ.occ03,sstl_occ.occ04,sstl_occ.occ05,...)
            where sstl_occ.occacti = 'Y';

http://blog.csdn.net/yihuiworld




你可能感兴趣的:(oracle,sql,insert,merge)