insert select 和 外部表

 

加载多表数据:

insert all
----------
insert all
   into sal_history values(empid,hiredate,sal)
   into mgr_history values(empid,mgr,sal)
select employee_id empid,hire_date hiredate,salary sal,manager_id mgr
from employees
where employee_id > 200
所有的数据都insert到指定的表。

conditional insert all
----------------------
INSERT ALL
WHEN SAL > 10000 THEN
   INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN
   INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
只要满足条件,就insert数据。

Conditional first insert
------------------------
INSERT FIRST
   WHEN SAL > 10000 THEN
           INTO sal_history VALUES(EMPID,HIREDATE,SAL)
   WHEN MGR > 200 THEN
           INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,salary SAL, manager_id MGR
FROM employees
当第一次满足条件时,insert数据,以后满足条件的跳过。


Pivoting insert
---------------
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;

SQL> select * from sales_source_data;

EMPLOYEE_ID    WEEK_ID SALES_MON SALES_TUE SALES_WED SALES_THUR SALES_FRI
----------- ---------- ---------- ---------- ---------- ---------- ----------
        176          6       2000       3000       4000       5000       6000

SQL> select * from sales_info;

EMPLOYEE_ID       WEEK      SALES
----------- ---------- ----------
        176          6       2000
        176          6       3000
        176          6       4000
        176          6       5000
        176          6       6000

将一行记录,转换成多行记录。

----------------------------------------------------------------------------
External tables are a complement to SQL*Loader and are especially useful for environments where the complete

external source has to be joined with existing database objects and transformed in a complex manner, or where the

external data volume is large and used only once. SQL*Loader, on the other hand, might still be the better choice

for loading of data where additional indexing of the staging table is necessary. This is true for operations where

the data is used in independent complex transformations or the data is only partially used in further processing.

外部表
------
1.创建目录

CREATE DIRECTORY emp_dir AS 'c:/oracle/datapump';
grant write,read on DIRECTORY external_table_dir to 创建外部表用户;

2.创建外部表

CREATE TABLE oldemp (empno NUMBER, empname CHAR(20), birthdate DATE) -- 外部表列名
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER -- 外部表转载类型
   DEFAULT DIRECTORY external_table_dir -- 默认文件存取目录
ACCESS PARAMETERS   -- 存储参数设置
( RECORDS DELIMITED BY NEWLINE -- 一个新行代表一条记录
   BADFILE 'bad_emp'   --
   LOGFILE 'log_emp'   -- 日志文件名,[可以指定目录格式为"LOGFILE 目录名:'文件名'"]
   FIELDS TERMINATED BY ',' -- 字段分隔符
   MISSING FIELD VALUES ARE NULL -- 文件中为空的字段,插入NULL
   (empno CHAR,    -- 外部数据文件字段类型设置
   empname CHAR,
   birthdate CHAR date_format date mask "DD-MM-YYYY"
   )
)
LOCATION ('oldemp.txt')    -- 外部数据文件名
)
PARALLEL 5      -- 装载并行度
REJECT LIMIT 200;     -- 该子句指定对在查询外部数据时可能产生的错误的数量的限制。


实例:

CREATE TABLE oldemp (empno NUMBER, empname CHAR(20), birthdate DATE)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
   DEFAULT DIRECTORY external_table_dir
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
   BADFILE 'bad_emp'
   LOGFILE 'log_emp'
   FIELDS TERMINATED BY ','
   MISSING FIELD VALUES ARE NULL
   (empno CHAR,
   empname CHAR,
   birthdate CHAR date_format date mask "DD-MON-YYYY"
   )
)
LOCATION ('oldemp.txt')
)
PARALLEL 5
REJECT LIMIT 200;

CREATE TABLE oldemp (empno NUMBER, empname CHAR(20), birthdate DATE)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
   DEFAULT DIRECTORY external_table_dir
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
   BADFILE 'bad_emp'
   LOGFILE 'log_emp'
   FIELDS TERMINATED BY ','
   MISSING FIELD VALUES ARE NULL
   (empno CHAR,
   empname CHAR,
   birthdate date "DD-MON-YYYY"
   )
)
LOCATION ('oldemp.txt')
)
PARALLEL 5
REJECT LIMIT 200;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值