li
  当前位置:主页 > 性能优化 > 文章内容
li
INSERT ALL和INSERT FIRST语法
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:7  
本文章共2253字,分2页,当前第1页,快速翻页:
 

在数据仓库中的转换和装载过程中,可能会使用INSERT ALL语句,这篇文章简单介绍一下INSERT ALL语句。


INSERT ALL是9i新增的语法,它扩充了原有的INSERT语句,使得INSERT语句从原来的只能插入到一张表发展到可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。

下面看几个简单的例子:

SQL> CREATE TABLE TABLE_STORAGE
2 (
3 TABLE_NAME VARCHAR2(30),
4 TABLESPACE_NAME VARCHAR2(30),
5 PCT_FREE NUMBER,
6 PCT_USED NUMBER,
7 INI_TRANS NUMBER,
8 MAX_TRANS NUMBER,
9 INITIAL_EXTENT NUMBER,
10 NEXT_EXTENT NUMBER,
11 MIN_EXTENTS NUMBER,
12 MAX_EXTENTS NUMBER,
13 PCT_INCREASE NUMBER,
14 FREELISTS NUMBER,
15 FREELIST_GROUPS NUMBER
16 );

表已创建。

SQL> CREATE TABLE TABLE_STAT
2 (
3 TABLE_NAME VARCHAR2(30),
4 NUM_ROWS NUMBER,
5 BLOCKS NUMBER,
6 EMPTY_BLOCKS NUMBER,
7 AVG_SPACE NUMBER,
8 CHAIN_CNT NUMBER,
9 AVG_ROW_LEN NUMBER
10 );

表已创建。

SQL> INSERT ALL
2 INTO TABLE_STORAGE VALUES (TABLE_NAME, TABLESPACE_NAME, PCT_FREE, PCT_USED,
3 INI_TRANS, MAX_TRANS, INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS,
4 PCT_INCREASE, FREELISTS, FREELIST_GROUPS)
5 INTO TABLE_STAT VALUES (TABLE_NAME, NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE,
6 CHAIN_CNT, AVG_ROW_LEN)
7 SELECT * FROM USER_TABLES;

已创建54行。

SQL> SELECT COUNT(*) FROM TABLE_STORAGE;

COUNT(*)
----------
27

SQL> SELECT COUNT(*) FROM TABLE_STAT;

COUNT(*)
----------
27

SQL> SELECT COUNT(*) FROM USER_TABLES;

COUNT(*)
IXDBA.NET社区论坛
----------
27

SQL> DROP TABLE TABLE_STAT;

表已丢弃。

SQL> DROP TABLE TABLE_STORAGE;

表已丢弃。

上面是最简单的INSERT ALL语句的实现,下面看看带条件的INSERT ALL语句。

SQL> CREATE TABLE TABLE_ALL (TABLE_NAME VARCHAR2(30));

表已创建。

SQL> CREATE TABLE INDEX_ALL (INDEX_NAME VARCHAR2(30));

表已创建。

SQL> CREATE TABLE OBJECT_OTHER (OBJECT_NAME VARCHAR2(30), OBJECT_TYPE VARCHAR2(30));

表已创建。

SQL> INSERT ALL
2 WHEN (OBJECT_TYPE = 'TABLE') THEN
3 INTO TABLE_ALL VALUES (OBJECT_NAME)
4 WHEN (OBJECT_TYPE = 'INDEX') THEN
5 INTO INDEX_ALL VALUES (OBJECT_NAME)
6 ELSE
7 INTO OBJECT_OTHER
8 SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
9 ;

已创建91行。

SQL> SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';

COUNT(*)
----------
27

SQL> SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_TYPE = 'INDEX';

COUNT(*)
----------
14

SQL> SELECT COUNT(*) FROM USER_OBJECTS
2 WHERE OBJECT_TYPE NOT IN ('TABLE', 'INDEX');

COUNT(*)
----------
50

SQL> SELECT COUNT(*) FROM TABLE_ALL;

COUNT(*)
----------
27

SQL> SELECT COUNT(*) FROM INDEX_ALL;

COUNT(*)
----------
14

SQL> SELECT COUNT(*) FROM OBJECT_OTHER;

COUNT(*)
----------
50

SQL> DROP TABLE TABLE_ALL;

表已丢弃。

SQL> DROP TABLE INDEX_ALL;

表已丢弃。

SQL> DROP TABLE OBJECT_OTHER;

表已丢弃。

下面看一下INSERT ALL和INSERT FIRST的区别:

SQL> CREATE TABLE TABLESPACE_USERS (NAME VARCHAR2(30), TYPE VARCHAR2(30));

表已创建。

SQL> CREATE TABLE TABLE_ALL (TABLE_NAME VARCHAR2(30));

表已创建。

SQL> INSERT ALL
2 WHEN (SEGMENT_TYPE = 'TABLE') THEN
3 INTO TABLE_ALL VALUES (SEGMENT_NAME)



阅读更多内容1 · 2 · 下一页>>


  上一篇: MERGE语法   下一篇: Oracle的在线重定义表功能(二)
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·MERGE语法
·Oracle9i使用闪回操作
·PLSQL计算质数
·ORA-600(999)错误(一)
·EFFECTIVE ORACLE BY DESIGN总结
·备份之裸设备备份——unix系统
·全文索引性能分析(一)
·将任意表数据导出为CSV文件的过程
·Timesten系统剖析——Timesten体...
·安装ORACLE ENTERPRISE LINUX 5
·Oracle的在线重定义表功能(二)
·树状查询新特性(二)
·树状查询新特性
·10g数据泵和导入导出性能对比(一...
·Oracle10g sqlplus小改进
·10g数据泵和导入导出性能对比(三...
·10g数据泵和导入导出性能对比(二...
·Oracle10g的FAST DUAL执行计划
·Oracle10g的简化连接方式
·Oracle10G新增NO提示
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接