[嗨,我是使用sqlldr的新手。我正在尝试将csv文件中的数据发送到数据库中。
csv文件看起来像这个employee.dat:
id,code,dNum,name,last,StartDate,EndDate
MA2001,gg,0011,John,Smith,20020127,20020127
我有一个要传递给sqlldr的控制文件,看起来像这样:
OPTIONS(skip=1,bindsize=20000000,readsize=20000000,rows=1024)
LOAD DATA
APPEND
INTO TABLE SOMETHING_ADMIN.EMPLOYEE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
"id"
,"code"
,"dNum" FLOAT
,"name"
,"last"
,"StartDate" DATE "YYYYMMDD"
,"EndDate" DATE "YYYYMMDD"
)
执行加载时出现以下错误:
Record 1: Rejected - Error on table Record 1: Rejected - Error on table SOMETHING_ADMIN.EMPLOYEE, column "StartDate".
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
表定义:
CREATE TABLE "EMPLOYEE" (
"id" VARCHAR2(30 BYTE),
"code" VARCHAR2(10 BYTE),
"dNum" NUMBER(8,0),
"name" VARCHAR2(20 BYTE),
"last" VARCHAR2(20 BYTE),
"StartDate" DATE,
"EndDate" DATE,
);
我在做什么错?我知道这似乎是一个简单的问题,但我只是想不通。
谢谢
Oracle解析器有时对返回的错误非常愚蠢。我认为它不喜欢FLOAT关键字。删除了多余的引号,似乎对我有用。
OPTIONS(skip=1,bindsize=20000000,readsize=20000000,rows=1024)
LOAD DATA
infile 'test.csv'
APPEND
INTO TABLE EMPLOYEE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
id
,code
,dNum
,name
,last
,StartDate DATE 'YYYYMMDD'
,EndDate DATE 'YYYYMMDD'
)
如果您重新创建表(哦,是的,请避免在Oracle中将anything括在双引号中;永远不要碰运气),这样“ date”列为VARCHAR2
(为什么?所以我们请确保将它们[[will出于调试目的而加载)并加载数据,这就是您得到的:
ID CODE DNUM NAME LAST STARTDATE ENDDATE
------ ---------- ---------- ------- ------- ---------- ----------
ma2001 gg 0 john smith 20020127
请参阅。DNUM
和NAME
列?一切都向右移动,因此日期值-本应存储在STARTDATE
列中-现在在ENDDATE
中,而enddate
的值是lost
SQL> desc employee
Name Null? Type
----------------------------------------- -------- --------------
ID VARCHAR2(30)
CODE VARCHAR2(10)
DNUM NUMBER(8)
NAME VARCHAR2(20)
LAST VARCHAR2(20)
STARTDATE DATE
ENDDATE DATE
SQL>
控制文件;唯一的“规范”保留为最新格式,即删除FLOAT
(为什么要使用它?):
OPTIONS(skip=1) LOAD DATA infile * truncate INTO TABLE EMPLOYEE FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( id ,code ,dNum ,name ,last ,StartDate date 'yyyymmdd' ,EndDate date 'yyyymmdd' ) begindata id,code,dnum,name,last,startdate,enddate ma2001,gg,0011,john,smith,20020127,20020127
正在加载会话和结果:
SQL> $sqlldr scott/tiger control=test11.ctl log=test11.log SQL*Loader: Release 11.2.0.2.0 - Production on ╚et Lis 24 22:07:47 2019 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Commit point reached - logical record count 1 SQL> select * From employee; ID CODE DNUM NAME LAST STARTDATE ENDDATE ------ ---------- ---------- ------- ------- ---------- ---------- ma2001 gg 11 john smith 27.01.02 27.01.02