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

sqlloader 语法

阅读更多
1.控制根据数据不同插入不同的表(条件装载);
2.FIELDS TERMINATED BY x’09′ (制表符)whitespace(空格)等不同的数据分隔符号
3.装载定长数据;
4.装载变长数据;
5.装载嵌套数据;
6.在sqlldr中使用函数
7.如何装载日期类型纪录
8.装载分区表;
9.TRAILING NULLCOLS
10.使用filler 跳过 在导入数据文本中不想进行导入的列

控制根据数据不同插入不同的表
包括文件:日志文件;控制文件;坏记录文件;废弃记录文件(when)
控制文件:
load data
1说明输入文件 infile后根文件名.默认扩展名为’.dat’
infile=’accounts’
用单引号’ 括起文件名accounts.dat
2处理选项discardfile badfile
load data
infile ‘accounts’ discardfile mtidsc.rec badfile mthad.rec
3目标对象—–表
slqloader的用户必要有insert的权限.into table 开头
into table account_trans
when day between ‘01′ and ‘31′
into table account_nbr
when account_type between ‘aa’ and ‘zz’  这样可以根据条件插入不同的表
4目标对象—-分区表或者某个分区
into table sale partition(east_data)…..
如果一次装在所有分区,可以用目标对象—-表的方法进行处理 into table sale….
5记录生成模式—Insert,Replace,Append
Insert–缺省模式,装在之前,table必须为空表;;
Replace –先删除所有记录,然后装在满足when条件的行;(需要delete的权限)
Append–表中原有记录保存,加入新的行.;;

处理定长记录
load data
infile ‘account.dat’
into table count_trans append
when year=’1990′
(account_nbr position(01:10) character,
day position(11:12) character,
month position(13:14) character,
transaction_code position(15:16) character,
credit_amount position(17:30) character)
into table count replace
when year>’1990′
(account_nbr position(01:10) character,
day position(11:12) character,
month position(13:14) character,
transaction_code position(15:16) character,
credit_amount position(17:30) character)

处理变长记录(从access到oracle)
分隔符:概念.在一行中将一项信息与另一项信息分离开的一个字符标记.
load data
infile ‘customer.dat’
into table aa append
(customer_id char terminated by ‘ ‘,
status char terminated by ‘ ‘,
dsc_class char enclosed by ‘ ‘,
source char terminated by whitespace)
1>单引号分割.末尾的信息项不已逗号结束,用关键字whitespace

FIELDS TERMINATED BY x’09′ (制表符)

LOAD DATA
INFILE *
INTO TABLE DEPT1
REPLACE
FIELDS TERMINATED BY X’09′
(DEPTNO,
DNAME,
LOC
)
BEGINDATA
10 Sales Virginia
by x’09′遇见一个制表符.它将输出一个直 也就是在制表符之间的数据
SVRMGR> host sqlldr scott/scott control=c:control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期六 8月 24 21:04:26 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数1
SVRMGR> select *from dept1;
DEPTNO DNAME LOC
———- ————– ————-
10 Sales
已选择 1 行。

使用filler 跳过 在导入数据文本中不想进行导入的列

demo
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ‘,’
(DEPTNO,
DNAME “upper(:dname)”,
LOC “upper(:loc)”,
LAST_UPDATED date ‘dd/mm/yyyy’
)
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

u can see upper functions
sqlldr is a tool that can parse input variables and form its insert sql using bind values.
like normal controlfile
FIELDS TERMINATED BY ‘,’
(DEPTNO,
DNAME ,
LOC ,
LAST_UPDATED date
)
oracle’s sqlldr change it equal insert into table values(:deptno,:dname,:loc,:last_updated);
when load data sqlldr parse each record row and bind variables
once parse else execute!

so like
(DEPTNO,
DNAME “upper(:dname)”,
LOC “upper(:loc)”,
LAST_UPDATED date ‘dd/mm/yyyy’
)
sql : insert into table values(:deptno,upper(name),upper(:loc),:last_updated )
the ” LAST_UPDATED date ‘dd/mm/yyyy’ ” inside date ‘dd/mm/yyyy’ is only the variable ’s datatype not functions
u can aslo use function to_date() then it deference

SVRMGR> host sqlldr scott/scott control=control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期日 8月 25 00:46:04 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数4
SVRMGR> select *from dept1;
DEPTNO DNAME LOC LAST_UPDA
———- ————– ————- ———
10 SALES VIRGINIA 01-5月 -0
20 ACCOUNTING VIRGINIA 21-6月 -9
30 CONSULTING VIRGINIA 05-1月 -0
40 FINANCE VIRGINIA 15-3月 -0
已选择4行。

TRAILING NULLCOLS

my compute just down i lose some article yet not been submit
i am so lazy not want to repeat just go on topic
about trailing nullcols
see the control file just TRAILING NULLCOls the purpose of our sqlldr is explicit. we want to load entire_line into table but it doesn’t exist in BEGINDATA segements .
so oracle provide a flag TRAILING NULLCOLS IF U DON’T USE IT ALL ROWS WILL BE DISCARD INTO DISCARD FILE IF U appoint it u shoud try what i said in no using TRAILING NULLCOLS mode

LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ‘,’
TRAILING NULLCOLS
(DEPTNO,
DNAME “upper(:dname)”,
LOC “upper(:loc)”,
LAST_UPDATED date ‘dd/mm/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

let’s goon
TRAILING NULLCOLS for u to appoint the last column a value “NULL” so in begindata it form a noexist column with value null
do it
SVRMGR> select *from dept1;
DEPTNO DNAME LOC LAST_UPDA ENTIRE_LINE
———- ————– ————- ——— ——————————
10 SALES VIRGINIA 01-5月 -0 10SalesVirginia1/5/2000
40 FINANCE VIRGINIA 15-3月 -0 40FinanceVirginia15/3/2001
20 ACCOUNTING VIRGINIA 21-6月 -9 20AccountingVirginia21/6/1999
30 CONSULTING VIRGINIA 05-1月 -0 30ConsultingVirginia5/1/2000
已选择4行。
SVRMGR>

sqlldr with function is powerful magic

power function CASE When…..END relation discard file
just provide a controlf file
lazy to do it
———————————————–
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ‘,’
TRAILING NULLCOLS
(DEPTNO,
DNAME “upper(:dname)”,
LOC “upper(:loc)”,
LAST_UPDATED “case when length(:last_updated) <= 10
then to_date(:last_updated,’dd/mm/yyyy’)
else to_date(:last_updated,’dd/mm/yyyy hh24:mi:ss’)
end”
)
BEGINDATA
10,Sales,Virginia,1/5/2000 12:03:03
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000 01:23:00
40,Finance,Virginia,15/3/2001

sometimes customer give our data.txt date format are too different so we have ablility to create own functions
BEGINDATA
10,Sales,Virginia,01-april-2001
20,Accounting,Virginia,13/04/2001
30,Consulting,Virginia,14/04/2001 12:02:02
40,Finance,Virginia,987268297
50,Finance,Virginia,02-apr-2001
60,Finance,Virginia,Not a date

i copy a good fucniton from TOM
create or replace
function my_to_date( p_string in varchar2 ) return date
as
type fmtArray is table of varchar2(25);
l_fmts fmtArray := fmtArray( ‘dd-mon-yyyy’, ‘dd-month-yyyy’,
‘dd/mm/yyyy’,
‘dd/mm/yyyy hh24:mi:ss’ );
l_return date;
begin
for i in 1 .. l_fmts.count
loop
begin
l_return := to_date( p_string, l_fmts(i) );
exception
when others then null;
end;
EXIT when l_return is not null;
end loop;
if ( l_return is null )
then
l_return :=
new_time( to_date(’01011970′,’ddmmyyyy’) + 1/24/60/60 *
p_string, ‘GMT’, ‘EST’ );
end if;
return l_return;
end;
/

use of it if other format it would in bad file we kan reload it

使用sqlldr 应该注意的问题

1 不能选择使用哪个回滚段
装载的时候 使用replace 来slqldr时候 在装载之前,它会发出delete命令 这样将产生大量的回滚. 为了实现这个操作 你可能想要指定sqlldr使用一个特定的回滚段

你必须保证任何一个回滚段有足够的长度来容纳delete 或者使用truncate 选项 由于insert并没有产生过多的回滚,因为它只写 rowid into redo 理解没有问题吧??

2truncate选项 为truncate table t reuse storage

SQLLDR默认输入流为数据类型为CHAR 长度为 255 所以当 begindata section里面的 输入流 长于255 的时候会报错的
应该是 Record N Rejected Eorr for columnn
field in data file exceed max length

sqlldr希望你输入小于255字节或更少字节的数据,而获得的比这要多,解决的方法是在控制文件中只是单纯地使用 char(N) n是可以包括你输入列地最大长度

比方说load long类型 地时候 可以 输入 char(10000) ^_^

就到这里 大家如果发现有什么bug 请贴出来 thx

LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”‘
( DEPTNO,
FILLER_1 FILLER, //see it filler
DNAME,
LOC
)
BEGINDATA
20,Something Not To Be Loaded,Accounting,”Virginia,USA”
当装载数据时候 需要在输入记录中跳过各种不同的列是非常普通的

例如你想 装入 1.3.5列 跳过2.4列 可以利用filler
它可以让我们在数据流里面指定一个列 不把他放到数据库中
SVRMGR> host sqlldr scott/scott control=c:control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期六 8月 24 21:16:52 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数1
SVRMGR> select *from dept1;
DEPTNO DNAME LOC
———- ————– ————-
20 Accounting Virginia,USA

在sqlldr中使用函数 解析sqlldr本质 important
分享到:
评论

相关推荐

    关于 Oracle 的数据导入导出及 Sql Loader (sqlldr)

    Sql Loader(SQL*Loader)是Oracle提供的一种高效的数据加载工具,可以快速将数据从外部文件加载到数据库表中。在本篇中,我们将深入探讨Oracle的数据导入导出及Sql Loader的使用方法。 1. **Oracle数据导入导出** ...

    oracle sql loader 用法详解

    运行此命令后,将显示SQL Loader的版本信息、版权声明以及基础的使用语法。下面我们将详细介绍SQL Loader的有效关键字及其功能。 #### SQL Loader关键字与参数 SQL Loader提供了丰富的关键字供用户配置数据加载...

    sqlloader数据导入详解

    #### 二、SQL*Loader工作原理及基本语法 SQL*Loader 的核心功能在于能够读取外部文件并将其加载到指定的数据库表中。下面通过一个示例来了解 SQL*Loader 的基本语法和操作流程: ```sql LOAD DATA INFILE '/ora9i/...

    sqlloader

    SQL*Loader的命令行语法允许用户指定加载操作的各种参数,包括数据文件路径、控制文件位置、登录信息、加载模式等。正确设置这些参数是确保数据成功导入的关键。 #### 示例与实践 深入研究SQL*Loader的例子对于...

    sqlloader的成功案例

    在IT领域,尤其是在数据库管理与数据导入导出技术中,Oracle SQL*Loader是一个非常重要的工具。SQL*Loader的成功案例不仅展示了其高效的数据加载能力,还体现了它在处理大量数据时的灵活性与可靠性。本文将根据提供...

    SQL*Loader详细介绍

    SQL*Loader是Oracle数据库系统中的一个强大工具,用于高效地将大量数据从外部文件批量导入到数据库中。它尤其适用于处理大数据量的场景,如数据仓库的构建和维护。SQL*Loader的操作流程主要包括创建控制文件、准备...

    Oracle SQL Loader的详细语法

    ### Oracle SQL Loader 的详细语法与应用 #### 一、概述 SQL*Loader 是 Oracle 提供的一款强大而灵活的数据加载工具,主要用于将操作系统中的文件数据批量导入到 Oracle 数据库中。相较于其他数据库系统的加载工具...

    海量数据装载工具SQL Loader技术分析.pdf

    这一点通过关键词的罗列也可以体现,如“Oracle数据库”、“SQLLoader”、“数据加载”、“情报处理”等。 综上所述,SQL Loader作为一种高效的数据装载工具,在大数据环境下对Oracle数据库的数据装载有着重要的...

    SQL loader and oracle sql study

    在学习Oracle SQL时,我们需要了解SQL的基础语法,包括SELECT、INSERT、UPDATE、DELETE等操作。此外,还有高级特性,如联接(JOINs)、子查询(Subqueries)、集合操作(Set Operations)以及事务管理。Oracle SQL还...

    sqlloader详解

    ### SQL*Loader详解 #### 一、SQL*Loader概述 SQL*Loader是Oracle数据库系统中一个强大而灵活的工具,其主要功能是从各种外部数据源批量导入数据到Oracle数据库。随着现代数据库规模的不断扩大,从GB级扩展到TB级...

    sqlloader入门

    SQL*Loader的命令行语法** SQL*Loader的命令行参数如下: - `userid`:指定Oracle数据库的用户名和密码。 - `control`:控制文件的名称。 - `log`:日志文件的名称。 - `bad`:错误文件的名称。 - `data`:数据...

    C++开发实例

    这需要对文件I/O操作有深入理解,以及对SQL Loader语法和数据格式的熟悉。可能还会涉及字符串处理、文件流和数据序列化技术。 3. **用托管C++开发WINDOWS表单**: 托管C++结合了C++的性能和.NET框架的便利性,可以...

    SQL*Loader.zip

    SQL*Loader是Oracle数据库系统中的一个实用工具,用于高效地将大量数据批量导入到数据库中。这个工具在处理大量数据的场景下非常有用,比如在数据迁移、数据分析或数据库初始化时。"SQL*Loader.zip"可能包含了一份...

    sql*loader 指南

    ### SQL*Loader 指南:语法与用法详解 #### 一、SQL*Loader简介 SQL*Loader是Oracle提供的一款高效数据加载工具,用于将外部文件中的数据批量加载到Oracle数据库表中。该工具支持多种文件格式,包括CSV、文本文件...

    PyPI 官网下载 | pd_sql_loader-1.0.tar.gz

    标签“Python库”表明`pd_sql_loader`是一个Python开发的工具,适用于那些熟悉Python语法和Pandas库的用户。这个库的目标用户可能是数据工程师、数据科学家或任何需要从数据库提取数据并进行进一步分析的人。 总的...

    Oracle数据导入工具

    这是因为不同的数据库系统之间存在语法差异和连接方式的不同。例如,连接字符串、查询语句(如SELECT、INSERT等)和数据类型映射都需要相应调整。开发者需要熟悉两种数据库系统的API和SQL语言,以便进行适配。 在...

    Oracle SQL加载器:权威指南(2002)

    掌握控制文件的语法规则对于正确使用SQL*Loader至关重要。控制文件中的LOAD语句用于指定加载过程的参数和选项,而命令行参数则可以在控制文件中使用,以便于灵活配置加载过程。 字段规格(Field Specifications)和...

    sqlldrTools_oracle_源码

    1. 控制文件生成模块:根据用户界面的选择,生成符合SQL*Loader语法的控制文件。 2. 执行器模块:调用操作系统命令,执行SQL*Loader进程,并捕获输出结果。 3. 错误处理模块:解析SQL*Loader的错误日志,提供友好...

    oracle 学习整理基本 基础学习也重要

    本文档涵盖了 Oracle 学习的基本知识点,包括目录连接数据库的方法、SQL 语句、SELECT 语法、空值的查询、函数、虚拟表、DML 语句、数据库事务、 COMMIT、表的管理、对象的管理、用户管理、突然断电和 Sqlloader 等...

    oracle导出excel和excel导入oracle的经验总结.pdf

    先将Excel数据转换为CSV格式,然后在SQL*Plus中使用INSERT INTO语句逐行插入数据,或者使用BULK INSERT语法进行批量插入。 - **方法四:使用外部表** 创建一个外部表定义,指定Excel文件作为数据源,然后像操作...

Global site tag (gtag.js) - Google Analytics