Oracle 10G提供了一種方式可以使用外部表格來抽取資料。
首先需要一個directory目錄(這裡繼續使用前面建立的目錄)
- SQL> show user
- USER 為 "SYS"
- SQL> select * from dba_directories where DIRECTORY_NAME like '%SYS%';
-
- OWNER DIRECTORY_NAME DIRECTORY_PATH
- ------------------------------ ------------------------------ --------------------------------------------------
- SYS SYS_SQLLDR_XT_TMPDIR_00000 /u01/sqlldr
然後執行命令
- SQL> show user
- USER 為 "ING"
- SQL> desc SYS_SQLLDR_X_EXT_DEPT
- 名稱 是否為空白? 類型
- ----------------------------------------- -------- ----------------------------
- DEPTNO NUMBER(10)
- DNAME VARCHAR2(20)
- LOC VARCHAR2(20)
-
- SQL> create table SYS_SQLLDR_X_EXT_DEPT_UNLOAD
- 2 organization external
- 3 (type oracle_datapump
- 4 default directory SYS_SQLLDR_XT_TMPDIR_00000
- 5 location('SYS_SQLLDR_X_EXT_DEPT_UNLOAD.dat')
- 6 ) as
- 7 select * from SYS_SQLLDR_X_EXT_DEPT;
-
- 表已建立。
在資料庫中會建立一個SYS_SQLLDR_X_EXT_DEPT_UNLOAD表,在目錄中會多出兩個檔案
- [oracle@linux sqlldr]$ ll | grep SYS
- -rw-r--r-- 1 oracle oinstall 148 10-04 22:43 SYS_SQLLDR_X_EXT_DEPT_UNLOAD_3501.log
- -rw-r----- 1 oracle oinstall 12288 10-04 22:40 SYS_SQLLDR_X_EXT_DEPT_UNLOAD.dat
最後把SYS_SQLLDR_X_EXT_DEPT_UNLOAD.dat檔案複製到其它資料庫對應目錄中,提取外部表格建立指令碼就可以拉
- SQL> set long 20000
- SQL> set pagesize 99
- SQL> select dbms_metadata.get_ddl('TABLE','SYS_SQLLDR_X_EXT_DEPT_UNLOAD') from dual;
-
- DBMS_METADATA.GET_DDL('TABLE','SYS_SQLLDR_X_EXT_DEPT_UNLOAD')
- --------------------------------------------------------------------------------
-
- CREATE TABLE "ING"."SYS_SQLLDR_X_EXT_DEPT_UNLOAD"
- ( "DEPTNO" NUMBER(10,0),
- "DNAME" VARCHAR2(20),
- "LOC" VARCHAR2(20)
- )
- ORGANIZATION EXTERNAL
- ( TYPE ORACLE_DATAPUMP
- DEFAULT DIRECTORY "SYS_SQLLDR_XT_TMPDIR_00000"
-
- LOCATION
- ( 'SYS_SQLLDR_X_EXT_DEPT_UNLOAD.dat'
- )
- )
甚至可以從外包表中直接載入資料
- SQL> insert /*+ append */ into dept select * from SYS_SQLLDR_X_EXT_DEPT_UNLOAD;
-
- 已建立4行。
-
- SQL> commit;
-
- 提交完成。
-
- SQL> select * from dept;
-
- DEPTNO DNAME LOC
- ---------- -------------------- --------------------
- 50 Sales Virginia
- 60 Accounting Virginia
- 70 Consulting Virginia
- 80 Finance Virginia