通过SQLLDR在Oracle中加载数据

问题描述 投票:2回答:1

我想通过SQLLDR在Oracle中加载的数据,但是,它总是在加载其他格式的数据。

所以做我的数据从我的文件是这样的:

2018-11-27      13      Vienna  1       66.90   1

这是具有加载的数据之后的结果:

27-Nov-17 1443443505 ienna 909510961 0.9 3377

除了日期列的所有列是错误的

这是我的表结构:

BOOKINGDATE DATE
CUSTOMERID NUMBER(38,0)
LOCATIONID VARCHAR(255 BYTE)
NUMBEROFPARKINGTICKET NUMBER(38,0)
CHARGETICKET NUMBER(18,2)
DURATIONINMINUTES NUMBER(38)

这是我的文件我的表定义:

LOAD DATA
APPEND
INTO TABLE ROTH.PARKSCHEIN_ROTH
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
(
BOOKINGDATE DATE 'YYYY-MM-DD',
CUSTOMERID INTEGER,
LOCATIONID CHAR(255),
NUMBEROFPARKINGTICKET INTEGER,
CHARGETICKET DECIMAL EXTERNAL,
DURATIONINMINUTES INTEGER
)

有人能告诉我我必须要使用的数据类型?我认为Oracle是找到所有类型本身除了日期?

非常感谢你提前为您提供帮助。

oracle sql-loader
1个回答
4
投票

它通常是最容易离开它为默认值,让数据库转换发生:

load data
replace
into table parkschein_roth
fields terminated by '\t'
optionally enclosed by '"'
( bookingdate date 'YYYY-MM-DD'
, customerid
, locationid
, numberofparkingticket
, chargeticket
, durationinminutes )

然后,日志显示它这样做:

Column Name                      Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
BOOKINGDATE                         FIRST     *  WHT O(") DATE YYYY-MM-DD      
CUSTOMERID                           NEXT     *  WHT O(") CHARACTER            
LOCATIONID                           NEXT     *  WHT O(") CHARACTER            
NUMBEROFPARKINGTICKET                NEXT     *  WHT O(") CHARACTER            
CHARGETICKET                         NEXT     *  WHT O(") CHARACTER            
DURATIONINMINUTES                    NEXT     *  WHT O(") CHARACTER   

请注意,指定一个数字类型,而不EXTERNAL关键字指示SQL * Loader的直接读取文件中的二进制数据,而不是它的字符表示:例如,什么是显示为1在文本编辑器是字符49(也就是符号代表比特序列00110001),而不是实际的数字1(我从未见过的二进制编码格式的数字数据文件,但我想他们必须存在。)请参阅Numeric EXTERNAL在使用SQL * Loader字段列表参考。

请注意以下意见:好像换行之前实际上其次00110001 '1'(字符00001101)(视窗回车)结束行。看着你得到的结果,就必须有阅读这些两个字节,并解释它们作为0000110100110001得到小数3377

© www.soinside.com 2019 - 2024. All rights reserved.