任何人都可以发现此次尝试数据加载中的错误吗? '\\N'
是因为这是从mysql导入的OUTFILE转储,它为NULL字段放置\ N。
解码用于捕获字段可能为空字符串的情况,或者可能具有\ 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
答案 0 :(得分:0)
BLANKS
是SQL * Loader关键字,不是您可以在decode
SQL语句中使用的 - 它将其视为列名。如果它确实是一个空(零长度)字符串,就像在分隔文件中的情况一样,在decode
中你可以使用''
而不是BLANKS
;但Oracle无论如何都将其视为null。在这种情况下,decode
应该是多余的,您可以像其他列一样使用NULLIF
。如果'empty'字符串实际上是一个或多个空格,则可以执行decode(TRIM(:PRIORITY),'',NULL,'\\N',NULL,:PRIORITY)
之类的操作。 (无论如何,您需要decode
的最终默认子句,否则所有值都将为null。)