我有下面的代码。现在的问题是,我们希望在文件中有三列,但有时其他团队发送给我们4列。因此,它不会失败加载,而是加载前三列。当文件少于3列时,它会失败,这是预期的。当文件中存在额外的列时,我需要在失败的地方放置什么逻辑?
CREATE TABLE TESTING_DUMP (
"FIELD_1" NUMBER,
"FIELD_2" VARCHAR2(5),
"FIELD_3" VARCHAR2(5)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY MY_DIR
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
BADFILE "MY_DIR":"TEST.bad"
LOGFILE "MY_DIR":"TEST.log"
READSIZE 1048576
FIELDS TERMINATED BY "|" LDRTRIM
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS
(
"LOAD" CHAR(1),
"FIELD_1" CHAR(5),
"FIELD_2" INTEGER EXTERNAL(5),
"FIELD_3" CHAR(5)
)
)
location
(
'Test.xls'
)
)REJECT LIMIT 0;
文件Test.xls包含以下示例内容。第二行是正确的。第一行应该失败,但它没有。
|11111|22222|33333|AAAAA
|22222|33333|44444|
1条答案
按热度按时间wfypjpf41#
我不知道如何在一个步骤中做到这一点,所以我会建议一个变通方案-看看它是否有帮助。
这是目标表,在最后应该只包含有效行:
外部表格仅包含一列,该列将包含整行(即,没有单独的列):
这是整个文件的内容:
外部表格包含整个文件(不拒绝任何内容):
只将有效行插入目标表(到目前为止,有两个条件:不应该有4个“列”,并且只能有4个
|
* 分隔符 *:唯一有效的行:
现在,您可以根据需要调整
where
子句;我贴的只是一个例子。