日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle的外部表

發(fā)布時(shí)間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle的外部表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.外部表特性

數(shù)據(jù)文件位于操作系統(tǒng)之外,并且具有一定的格式分割的文本文件或其他類(lèi)型文件.ORACLE的外部表通過(guò)SQL的形式訪問(wèn)數(shù)據(jù)文件中的數(shù)據(jù),數(shù)據(jù)并不需要加載到數(shù)據(jù)庫(kù)中且數(shù)據(jù)是可讀的,所以不用DML操作,創(chuàng)建索引

二.創(chuàng)建外部表的步驟

? A.創(chuàng)建目錄對(duì)象,這一點(diǎn)限制數(shù)據(jù)必須的SERVER端
? B.數(shù)據(jù)文件的準(zhǔn)備,數(shù)據(jù)文件要求為操作系統(tǒng)之外且固定格式,不能有標(biāo)題
? C.創(chuàng)建外部表的字段如有特殊字段需用雙引號(hào) ”SYS_ID#”
? D.刪除外部表及目錄,應(yīng)先刪除表后再刪除目錄

三.創(chuàng)建外部表實(shí)列

創(chuàng)建目錄:
CREATE OR REPLACE DIRECTORY SQLDR AS 'D:\ORACLE\ORADATA\DATA';

創(chuàng)建外部表:(通過(guò)SQLLDR方式的日志產(chǎn)生)
-- CREATE TABLE
CREATE TABLE SYS_SQLLDR_X_EXT_MUREX_GL_TEMP
(
? AREANO?? VARCHAR2(20),
? CURRENCY VARCHAR2(20),
? APCODE?? VARCHAR2(20),
? ORGCDE?? VARCHAR2(20),
? DAMOUNT? VARCHAR2(200),
? CAMOUNT? VARCHAR2(200),
? REMAKR?? VARCHAR2(200)
)
ORGANIZATION EXTERNAL
(
? TYPE ORACLE_LOADER
? DEFAULT DIRECTORY SQLDR
? ACCESS PARAMETERS
? (
??? RECORDS DELIMITED BY 0X'0A'
??????? BADFILE 'SQLDR':'MUREX_GLRCN_INIT_BADFILE.DAT'
??????? DISCARDFILE 'SQLDR':'MUREX_GLRCN_INIT_DISFILE.DAT'
??????? LOGFILE 'MUREX_GL_TEMP.LOG_XT'
??????? READSIZE 1048576
??????? FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY ' ' LDRTRIM
??????? REJECT ROWS WITH ALL NULL FIELDS
??????? (
????????? "AREANO" CHAR(255),
????????? "CURRENCY" CHAR(255),
????????? "APCODE" CHAR(255),
????????? "ORGCDE" CHAR(255),
????????? "DAMOUNT" CHAR(255),
????????? "CAMOUNT" CHAR(255),
????????? "REMAKR" CHAR(255),
??????? )
? )
? LOCATION (SQLDR:'MUREX_GLRCN_INIT_20190831.DAT')
)
REJECT LIMIT UNLIMITED;

四.SQLLDR產(chǎn)生外部表的DDL語(yǔ)句

在命令運(yùn)行SQLLDR(控制文件事先要準(zhǔn)備好):
A.用SQLLDR生成LOG文件
SQLLDR USER_NAME/PASSWORD@ORADB CONTROL=CONTROL_FILE.CTL EXTERNAL_TABLE=GERNERATE_ONLY;
NOT_USED:默認(rèn)值。
EXECUTE:這個(gè)值說(shuō)明SQLLDR不會(huì)生成并執(zhí)行一個(gè)SQLINSERT語(yǔ)句;而是會(huì)創(chuàng)建一個(gè)外部表,且使用一個(gè)批量SQL語(yǔ)句來(lái)加載。
GENERATE_ONLY:使SQLLDR并不具體加載任何數(shù)據(jù),而只是會(huì)生成所執(zhí)行的SQL DDL和DML語(yǔ)句,并放到它創(chuàng)建的日志文件中。
注:DIRECT=TRUE覆蓋EXTENAL_TABLE=GENERATE_ONLY。如果指定了DIRECT=TRUE,則會(huì)加載數(shù)據(jù),而不會(huì)生成外部表。

D:\ORACLE\ORADATA\DATA>SQLLDR BOC_RWA3/A@RWADB CONTROL=MUREX_GL_TEMP.CTL EXTERNA L_TABLE=GENERATE_ONLY

SQL*LOADER: RELEASE 11.2.0.3.0 - PRODUCTION ON 星期四 9月 12 22:27:03 2013
COPYRIGHT (C) 1982, 2011, ORACLE AND/OR ITS AFFILIATES.? ALL RIGHTS RESERVED.

B.從LOG文件中提取DDL語(yǔ)句
CREATE TABLE "SYS_SQLLDR_X_EXT_MUREX_GL_TEMP"
(
? "AREANO" VARCHAR2(20),
? "CURRENCY" VARCHAR2(20),
? "APCODE" VARCHAR2(20),
? "ORGCDE" VARCHAR2(20),
? "DAMOUNT" VARCHAR2(200),
? "CAMOUNT" VARCHAR2(200),
? "REMAKR" VARCHAR2(200)
)
ORGANIZATION EXTERNAL
(
? TYPE ORACLE_LOADER? --指定外部表的訪問(wèn)方式,9I不支持ORACLE_DATAPUMP
? DEFAULT DIRECTORY SQLDR? --目錄
? ACCESS PARAMETERS?? --配置外部表參數(shù)
? (
??? RECORDS DELIMITED BY NEWLINE CHARACTERSET ZHS16GBK? --記錄以換行為結(jié)束
??? BADFILE 'SQLDR':'MUREX_GLRCN_INIT_20130809_BADFILE.DAT'?? --存放處理失敗的記錄文件描述
??? DISCARDFILE 'SQLDR':'MUREX_GLRCN_INIT_20130809_DISFILE.DAT' --存放處理丟棄的記錄文件描述
??? LOGFILE 'MUREX_GL_TEMP.LOG_XT'?? --日志文件
??? READSIZE 1048576? --ORACLE讀取輸入數(shù)據(jù)文件所用的默認(rèn)緩沖區(qū),此處為MB,如專(zhuān)用模式則從PGA分配,如共享模式? 則從SGA分配
??? FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY " " LDRTRIM?? --"|"描述字段的終止符, " "作用符
??? REJECT ROWS WITH ALL NULL FIELDS?? -- --所有為空值的行被跳過(guò)并且記錄到BAD FILE
??? (??????????????????????????????????????????????????????????????????????????? ---下面是描述外部文件各個(gè)列的定義
????? "AREANO" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "CURRENCY" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "APCODE" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "ORGCDE" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "DAMOUNT" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "CAMOUNT" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " ",
????? "REMAKR" CHAR(255)
??????? TERMINATED BY "|" OPTIONALLY ENCLOSED BY " "
??? )
? )
? LOCATION
? (
??? 'MUREX_GLRCN_INIT_20130809.DAT'?? --描述外部文件的文件名
? )
)REJECT LIMIT UNLIMITED?????????? --描述允許的錯(cuò)誤數(shù),此處為無(wú)限制
;

WINDOWS換行是\r\n,十六進(jìn)制數(shù)值是:0D0A
LINUX換行是\n,十六進(jìn)制數(shù)值是:0A

所以我們確定分隔符先用UE查看分隔符,然后再改動(dòng)創(chuàng)建外部表的語(yǔ)句,否則會(huì)加載不成功
由于在源文件換行符為0A,所以換行符應(yīng)改為:
RECORDS DELIMITED BY 0X'0A'?? -- 0X表示十六進(jìn)行,0A為L(zhǎng)INUX換行符.
所以此方法適用于確定換行符.

五.外部表定義的幾個(gè)重點(diǎn)
A.ORGANIZATIONEXTERNAL關(guān)鍵字,必須要有。以表明定義的表為外部表。
B.重要參數(shù)外部表的類(lèi)型
ORACLE_LOADER:定義外部表的缺省方式,只能只讀方式實(shí)現(xiàn)文本數(shù)據(jù)的裝載。
ORACLE_DATAPUMP:支持對(duì)數(shù)據(jù)的裝載與卸載,數(shù)據(jù)文件必須為二進(jìn)制DUMP文件。可以從外部表提取數(shù)據(jù)裝載到內(nèi)部表,也可以從內(nèi)部表卸載數(shù)據(jù)作為二進(jìn)制文件填充到外部表。
C.DEFAULTDIRECTORY:缺省的目錄指明了外部文件所在的路徑
D.LOCATION:定義了外部表的位置
F.ACCESS PARAMETERS:描述如何對(duì)外部表進(jìn)行訪問(wèn)
RECORDS關(guān)鍵字后定義如何識(shí)別數(shù)據(jù)行 ?
DELIMITEDBY'XXX'——換行符,常用NEWLINE定義換行,并指明字符集。對(duì)于特殊的字符則需要單獨(dú)定義,如特殊符號(hào),可以使用OX'十六位值',例如TAB(/T)的十六位是9,則DELIMITEDBY0X'09';CR(/R)的十六位是D,那么就是DELIMITEDBY0X'0D'。 SKIP X ——跳過(guò)X行數(shù)據(jù),有些文件中第一行是列名,需要跳過(guò)第一行,則使用SKIP 1。
FIELDS關(guān)鍵字后定義如何識(shí)別字段,常用的如下:
FIELDS:TERMINATEDBY'X'——字段分割符。
ENCLOSEDBY'X'——字段引用符,包含在此符號(hào)內(nèi)的數(shù)據(jù)都當(dāng)成一個(gè)字段。例如一行數(shù)據(jù)格式如:"ABC","A""B,""C,"。使用參數(shù)TERMINATEDBY','ENCLOSEDBY'"'后,系統(tǒng)會(huì)讀到兩個(gè)字段,第一個(gè)字段的值是ABC,第二個(gè)字段值是A"B,"C,。
LRTRIM ——?jiǎng)h除首尾空白字符。
MISSING FIELDVALUESARENULL——某些字段空缺值都設(shè)為NULL。
對(duì)于字段長(zhǎng)度和分割符不確定且準(zhǔn)備用作外部表文件,可以使用ULTRAEDIT、EDITPLUS等來(lái)進(jìn)行分析測(cè)試,如果文件較大,則需要考慮將文件分割成小文件并從中提取數(shù)據(jù)進(jìn)行測(cè)試。
????? ?
外部表對(duì)錯(cuò)誤的處理
REJECT LIMIT UNLIMITED
在創(chuàng)建外部表時(shí)最后加入LIMIT子句,表示可以允許錯(cuò)誤的發(fā)生個(gè)數(shù)。默認(rèn)值為零。設(shè)定為UNLIMITED則錯(cuò)誤不受限制
BADFILE和NOBADFILE子句
用于指定將捕獲到的轉(zhuǎn)換錯(cuò)誤存放到哪個(gè)文件。如果指定了NOBADFILE則表示忽略轉(zhuǎn)換期間的錯(cuò)誤如果未指定該參數(shù),則系統(tǒng)自動(dòng)在源目錄下生成與外部表同名的.BAD文件BADFILE記錄本次操作的結(jié)果,下次將會(huì)被覆蓋
LOGFILE和NOLOGFILE子句
同樣在ACCESSPARAMETERS中加入LOGFILE'LOG_FILE.LOG'子句,則所有ORACLE的錯(cuò)誤信息放入'LOG_FILE.LOG'中而NOLOGFILE子句則表示不記錄錯(cuò)誤信息到LOG中,如忽略該子句,系統(tǒng)自動(dòng)在源目錄下生成與外部表同名的.LOG文件

轉(zhuǎn)載于:https://www.cnblogs.com/chinaxin/p/3333174.html

總結(jié)

以上是生活随笔為你收集整理的Oracle的外部表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。