甲骨文SQLLDR:列这里不允许(Oracle sqlldr: column not allowed

2019-10-20 08:01发布

任何人都可以找到这个错误在此试图数据加载? 该'\\N'是因为这是从MySQL的OUTFILE转储,这使\ n为NULL字段的进口。

解码是抓情况下字段可能是空字符串,或有可能\ n。

在Linux上使用Oracle 10g中。

load data
infile objects.txt
discardfile objects.dsc
truncate
into table objects
fields terminated by x'1F'
optionally enclosed by '"'
(ID INTEGER EXTERNAL NULLIF (ID='\\N'), 
TITLE CHAR(128) NULLIF (TITLE='\\N'),
PRIORITY CHAR(16) "decode(:PRIORITY, BLANKS, NULL, '\\N', NULL)", 
STATUS CHAR(64) "decode(:STATUS, BLANKS, NULL, '\\N', NULL)", 
ORIG_DATE DATE "YYYY-MM-DD HH:MM:SS" NULLIF (ORIG_DATE='\\N'), 
LASTMOD DATE "YYYY-MM-DD HH:MM:SS" NULLIF (LASTMOD='\\N'), 
SUBMITTER CHAR(128) NULLIF (SUBMITTER='\\N'), 
DEVELOPER CHAR(128) NULLIF (DEVELOPER='\\N'), 
ARCHIVE CHAR(4000) NULLIF (ARCHIVE='\\N'), 
SEVERITY CHAR(64) "decode(:SEVERITY, BLANKS, NULL, '\\N', NULL)", 
VALUED CHAR(4000) NULLIF (VALUED='\\N'), 
SRD DATE "YYYY-MM-DD" NULLIF (SRD='\\N'), 
TAG CHAR(64) NULLIF (TAG='\\N')
)

示例数据(记录1)。 该^ _代表不可打印0x1F的分隔符。

1987^_Component 1987^_\N^_Done^_2002-10-16 01:51:44^_2002-10-16 01:51:44^_import^_badger^_N^_^_N^_0000-00-00^_none

错误:

Record 1: Rejected - Error on table objects, column SEVERITY.
ORA-00984: column not allowed here

Answer 1:

BLANKS是使用SQL * Loader的关键字,不是你可以在里面使用decode SQL语句-它是把它当作一个列名。 如果真的是空(零长度)字符串,因为很可能是一个分隔的文件的情况下,在decode你可以使用''而不是BLANKS ; 但甲骨文把它伪装成空呢。 在这种情况下, decode应该是多余的,你可以只使用一个NULLIF如您有其它列。 如果“空”字符串实际上是一个或多个空格,你可以这样做decode(TRIM(:PRIORITY),'',NULL,'\\N',NULL,:PRIORITY) 。 (您将需要为最终违约条款decode反正或者所有值会去空。)



文章来源: Oracle sqlldr: column not allowed here