电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳細(xì)講解Oracle SQL*Loader的使用方法

瀏覽:3日期:2023-11-23 15:14:14

SQL*Loader是Oracle數(shù)據(jù)庫導(dǎo)入外部數(shù)據(jù)的一個工具.它和DB2的Load工具相似,但有更多的選擇,它支持變化的加載模式,可選的加載及多表加載.

如何使用 SQL*Loader 工具

我們可以用Oracle的sqlldr工具來導(dǎo)入數(shù)據(jù)。例如:

sqlldr scott/tiger control=loader.ctl

控制文件(loader.ctl) 將加載一個外部數(shù)據(jù)文件(含分隔符). loader.ctl如下:

load data

infile 'c:datamydata.csv'

into table emp

fields terminated by ',' optionally enclosed by '''

( empno, empname, sal, deptno )

mydata.csv 如下:

10001,'Scott Tiger', 1000, 40

10002,'Frank Naude', 500, 20

下面是一個指定記錄長度的示例控制文件。'*' 代表數(shù)據(jù)文件與此文件同名,即在后面使用BEGINDATA段來標(biāo)識數(shù)據(jù)。

load data

infile *

replace

into table departments

( dept position (02:05) char(4),

deptname position (08:27) char(20)

)

begindata

COSC COMPUTER SCIENCE

ENGL ENGLISH LITERATURE

MATH MATHEMATICS

POLY POLITICAL SCIENCE

Unloader這樣的工具

Oracle 沒有提供將數(shù)據(jù)導(dǎo)出到一個文件的工具。但是,我們可以用SQL*Plus的select 及 format 數(shù)據(jù)來輸出到一個文件:

set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on

spool oradata.txt

select col1 || ',' || col2 || ',' || col3

from tab1

where col2 = 'XYZ';

spool off

另外,也可以使用使用 UTL_FILE PL/SQL 包處理:

rem Remember to update initSID.ora, utl_file_dir='c:oradata' parameter

declare

fp utl_file.file_type;

begin

fp := utl_file.fopen('c:oradata','tab1.txt','w');

utl_file.putf(fp, '%s, %sn', 'TextField', 55);

utl_file.fclose(fp);

end;

/

當(dāng)然你也可以使用第三方工具,如SQLWays ,TOAD for Quest等。

加載可變長度或指定長度的記錄

如:

LOAD DATA

INFILE *

INTO TABLE load_delimited_data

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '''

TRAILING NULLCOLS

( data1,

data2

)

BEGINDATA

11111,AAAAAAAAAA

22222,'A,B,C,D,'

下面是導(dǎo)入固定位置(固定長度)數(shù)據(jù)示例:

LOAD DATA

INFILE *

INTO TABLE load_positional_data

( data1 POSITION(1:5),

data2 POSITION(6:15)

)

BEGINDATA

11111AAAAAAAAAA

22222BBBBBBBBBB

跳過數(shù)據(jù)行:

可以用 'SKIP n' 關(guān)鍵字來指定導(dǎo)入時可以跳過多少行數(shù)據(jù)。如:

LOAD DATA

INFILE *

INTO TABLE load_positional_data

SKIP 5

( data1 POSITION(1:5),

data2 POSITION(6:15)

)

BEGINDATA

11111AAAAAAAAAA

22222BBBBBBBBBB

導(dǎo)入數(shù)據(jù)時修改數(shù)據(jù):

在導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫時,可以修改數(shù)據(jù)。注意,這僅適合于常規(guī)導(dǎo)入,并不適合 direct導(dǎo)入方式.如:

LOAD DATA

INFILE *

INTO TABLE modified_data

( rec_no 'my_db_sequence.nextval',

region CONSTANT '31',

time_loaded 'to_char(SYSDATE, 'HH24:MI')',

data1 POSITION(1:5) ':data1/100',

data2 POSITION(6:15) 'upper(:data2)',

data3 POSITION(16:22)'to_date(:data3, 'YYMMDD')'

)

BEGINDATA

11111AAAAAAAAAA991201

22222BBBBBBBBBB990112

LOAD DATA

INFILE 'mail_orders.txt'

BADFILE 'bad_orders.txt'

APPEND

INTO TABLE mailing_list

FIELDS TERMINATED BY ','

( addr,

city,

state,

zipcode,

mailing_addr 'decode(:mailing_addr, null, :addr, :mailing_addr)',

mailing_city 'decode(:mailing_city, null, :city, :mailing_city)',

mailing_state

)

將數(shù)據(jù)導(dǎo)入多個表:

如:

LOAD DATA

INFILE *

REPLACE

INTO TABLE emp

WHEN empno != ' '

( empno POSITION(1:4) INTEGER EXTERNAL,

ename POSITION(6:15) CHAR,

deptno POSITION(17:18) CHAR,

mgr POSITION(20:23) INTEGER EXTERNAL

)

INTO TABLE proj

WHEN projno != ' '

( projno POSITION(25:27) INTEGER EXTERNAL,

empno POSITION(1:4) INTEGER EXTERNAL

)

導(dǎo)入選定的記錄:

如下例: (01) 代表第一個字符, (30:37) 代表30到37之間的字符:

LOAD DATA

INFILE 'mydata.dat' BADFILE 'mydata.bad' DISCARDFILE 'mydata.dis'

APPEND

INTO TABLE my_selective_table

WHEN (01) <> 'H' and (01) <> 'T' and (30:37) = '19991217'

(

region CONSTANT '31',

service_key POSITION(01:11) INTEGER EXTERNAL,

call_b_no POSITION(12:29) CHAR

)

導(dǎo)入時跳過某些字段:

可用 POSTION(x:y) 來分隔數(shù)據(jù). 在Oracle8i中可以通過指定 FILLER 字段實(shí)現(xiàn)。FILLER 字段用來跳過、忽略導(dǎo)入數(shù)據(jù)文件中的字段.如:

LOAD DATA

TRUNCATE INTO TABLE T1

FIELDS TERMINATED BY ','

( field1,

field2 FILLER,

field3

)

導(dǎo)入多行記錄:

可以使用下面兩個選項(xiàng)之一來實(shí)現(xiàn)將多行數(shù)據(jù)導(dǎo)入為一個記錄:

CONCATENATE: - use when SQL*Loader should combine the same number of physical records together to form one logical record.

CONTINUEIF - use if a condition indicates that multiple records should be treated as one. Eg. by having a '#' character in column 1.

SQL*Loader 數(shù)據(jù)的提交:

一般情況下是在導(dǎo)入數(shù)據(jù)文件數(shù)據(jù)后提交的。

也可以通過指定 ROWS= 參數(shù)來指定每次提交記錄數(shù)。

提高 SQL*Loader 的性能:

1) 一個簡單而容易忽略的問題是,沒有對導(dǎo)入的表使用任何索引和/或約束(主鍵)。如果這樣做,甚至在使用ROWS=參數(shù)時,會很明顯降低數(shù)據(jù)庫導(dǎo)入性能。

2) 可以添加 DIRECT=TRUE來提高導(dǎo)入數(shù)據(jù)的性能。當(dāng)然,在很多情況下,不能使用此參數(shù)。

3) 通過指定 UNRECOVERABLE選項(xiàng),可以關(guān)閉數(shù)據(jù)庫的日志。這個選項(xiàng)只能和 direct 一起使用。

4) 可以同時運(yùn)行多個導(dǎo)入任務(wù).

常規(guī)導(dǎo)入與direct導(dǎo)入方式的區(qū)別:

常規(guī)導(dǎo)入可以通過使用 INSERT語句來導(dǎo)入數(shù)據(jù)。Direct導(dǎo)入可以跳過數(shù)據(jù)庫的相關(guān)邏輯(DIRECT=TRUE),而直接將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)文件中。

導(dǎo)入數(shù)據(jù)時修改數(shù)據(jù):

在導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫時,可以修改數(shù)據(jù)。注意,這僅適合于常規(guī)導(dǎo)入,并不適合 direct導(dǎo)入方式.如:

LOAD DATA

INFILE *

INTO TABLE modified_data

( rec_no 'my_db_sequence.nextval',

region CONSTANT '31',

time_loaded 'to_char(SYSDATE, 'HH24:MI')',

data1 POSITION(1:5) ':data1/100',

data2 POSITION(6:15) 'upper(:data2)',

data3 POSITION(16:22)'to_date(:data3, 'YYMMDD')'

)

BEGINDATA

11111AAAAAAAAAA991201

22222BBBBBBBBBB990112

LOAD DATA

INFILE 'mail_orders.txt'

BADFILE 'bad_orders.txt'

APPEND

INTO TABLE mailing_list

FIELDS TERMINATED BY ','

( addr,

city,

state,

zipcode,

mailing_addr 'decode(:mailing_addr, null, :addr, :mailing_addr)',

mailing_city 'decode(:mailing_city, null, :city, :mailing_city)',

mailing_state

)

將數(shù)據(jù)導(dǎo)入多個表:

如:

LOAD DATA

INFILE *

REPLACE

INTO TABLE emp

WHEN empno != ' '

( empno POSITION(1:4) INTEGER EXTERNAL,

ename POSITION(6:15) CHAR,

deptno POSITION(17:18) CHAR,

mgr POSITION(20:23) INTEGER EXTERNAL

)

INTO TABLE proj

WHEN projno != ' '

( projno POSITION(25:27) INTEGER EXTERNAL,

empno POSITION(1:4) INTEGER EXTERNAL

)

導(dǎo)入選定的記錄:

如下例: (01) 代表第一個字符, (30:37) 代表30到37之間的字符:

LOAD DATA

INFILE 'mydata.dat' BADFILE 'mydata.bad' DISCARDFILE 'mydata.dis'

APPEND

INTO TABLE my_selective_table

WHEN (01) <> 'H' and (01) <> 'T' and (30:37) = '19991217'

(

region CONSTANT '31',

service_key POSITION(01:11) INTEGER EXTERNAL,

call_b_no POSITION(12:29) CHAR

)

導(dǎo)入時跳過某些字段:

可用 POSTION(x:y) 來分隔數(shù)據(jù). 在Oracle8i中可以通過指定 FILLER 字段實(shí)現(xiàn)。FILLER 字段用來跳過、忽略導(dǎo)入數(shù)據(jù)文件中的字段.如:

LOAD DATA

TRUNCATE INTO TABLE T1

FIELDS TERMINATED BY ','

( field1,

field2 FILLER,

field3

)

導(dǎo)入多行記錄:

可以使用下面兩個選項(xiàng)之一來實(shí)現(xiàn)將多行數(shù)據(jù)導(dǎo)入為一個記錄:

CONCATENATE: - use when SQL*Loader should combine the same number of physical records together to form one logical record.

CONTINUEIF - use if a condition indicates that multiple records should be treated as one. Eg. by having a '#' character in column 1.

SQL*Loader 數(shù)據(jù)的提交:

一般情況下是在導(dǎo)入數(shù)據(jù)文件數(shù)據(jù)后提交的。

也可以通過指定 ROWS= 參數(shù)來指定每次提交記錄數(shù)。

提高 SQL*Loader 的性能:

1) 一個簡單而容易忽略的問題是,沒有對導(dǎo)入的表使用任何索引和/或約束(主鍵)。如果這樣做,甚至在使用ROWS=參數(shù)時,會很明顯降低數(shù)據(jù)庫導(dǎo)入性能。

2) 可以添加 DIRECT=TRUE來提高導(dǎo)入數(shù)據(jù)的性能。當(dāng)然,在很多情況下,不能使用此參數(shù)。

3) 通過指定 UNRECOVERABLE選項(xiàng),可以關(guān)閉數(shù)據(jù)庫的日志。這個選項(xiàng)只能和 direct 一起使用。

4) 可以同時運(yùn)行多個導(dǎo)入任務(wù).

常規(guī)導(dǎo)入與direct導(dǎo)入方式的區(qū)別:

常規(guī)導(dǎo)入可以通過使用 INSERT語句來導(dǎo)入數(shù)據(jù)。Direct導(dǎo)入可以跳過數(shù)據(jù)庫的相關(guān)邏輯(DIRECT=TRUE),而直接將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)文件中。

sqlldr使用例子說明

先把Excel另存為.csv格式文件,如test.csv,再編寫一個insert.ctl

用sqlldr進(jìn)行導(dǎo)入!

insert.ctl內(nèi)容如下:

load data --1、控制文件標(biāo)識

infile 'test.csv' --2、要輸入的數(shù)據(jù)文件名為test.csv

append into table table_name --3、向表table_name中追加記錄

fields terminated by ',' --4、字段終止于',',是一個逗號

(field1,

field2,

field3,

...

fieldn)-----定義列對應(yīng)順序

注意括號中field排列順序要與csv文件中相對應(yīng)

然后就可以執(zhí)行如下命令:

sqlldr user/password control=insert.ctl

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 搪瓷搅拌器,搪玻璃搅拌器,搪玻璃冷凝器_厂家-淄博越宏化工设备 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | LED显示屏_LED屏方案设计精准报价专业安装丨四川诺显科技 | 数控走心机-双主轴走心机厂家-南京建克 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 深圳成考网-深圳成人高考报名网 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 天长市晶耀仪表有限公司| 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 |