【发布时间】:2016-07-24 08:41:05
【问题描述】:
我对 SQL Oracle 还是很陌生,目前我的班级正在学习批量加载。我几乎明白这个想法,但是我很难让它读取我的所有记录。
这是我的 SQL 文件;
PROMPT Creating Table 'CUSTOMER'
CREATE TABLE CUSTOMER
(CustomerPhoneKey CHAR(10) PRIMARY KEY
,CustomerLastName VARCHAR(15)
,CustomerFirstName VARCHAR(15)
,CustomerAddress1 VARCHAR(15)
,CutomerAddress2 VARCHAR(30)
,CustomerCity VARCHAR(15)
,CustomerState VARCHAR(5)
,CustomerZip VARCHAR(5)
);
快速简单。现在这是我要加载数据的控制文件
LOAD DATA
INFILE Customer.dat
INTO TABLE Customer
FIELDS TERMINATED BY"|"
(CustomerPhoneKey, CustomerLastName, CustomerFirstName, CustomerAddress1 , CutomerAddress2, CustomerCity, CustomerState, CustomerZip)
然后是数据文件
2065552123|Lamont|Jason|NULL|161 South Western Ave|NULL|NULL|98001
2065553252|Johnston|Mark|Apt. 304|1215 Terrace Avenue|Seattle|WA|98001
2065552963|Lewis|Clark|NULL|520 East Lake Way|NULL|NULL|98002
2065553213|Anderson|Karl|Apt 10|222 Southern Street|NULL|NULL|98001
2065552217|Wong|Frank|NULL|2832 Washington Ave|Seattle|WA|98002
2065556623|Jimenez|Maria|Apt 13 B|1200 Norton Way|NULL|NULL|98003
问题是,只有最后一条记录
2065556623|Jimenez|Maria|Apt 13 B|1200 Norton Way|NULL|NULL|98003
正在加载中。其余的都在我的坏文件中
所以我查看了我的日志文件,我得到的错误是
记录 1:被拒绝 - 表 CUSTOMER 中的 CUSTOMERZIP 列出错。 ORA-01401: 插入的值对于列来说太大
记录 2:被拒绝 - 表 CUSTOMER 的 CUSTOMERZIP 列出错。 ORA-01401: 插入的值对于列来说太大
记录 3:被拒绝 - 表 CUSTOMER 中的 CUSTOMERZIP 列出错。 ORA-01401: 插入的值对于列来说太大
记录 4:被拒绝 - 表 CUSTOMER 的 CUSTOMERZIP 列出错。 ORA-01401: 插入的值对于列来说太大
记录 5:被拒绝 - 表 CUSTOMER 的 CUSTOMERZIP 列出错。 ORA-01401: 插入的值对于列来说太大
表客户:1 行已成功加载。 5 行未加载到期 到数据错误。 0 行未加载,因为所有 WHEN 子句均已加载 失败的。 0 行未加载,因为所有字段均为空。
关于这个问题。我看到 CustomerZip 是问题所在,最初我将它作为 CHAR(5) - 我这样做是因为我对数据类型的理解是,对于像邮政编码这样的数值,我不会用它进行算术运算,因此最好将其存储为 CHAR。另外我最初没有使用 VARCHAR2 (5),因为看到它是一个邮政编码,我不希望值变化,它应该总是 5。现在也许我只是误解了这一点。因此,如果有人可以解决这个问题,那就太棒了。
我的第二个问题是“我该如何解决这个问题?”鉴于以上对这些数据类型的理解,为什么 CHAR(5) NOR VARCHAR2(5) 起作用是没有意义的。因为我对两者都有相同的错误。
一条记录(最后一条)实际上有效,这更没有意义。
提前感谢您的帮助
【问题讨论】:
-
我应该提一下,我试图和我的教授一起去上班,但是她无法识别问题,只是指示我做一个完全不同的表(基本上忽略这个问题,做一个更简单的一)。这对我来说似乎很简单,我想知道我做错了什么,所以我求助于你们
-
您是否在 Windows 中创建了数据文件,并在 Linux/Unix 中运行 SQL*Loader?
-
是的,我在 Unix 中运行了 sqlldr