ITPub博客

首页 > Linux操作系统 > Linux操作系统 > inset all/ insert first 用法小记(备忘)

inset all/ insert first 用法小记(备忘)

原创 Linux操作系统 作者:kingtsi 时间:2010-03-04 11:47:03 0 删除 编辑
INSERT All/ INSERT FIRST

同时插入到多张表,在这里整理下,以供查阅。先建两个测试表,ww1,ww2
SQL> desc ww1
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(30)
SQL> desc ww2
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(30)
 TABLESPACENAME                                     VARCHAR2(30)

无条件INSERT,同时向这两表插入数据

insert all
 into ww1 values( object_id,object_name)
 into ww2 values(object_id,object_name,object_type)
 select objecT_id,object_name,object_type from user_objects where rownum<20
   /
已创建38行。

SQL> select count(*) from ww1;
  COUNT(*)
----------
        19
可以看到总共插入了38行,每个表插入了19行

条件INSERT,当每个不同条件成立的时候插入不同表
insert all
when object_type='TABLE' then into ww1 values (object_id,object_name)
when object_type='SYNONYM' then into ww2 values (objecT_id,object_name,object_type)
select object_id,object_name,object_type from user_objects
  /
已创建727行。

SQL> select count(*) from ww1;
  COUNT(*)
----------
       718
SQL> select count(*) from ww2;
  COUNT(*)
----------
         9
可以看到,符合object_type='TABLE'的718条记录被插入到ww1表中,符合object_type='SYNONYM'的9条记录被插入到ww2表中,总共插入了718条记录。

条件FIRST INSERT
  1  select objecT_id ,object_type from user_objects
  2* where object_id<10
  3  /
 OBJECT_ID OBJECT_TYPE
---------- --------------------------------------
         2 CLUSTER
         3 INDEX
         4 TABLE
         5 TABLE
         6 CLUSTER
         7 INDEX
         8 CLUSTER
         9 INDEX
看到前9条记录中,INDEX 有4条.于是写如下SQL测试

insert first
when object_type='INDEX' then into ww values (object_id)
 when object_id<10 then into ww1 values (object_id,object_name)
    select object_id,object_name,object_type
   from user_objects
   /
已创建715行。
SQL> select count(*) from ww;
  COUNT(*)
----------
       710
SQL> select * from ww1;
        ID NAME
---------- ---------------------
         6 C_TS#
         5 CLU$
         8 C_FILE#_BLOCK#
         2 C_OBJ#
         4 TAB$
可以看到,用FIRST后,凡是符合第一个条件的就都插入第一个表,其他的数据才在以后的条件里再判断.
用这种写法,也可以达到行转列的目的.(此例子中object_id<10的九条记录中,因使用insert first ,符合第一个条件的例子插入在第一个表中,第二个人表相应的记录则晒除)

INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;

如上示例用于将多列转换成多行数据


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17309626/viewspace-628575/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: The PRAGMA Keyword
请登录后发表评论 登录
全部评论

注册时间:2009-11-03

  • 博文量
    16
  • 访问量
    55508