我需要在每次运行时动态更改CTL文件中的Infile。我如何实现这一目标?

时间:2015-04-09 10:10:13

标签: dynamic sql-loader erp oracle-apps


负载数据 INFILE'/XXINSTANCEXX/applmgr/CUSTOM/xbol/12.0.0/bin/XX_DATA.csv'

替换表XX_STAGING_TABLE

FIELDS终止于“,”

追踪NULLCOLS

这是我的并发程序中使用的CTL的一部分。我需要在每次运行时更新INFILE。我将知道路径,但我需要将此示例XX_DATA.csv中的文件名更改为其他内容。

让我们假设我们将要获得一个特定的CSV文件模式。因此,如果文件于2015年4月9日到达,它将被命名为NEWFILE09042015,第二天到达的文件将具有NEWFILE10042015的文件名,即NEWFILE11042015之后的一天,依此类推。因此,我们有效地了解了我们将获得的文件名,但需要找到一种方法,以便我可以在我的CTL文件中更新它。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要通过DATA选项在命令行上指定文件名。您很可能需要一个使用正确文件名调用sqlldr的包装器脚本。

请参阅此回复,了解可能适合您情况的其他一些替代方案:insert timestanp of INFILE into a column from SQLLOADER

答案 1 :(得分:0)

您可以在INFILE指定的文件名中使用一个或多个导出的系统变量(至少在Unix中)。

您所要做的就是在INFILE指定的文件路径周围使用双引号而不是单引号。

E.g:

LOAD DATA INFILE "/XXINSTANCEXX/applmgr/CUSTOM/xbol/12.0.0/bin/$FILENAME.csv"