oracle装载数据,如何在SqlLoader中装载日期型的数据

本文讨论了使用SQLLoader工具加载Oracle数据库中日期型数据时遇到的问题,包括错误信息ORA-01843: 无效的月份。解决方案涉及到设置环境变量NLS_DATE_FORMAT以匹配数据文件中的日期格式,并提供了正确的控制文件示例。通过设置NLS_LANG环境变量和调整数据文件格式,成功地将日期数据加载到Oracle表中。
摘要由CSDN通过智能技术生成

Q:kamus:

斑竹你好,最给予到一件麻烦事,想请教

请问Sql loader工具能否加载日期型数据?如何加载?(我是指oracle表中字段为date型)

A:check this:

http://oraclesvca2.oracle.com/docs/cd/B10501_01/server.920/a96652/ch06.htm#1016163

Q:控制文件:

LOAD DATA

INFILE 'd:\equip.dat'

APPEND INTO TABLE scott.test

(q1 position(01:05) char,

q2 position(06:10) char,

q3 position(11:29) date(19) "dd/Mon/yyyy:hh24:mi:ss")

数据文件:

aaaaaxxxxx05/05/2005:01:01:01

bbbbbyyyyy05/06/2005:01:01:02

ccccczzzzz05/07/2005:01:01:03

加载后的日志文件:

SQL*Loader: Release 9.2.0.1.0 - Production on 星期二 5月 31 21:19:43 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

控制文件: d:\equip.ctl

数据文件: d:\equip.dat

错误文件: d:\equip.bad

废弃文件: 未作指定

:

(可废弃所有记录)

加载数: ALL

跳过数: 0

允许的错误: 50

绑定数组: 64 行,最大 256000 字节

继续: 未作指定

所用路径: 常规

表SCOTT.TEST

已加载从每个逻辑记录

插入选项对此表APPEND生效

列名 位置 长度 中止 包装数据类型

------------------------------ ---------- ----- ---- ---- ---------------------

Q1 1:5 5 CHARACTER

Q2 6:10 5 CHARACTER

Q3 11:29 19 DATE dd/Mon/yyyy:hh24:mi:ss

记录 1: 被拒绝 - 表 SCOTT.TEST 的列 Q3 出现错误。

ORA-01843: 无效的月份

记录 2: 被拒绝 - 表 SCOTT.TEST 的列 Q3 出现错误。

ORA-01843: 无效的月份

记录 3: 被拒绝 - 表 SCOTT.TEST 的列 Q3 出现错误。

ORA-01843: 无效的月份

表SCOTT.TEST:

0 行 加载成功

由于数据错误, 3 行 没有加载。

由于所有 WHEN 子句失败, 0 行 没有加载。

由于所有字段都为空的, 0 行 没有加载。

为结合数组分配的空间: 2432字节(64行)

读取 缓冲区字节数: 1048576

跳过的逻辑记录总数: 0

读取的逻辑记录总数: 3

拒绝的逻辑记录总数: 3

废弃的逻辑记录总数: 0

从星期二 5月 31 21:19:43 2005开始运行

在星期二 5月 31 21:19:46 2005处运行结束

经过时间为: 00: 00: 03.72

CPU 时间为: 00: 00: 00.13

还是没有成功,请指点问题到底出在哪?能否写一份正确的控制文件给我, 谢谢!

A:

要确保sqlloader时候的环境变量NLS_DATE_FORMAT跟你指定的"dd/Mon/yyyy:hh24:mi:ss"一样。否则会报日期格式不正确的错误。

首先设置操作系统的环境变量NLS_LANG为AMERICAN_AMERICA.ZHS16GBK,UNIX系统在profile中设置,Windows系统在注册表中设置。

然后,编写测试用的数据文件,t.txt

aaaaa,xxxxx,2005-01-01 1:00:00

bbbbb,yyyyy,2005-03-01 12:00:00

ccccc,zzzzz,2005-12-01 18:00:00

创建测试表:

create table T_LOAD

(

A VARCHAR2(10),

B VARCHAR2(10),

C DATE

);

编写sqlldr使用的控制文件

load data

infile 't.txt'

badfile 't.bad'

append into table t_load

fields terminated by ','

trailing nullcols

(

a,

b,

c date "yyyy-mm-dd hh24:mi:ss"

)

开始做sqlldr

sqlldr control=t.ctl

装载结束以后,查看log文件

SQL*Loader: Release 9.2.0.6.0 - Production on Mon Jun 6 02:28:39 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Control File: t.ctl

Data File: t.txt

Bad File: t.bad

Discard File: none specified

(Allow all discards)

Number to load: ALL

Number to skip: 0

Errors allowed: 50

Bind array: 64 rows, maximum of 256000 bytes

Continuation: none specified

Path used: Conventional

Table T_LOAD, loaded from every logical record.

Insert option in effect for this table: APPEND

TRAILING NULLCOLS option in effect

Column Name Position Len Term Encl Datatype

------------------------------ ---------- ----- ---- ---- ---------------------

A FIRST * , CHARACTER

B NEXT * , CHARACTER

C NEXT * , DATE yyyy-mm-dd hh24:mi:ss

Table T_LOAD:

3 Rows successfully loaded.

0 Rows not loaded due to data errors.

0 Rows not loaded because all WHEN clauses were failed.

0 Rows not loaded because all fields were null.

Space allocated for bind array: 49536 bytes(64 rows)

Read buffer bytes: 1048576

Total logical records skipped: 0

Total logical records read: 3

Total logical records rejected: 0

Total logical records discarded: 0

Run began on Mon Jun 06 02:28:39 2005

Run ended on Mon Jun 06 02:28:41 2005

Elapsed time was: 00:00:01.38

CPU time was: 00:00:00.04

检查表:

SQL> select * from t_load;

A B C

---------- ---------- --------------------

aaaaa xxxxx 2005-1-1 1:00:00

bbbbb yyyyy 2005-3-1 12:00:00

ccccc zzzzz 2005-12-1 18:00:00

历史上的今天...

>>

2011-07-02文章:

2010-07-02文章:

2009-07-02文章:

2006-07-02文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值