`
jianghg2010
  • 浏览: 64800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLLOAD使用

阅读更多
在命令行下执行 Oracle 的 sqlldr 命令

比如:
1、[oracle@ ~]$ sqlldr abc/abc@ABC control=user.ctl direct=true;

2、user.ctl文件
OPTIONS (skip=1,rows=128)
unrecoverable
Load DATA
INFILE "/home/share/sqlload/user_data.csv"
INFILE "/home/share/sqlload/user_data1.csv"
REPLACE INTO TABLE users
Fields terminated by ","
Optionally enclosed by '"'
trailing nullcols
(
virtual_column FILLER,
user_id,
user_name,
login_times,
last_login DATE "YYYY-MM-DD HH24:MI:SS"
)

3、INTO TABLE前面可以写如下关键字
1) insert     --为缺省方式,在数据装载开始时要求表为空 
2) append     --在表中追加新记录 
3) replace    --删除旧记录(用 delete from table 语句),替换成新装载的记录 
4) truncate   --删除旧记录(用 truncate table 语句),替换成新装载的记录

Oracle数据库SqlLoad常用技巧:

1、控制文件中注释用“--”。

2、为防止导入出现中文乱码,在控制文件中加入字符集控制
LOAD DATA 
CHARACTERSET ZHS16GBK

3、让某一列成为行号,用RECNUM关键字
load data     
infile *     
into table t     
replace     
( seqno RECNUM //载入每行的行号     
text Position(1:1024))     
BEGINDATA     
fsdfasj 

4、过滤某一列,用FILLER关键字
LOAD DATA   
TRUNCATE INTO TABLE T1   
FIELDS TERMINATED BY ','   
( field1,   
field2 FILLER,   
field3   
)  

5、过滤行

在INTO TABLE table_name后加WHEN过滤条件,但功能有限,如果以竖线分隔符的文件,不能实现字段级的过滤,定长的还好。

LOAD DATA   
INFILE 'mydata.dat'   
BADFILE 'mydata.bad'   
DISCARDFILE 'mydata.dis'   
APPEND   
INTO TABLE my_selective_table   
WHEN  call_b_no <> '1' 
(   
region              CONSTANT '31',   
service_key         POSITION(01:11)   INTEGER EXTERNAL,   
call_b_no           POSITION(12:29)   CHAR   
)  
6、过滤首行,用OPTIONS (SKIP 1)选项,也可以写在命令行中,如:

sqlldr sms/admin control=test.ctl skip=1 

7、TRAILING NULLCOLS的使用,作用是表的字段没有对应的值时允许为空

如:

LOAD DATA     
INFILE *     
INTO TABLE DEPT     
REPLACE     
FIELDS TERMINATED BY ','     
TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应的列的值的如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了     
(DEPTNO,     
DNAME "upper(:dname)", // 使用函数     
LOC "upper(:loc)",     
LAST_UPDATED date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等     
ENTIRE_LINE ":deptno||:dname||:loc||:last_updated"     
)     
BEGINDATA     
10,Sales,Virginia,1/5/2000     
20,Accounting,Virginia,21/6/1999     
30,Consulting,Virginia,5/1/2000     
40,Finance,Virginia,15/3/2001 
8、添加、修改数据

(1)、 

LOAD DATA   
INFILE *   
INTO TABLE tmp_test   
( 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 
(2)、 

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   
)  
9、合并多行记录为一行记录

通过关键字concatenate 把几行的记录看成一行记录:

LOAD DATA     
INFILE *     
concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录     
INTO TABLE DEPT     
replace     
FIELDS TERMINATED BY ','     
(DEPTNO,     
DNAME "upper(:dname)",     
LOC "upper(:loc)",     
LAST_UPDATED date 'dd/mm/yyyy'     
)     
BEGINDATA     
10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000     
Virginia,     
1/5/2000 
10、用”|+|”分隔符,避免数据混淆:fields terminated by "|+|"

11、如果数据文件包含在控制文件中,用INFILE *

如下:

LOAD DATA   
INFILE *   
append   
INTO TABLE tmp_test   
FIELDS TERMINATED BY ","   
OPTIONALLY ENCLOSED BY '"'   
TRAILING NULLCOLS   
( data1,   
data2   
)   
BEGINDATA   
11111,AAAAAAAAAA   
22222,"A,B,C,D,"  
12、一次导入多个文件到同一个表

LOAD DATA   
INFILE file1.dat   
INFILE file2.dat   
INFILE file3.dat   
APPEND   
INTO TABLE emp   
( empno POSITION(1:4)   INTEGER EXTERNAL,   
ename POSITION(6:15) CHAR,   
deptno POSITION(17:18) CHAR,   
mgr    POSITION(20:23) INTEGER EXTERNAL   

13、将一个文件导入到不同的表

(1)、 

LOAD DATA   
INFILE *   
INTO TABLE tab1 WHEN tab = 'tab1'   
( tab FILLER CHAR(4),   
col1 INTEGER   
)   
INTO TABLE tab2 WHEN tab = 'tab2'   
( tab FILLER POSITION(1:4),   
col1 INTEGER   
)   
BEGINDATA   
tab1|1   
tab1|2   
tab2|2   
tab3|3   
============== 
(2)、 

LOAD DATA   
INFILE 'mydata.dat'   
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   
)  
14、过滤掉的数据文件路径指定

/opt/app/oracle/product/10.2.0/bin/sqlldr APS/APS control=/home/oracle/APS_LOAD/ctl/AP_CONTRACT.CTL LOG=/home/oracle/APS_LOAD/log/$yesterday/AP_CONTRACT_$yesterday.log bad=/home/oracle/APS_LOAD/bad/DUE_BILL_$yesterday.bad rows=10000 readsize=20000000 bindsize=20000000  DISCARD=/home/oracle/APS_LOAD/bad/discard_ts.dis
15、附:测试用控制文件

LOAD DATA   
INFILE '/home/oracle/APS_LOAD/dat/APS_AP_CONTRACT.dat'   
TRUNCATE   
INTO TABLE AP_CONTRACT   
WHEN (01)<>'1'   
FIELDS TERMINATED BY "|"   
TRAILING NULLCOLS   
(   
AGMT_NO                  "(TRIM(:AGMT_NO               ))",       
CONTRACT_NO         FILLER, --     "(TRIM(:CONTRACT_NO           ))",    
LOAN_AMT                 "(TRIM(:LOAN_AMT              ))",   
AGMT_HOLDER              "(TRIM(:AGMT_HOLDER           ))",   
LOAN_TYPE_CD             "(TRIM(:LOAN_TYPE_CD          ))",   
CURR_CD                  "(TRIM(:CURR_CD               ))",   
BALANCE                  "(TRIM(:BALANCE               ))",   
LOAN_DIRC_CD             "(TRIM(:LOAN_DIRC_CD          ))",   
AGMT_START_DATE          "(TRIM(:AGMT_START_DATE       ))",   
AGMT_END_DATE            "(TRIM(:AGMT_END_DATE         ))",   
AGMT_BELONG_ORG_NO       "(TRIM(:AGMT_BELONG_ORG_NO    ))",   
MANAGER_NO               "(TRIM(:MANAGER_NO            ))",   
PROCESS_RATE             "(TRIM(:PROCESS_RATE          ))",   
INSURE_METH_TYPE_CD      "(TRIM(:INSURE_METH_TYPE_CD   ))",   
AGMT_SIGN_DATE           "(TRIM(:AGMT_SIGN_DATE        ))",   
LOAN_PROP_CD             "(TRIM(:LOAN_PROP_CD          ))",   
LOAN_USE_TYPE            "(TRIM(:LOAN_USE_TYPE         ))",   
ENTRUST_LOAN_FLAG        "(TRIM(:ENTRUST_LOAN_FLAG     ))",   
ENTRUST_NAME             "(TRIM(:ENTRUST_NAME          ))",   
FARM_LOAN_FLAG           "(TRIM(:FARM_LOAN_FLAG        ))",   
FARM_LOAN_TYPE_CD        "(TRIM(:FARM_LOAN_TYPE_CD     ))",   
LOAN_BIZ_TYPE_CD         "(TRIM(:LOAN_BIZ_TYPE_CD      ))",   
ID_TEST                       RECNUM ,   
CHAR_TEST                     CONSTANT '31',   
SQ                        "sqlldr.nextval",   
TEST_4                    "TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS')",   
TEST_5                    "(TRIM(:LOAN_BIZ_TYPE_CD)||'---'||TRIM(:AGMT_NO))"   
)  
分享到:
评论

相关推荐

    sqlload的使用

    ### SQL*Loader 使用详解 #### 一、简介与概述 SQL*Loader 是 Oracle 提供的一款高效数据加载工具,主要用于将外部文件中的数据批量导入到 Oracle 数据库中。它支持多种格式的数据文件,并能够处理大量的数据记录...

    sqlload简单实例

    本实例将向你展示如何使用SQLLOAD进行数据导入,并附带了相应的语句和批处理文件,以便你理解并实践操作。 首先,SQLLOAD的工作原理是读取外部文件(如CSV或固定宽度格式的文件)中的数据,然后将其快速地插入到...

    sqlload入门简单教程

    这个“sqlload入门简单教程”旨在帮助初学者掌握如何使用SQL*Loader进行数据加载操作。 首先,我们需要理解SQL*Loader的工作原理。它从外部文件(如CSV、TXT或DBF)读取数据,然后根据控制文件的指示将这些数据插入...

    sql load运用总结

    ### SQL Load运用总结:Oracle SQL Loader深入解析 SQL Load,更准确地说,是Oracle SQL Loader,是一种高效的数据加载工具,用于将外部数据源中的数据批量加载到Oracle数据库中。SQL Loader支持多种数据格式,包括...

    sqlload 资料

    本文将详细介绍 sqlload 的使用方法和知识点。 首先,sqlload 命令的基本格式为: ``` sqlldr userid=lgone/tiger control=a.ctl ``` 其中,`userid` 是数据库用户名和密码,`control` 是控制文件的名称。 控制...

    SQL LOAD生成测试文件、控制文件、执行命令

    生成测试数据文件,包含"|"分隔的数据 SQL Load控制文件 执行sqlldr命令

    sqlload2数据库大量数据导出工具

    oracle/mysql,大量数据导出工具。快速方便。

    oracle sqlload loaddata.ctl 使用例子

    在这个"oracle sqlload loaddata.ctl 使用例子"中,我们将深入探讨如何利用SQL*Loader将文本文件(如"data.txt")中的数据高效地加载到Oracle数据库中。 首先,`loaddata.ctl`是SQL*Loader的数据装载控制文件,它是...

    sqlload learn

    LOAD DATA CHARACTERSET ZHS16GBK --让导入的为 中文 防止乱码 INFILE 'F:\MYSQLLOAD\kikop_source.txt' BADFILE 'F:\MYSQLLOAD\kikop_error.txt' --REPLACE APPEND --INSERT --TRUNCATE INTO TABLE sys.mysqlload ...

    sqlload 文档

    与 DB2 的 Load 工具相比,SQL*Loader 提供了更多的功能选项,包括灵活的加载模式、可选的加载策略以及支持多表加载等特性。 #### 二、SQL*Loader 的基本使用方法 使用 SQL*Loader 需要通过命令行调用 `sqlldr` ...

    sqlload将文件导入oracle

    本文将详细介绍如何使用SQL*Loader将Excel数据文件导入Oracle数据库,并通过一个实际的例子来演示整个过程。 #### 二、环境搭建与配置 ##### 2.1 系统环境 - **本地机操作系统**:Windows 2000 Server - **内存**...

    oracle -sqlloader使用方法

    ### Oracle SQL*Loader 使用方法详解 #### 一、SQL*Loader 概览 SQL*Loader 是 Oracle 数据库中用于批量导入外部数据至数据库的强大工具。它不仅具备与 DB2 Load 工具类似的功能,还提供了更为灵活的加载选项,...

    coe_load_sql_profile.sql

    oracle sqlt工具脚本,用来使用sql_profile绑定内存中已有的执行计划

    sqlloader

    例如,创建一个控制文件来定义CSV文件中各列与目标表字段之间的映射关系,设定数据类型转换规则,以及如何使用SQL*Loader命令进行数据加载等。 总之,SQL*Loader作为Oracle数据库管理工具集的重要组成部分,为数据...

    oracle sqlloader使用指南

    下面我们将深入探讨如何使用SQL*Loader以及其关键特性。 首先,SQL*Loader通过控制文件(如`loader.ctl`)来定义数据导入的具体规则。控制文件中包含了数据文件的位置、字段分隔符、数据类型转换、加载模式等信息。...

    sql*loader 指南

    除了使用SQL*Loader导入数据之外,还可以通过其他方式导出数据,例如使用SQL*Plus、PL/SQL或第三方工具。 ##### 使用SQL*Plus导出数据 ```sql set echo off newpage 0 space 0 pagesize 0 feed off head off trim ...

    dataload程序及使用说明

    然后,`dataload` 会读取这个文件,将每一行数据转化为一系列的键盘事件,就像手动在键盘上敲击一样,这些事件会被发送到目标应用程序(如SQL*Loader或DBMS_LOB等)以执行数据加载操作。 **使用步骤** 1. **数据...

    向shell或者sql脚本传参或接收参数的方法

    在IT领域,尤其是在系统管理和自动化任务执行中,Shell脚本和SQL脚本的使用非常普遍。它们能够有效地处理日常的任务,比如数据处理、系统管理等。这篇文章将详细讲解如何向Shell或SQL脚本传递参数以及如何在脚本中...

    Oracle sqlloader使用指南

    与DB2的Load工具相比,SQL*Loader提供了更多灵活性,包括多种加载模式、选择性加载以及多表加载功能。 使用SQL*Loader时,首先需要创建一个控制文件(如`loader.ctl`),这个文件定义了数据文件的格式和数据库表的...

    oracle SQL Loader使用实例

    Oracle SQL Loader 使用实例 Oracle SQL Loader 是一种强大的数据导入工具,允许用户从文本文件或其他数据源中导入数据到 Oracle 数据库中。本文将详细介绍 Oracle SQL Loader 的使用实例,包括建立文本文件、编写...

Global site tag (gtag.js) - Google Analytics