【问题标题】:How do I use SQL Loader to load data containing line breaks to a table?如何使用 SQL Loader 将包含换行符的数据加载到表中?
【发布时间】:2019-11-18 17:24:58
【问题描述】:

我有一个数据文件,一个 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 文件中错误地定义了数据类型,或者包含引号中的换行符的字段存在问题。

【问题讨论】:

    标签: sql oracle sql-loader ctl


    【解决方案1】:

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

    summary,
    

    summary char(500),
    

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

    description char(30000),
    

    Oracle says thata 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)
    

    【讨论】:

    • 还有description CLOB需要担心。
    猜你喜欢
    • 2019-03-12
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多