0

我有一个数据文件,一个 csv。数据文件中的一条记录如下所示:

195268,"Organization",Active,,"This is a long description. This is a long description. This is a long description. This is a long description. This is a long description. This is a long description. This is a long description. This is a long description. This is a long description.</p>
<p>&nbsp;</p>
<p><a href=""https://app.place.com/news/"">Another Sample Link</a></p>
<p><a title=""Sample Link"" href=""https://app.place.com/202290"">Sample Link</a></p>","123 Fake St.","123 Fake St.",City,99999,"(555) 555-5555",,,email@email.com,http://app.place.com,https://www.app.com/org/,,https://www.flickr.com/photos/testOrganization/,,,https://images.com/test.jpg,https://app.place.com/app/organization/Organizations,Visible,Closed,18664,Branch,,,14097304,"Org Front Desk",email@email.com

我需要将其加载到具有以下架构的表中:

CREATE TABLE ORGS
 ( 
     organizationId varchar2(6),
     name varchar2(150),
     status varchar2(8),
     shortName varchar2(100),
     summary varchar2(500),
     description CLOB,
     addressStreet1 varchar2(200),
     addressStreet2 varchar2(200),
     addressCity varchar2(100),
     addressZipPostal varchar2(10),
     phoneNumber varchar2(20),
     extension varchar2(20),
     faxNumber varchar2(20),
     email varchar2(100),
     externalWebsite varchar2(250),
     facebookUrl varchar2(250),
     twitterUrl varchar2(250),
     flickrFeedUrl varchar2(250),
     youtubeChannelUrl varchar2(250),
     googleCalendarUrl varchar2(250),
     profileImageUrl varchar2(250),
     profileUrl varchar2(250),
     directoryVisibility varchar2(50),
     membershipType varchar2(10),
     typeId varchar2(5),
     typeName varchar2(100),
     parentId varchar2(6),
     parentName varchar2(50),
     primaryContactId varchar2(8),
     primaryContactName varchar2(100),
     primaryContactCampusEmail varchar2(100)
 );

如何为此负载构建 sqlLoader 控制文件?

我试过这个ctl文件


LOAD DATA
INFILE 'orgs.csv' "str '|\n'"
INTO TABLE ORGS
FIELDS TERMINATED BY ','
(
     organizationId,
     name,
     status,
     shortName,
     summary,
     description,
     addressStreet1,
     addressStreet2,
     addressCity,
     addressZipPostal,
     phoneNumber,
     extension,
     faxNumber,
     email,
     externalWebsite,
     facebookUrl,
     twitterUrl,
     flickrFeedUrl,
     youtubeChannelUrl,
     googleCalendarUrl,
     profileImageUrl,
     profileUrl,
     directoryVisibility,
     membershipType,
     typeId,
     typeName,
     parentId,
     parentName,
     primaryContactId,
     primaryContactName,
     primaryContactCampusEmail
)

和这个

LOAD DATA
INFILE 'orgs.csv' 
CONTINUEIF LAST != '"'
INTO TABLE ORGS
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
     organizationId,
     name,
     status,
     shortName,
     summary,
     description,
     addressStreet1,
     addressStreet2,
     addressCity,
     addressZipPostal,
     phoneNumber,
     extension,
     faxNumber,
     email,
     externalWebsite,
     facebookUrl,
     twitterUrl,
     flickrFeedUrl,
     youtubeChannelUrl,
     googleCalendarUrl,
     profileImageUrl,
     profileUrl,
     directoryVisibility,
     membershipType,
     typeId,
     typeName,
     parentId,
     parentName,
     primaryContactId,
     primaryContactName,
     primaryContactCampusEmail
)

但甲骨文一直在抱怨,对于各个领域,

Fields in the data file exceeds maximum length.

我很肯定数据文件中的数据大小适合我创建的字段。我想知道我是否在 ctl 文件中错误地定义了数据类型,或者包含引号中的换行符的字段存在问题。

4

1 回答 1

1

自从我加载包含换行符的字段以来已经有一段时间了,所以我对此部分没有任何评论。但请查看这个答案- 默认 SQLLDR 数据长度为 255 个字符,因此如果您的某个字段长于该长度,则必须在控制文件中指定它。对于汇总字段,我只是尝试更改

summary,

summary char(500),

对于这个description领域,它有点复杂。AFAIK,您必须为分隔字符字段设置某种最大长度-如果您不担心,可以将其设置为较大的值,例如

description char(30000),

甲骨文说 a value up to 2 gigabytes can be specified,所以我想如果你真的不想遇到长度限制,你可以尝试 2147483647 而不是 30000 。

如果 CSV 字段为空白,您可能还想考虑您希望 ORGS.DESCRIPTION 的值是什么。

description char(30000) NULLIF description=BLANKS, (sets it to null)
description char(30000) DEFAULTIF description=BLANKS, (sets it to an empty LOB)
于 2019-11-18T17:52:47.333 回答