【发布时间】:2017-02-10 18:39:26
【问题描述】:
我想使用 SQLLDR 导入一个 csv 文件,但我只想要特定的记录。我已经在我的控制文件中使用"WHEN record_type = 1" 解决了这个问题。
这可行,但日志文件被 “记录 xxx:丢弃 - 所有 WHEN 子句都失败。” 输入文件包含数百万条记录,但只有百分之几满足条件,所以我最终得到一个与输入文件大小相同的日志文件:)
我做错了吗? 使用 SQLLDR 时是否有其他方法可以丢弃/过滤记录?
示例数据:
record_type;a;b;c
24;a1;b1;c1
17;a2;b2;c2
22;an;bn;cn
1;a1;b1;c1
1;a2;b2;c2
1;an;bn;cn
控制文件
load data
truncate
into table my_table_t
WHEN record_type = 1
(...
)
【问题讨论】:
-
您可以尝试使用外部表而不是 SQL*Loader。或者,如果目标行只是文件的一小部分,您可以使用 UNIX 模式匹配命令构建一个仅包含目标记录的小文件。
-
@ChristianPalmer,目标行只是文件的一小部分,所以我也研究了 unix 过滤。谢谢你的想法。
-
类似 UNIX> grep -e "^1;" test_file.dat > output_file.dat
标签: oracle sql-loader