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