oracle 外部表装载,Oracle 原理:数据装载 ,SQLldr ,外部表
一、導入 SQLldr
SQL*LOADER可以把txt文件,Excel文件導入到數據庫中。使用SQLloader導入導出需要一個數據文件和一個控制文件。數據文件中存了你需要導入的數據,控制文件中寫你需要怎么導入這些數據。
LOAD DATA
infile 'e:\aa.csv' ## 源文件路徑,路徑不要包括中文
into table xx_temp ## 要導入的表
(
id terminated by whitespace ## id 為列名,whitespace 表示列之間使用空格來區分,如果是其他的 ‘|’ 方式則使用 terminated by '|' 逗號則用逗號.以此類推
)
## 換行 也是自動終止字段讀的標識
其中 impcmd 中 可以被4個值替換分別是insert (缺省默認值),append,replace,truncate
insert: 插入數據,要求表為空
append:追加數據,在原來表的基礎上再插入數據
replace :刪除原表數據,再插入
truncate:刪除原表數據,再插入,比replace 更高效
例如有這么張表
create table salary_tbl(
employer_nm varchar(20) ,
department varchar(20) not null,
salary number not null,
leader_nm varchar(20)
)
新建一個.txt文件用于存數據,可以自定義分隔符來區分字段
新建一個ctl 以字符 '?|' 分割
或者這樣寫更簡便
load data
infile 'data1.txt'
into table SALARY_TBL append
fields terminated by '|'(
employer_nm ,
department ,
salary ,
leader_nm
)
在cmd執行? cd 到對應目錄執行 ,執行完后可以查看對應位置log的內容
sqlldr userid=system/voapd@orcl control=control1.ctl log=11.log
在cmd 執行? sqlldr? ? ?可以查看sqlldr 的幫助
userid
ORACLE用戶名/口令
control
控制文件名
log
日志文件名
bad
錯誤文件名
data
數據文件名
discard
廢棄文件名
discardmax
允許廢棄的文件的數目(全部默認)
skip
要跳過的邏輯記錄的數目(默認0)
load
要加載的邏輯記錄的數目(全部默認)
errors
允許的錯誤的數目(默認50)
rows
常規路徑綁定數組中或直接路徑保存數據間的行數(默認:常規路徑64,所有直接路徑)
bindsize
常規路徑綁定數組的大小(以字節計)(默認256000)
silent
運行過程中隱藏消息(標題,反饋,錯誤,廢棄,分區)
direct
使用直接路徑(默認FALSE)
parfile
參數文件:包含參數說明的文件的名稱
parallel
執行并行加載(默認FALSE)
file
要從以下對象中分配區的文件
skip_unusable_indexes
不允許/允許使用無用的索引或索引分區(默認FALSE)
skip_index_maintenance
沒有維護索引,將受到影響的索引標記為無用(默認FALSE)
commit_discontinued
提交加載中斷時已加載的行(默認FALSE)
readsize
讀取緩沖區的大小(默認1048576)
external_table
使用外部表進行加載;NOT_USED,GENERATE_ONLY,EXECUTE(默認NOT_USED)
columnarrayrows
直接路徑列數組的行數(默認5000)
streamsize
直接路徑流緩沖區的大小(以字節計)(默認256000)
multithreading
在直接路徑中使用多線程
resumable
啟用或禁用當前的可恢復會話(默認FALSE)
resumable_name
有助于標識可恢復語句的文本字符串
resumable_timeout
RESUMABLE的等待時間(以秒計)(默認7200)
date_cache
日期轉換高速緩存的大小(以條目計)(默認1000)
no_index_errors
出現任何索引錯誤時中止加載(默認FALSE)
PLEASENOTE
命令行參數可以由位置或關鍵字指定。前者的例子是'sqlldrscott/tigerfoo';后一種情況的一個示例是'sqlldrcontrol=foouserid=scott/tiger'。位置指定參數的時間必須早于但不可遲于由關鍵字指定的參數。例如,允許'sqlldrscott/tigercontrol=foologfile=log',但是不允許'sqlldrscott/tigercontrol=foolog',即使參數'log'的位置正確。
------------------------------------------
二、導出spool
在SQLplus 或在SQl命令行 輸入
spool c:\test\spool.txt
select st.employer_nm||'|'||st.salary||'|'||st.department from salary_tbl st where LEADER_NM='雇傭者4';
spool off
就可以導出了
此時ctl 文件該怎么寫才能正確導入呢 ?
其中 options skip 是選擇跳過的行數? ,? 順便使用支持中文導入的字符編碼
options(skip=3)
load data
CHARACTERSET ZHS16GBK
infile 'spool.txt'
into table SALARY_TBL truncate
fields terminated by '|'(
employer_nm ,
salary ,
department
)
二、外部表
外部表的數據不裝入數據庫中,數據庫中只存儲外部表的定義。實際數據位于操作系統中的平面文件中。外部表只讀,可以通過select 進行查詢。外部表可以由數據泵引擎生成的外部表。也可以通過文本文件生成的外部表
create table salary_tbl_external(
employer_nm ,
department ,
salary ,
leader_nm
)
organization external -----指明外部表
(
type oracle_datapump --利用數據泵來創建
default directory MY_DIR --D:\DIRTEST1
location ('sal1.dmp','sal2.dmp')
) parallel
as
select salary_tbl.employer_nm,
salary_tbl.department,
salary_tbl.salary,
salary_tbl.leader_nm from salary_tbl
在MY_DIR 文件中有 SAL1.dmp 和SAL2.dmp文件?,F在有了dmp文件可以通過外部表來創建外部表
create table salary_tbl_external2(
employer_nm varchar2(20) ,
department varchar2(20),
salary number,
leader_nm varchar2(20)
) organization external(
type oracle_datapump
default directory MY_DIR --D:\DIRTEST1
location ('sal1.dmp','sal2.dmp')
)
利用文本文件來創建外部表? 現有txt文件
create directory C_test as 'C:\test';
--使用oracle_loader創建外部表,數據文件中每一行為數據行,字段按照 ‘|'劃分
create table salary_tbl_external3(
employer_nm varchar2(20) ,
department varchar2(20),
salary number,
leader_nm varchar2(20)
) organization external(
type oracle_loader
default directory C_test
access parameters(
records delimited by newline
fields terminated by '|'
)
location ('data1.txt')
)
select * from salary_tbl_external3
就可以查詢了。
注意:?如果在access parameters 中? 注釋一些沒有用的代碼,系統認為這是不符合規則的語句,會產生錯誤ORA-29913
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的oracle 外部表装载,Oracle 原理:数据装载 ,SQLldr ,外部表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php数组为什么其他语言,PHP语言特性
- 下一篇: Oracle数据库进程杀不掉,求助ora