INSERT All/ INSERT FIRST
同时插入到多张表,在这里整理下,以供查阅。先建两个测试表,ww1,ww2SQL> desc ww1 名称 是否为空? 类型 ----------------------------------------- -------- --------------- ID NUMBER NAME VARCHAR2(30)SQL> desc ww2 名称 是否为空? 类型 ----------------------------------------- -------- --------------- ID NUMBER NAME VARCHAR2(30) TABLESPACENAME VARCHAR2(30)
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 allwhen 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(*)---------- 718SQL> 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 firstwhen 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(*)---------- 710SQL> 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 ALLINTO 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_FRIFROM sales_source_data;
如上示例用于将多列转换成多行数据
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17309626/viewspace-628575/
,如需转载,请注明出处,否则将追究法律责任。