2017-09-15 92 views
1

我正在使用DB2实用程序处理从CSV到DB2的ETL过程。挑战在于在导入命令中将动态文件名称指定为db2变量。 下面是示例代码,如何在IBM DB2 IMPORT命令中添加动态文件名路径?

connect to database; 
CREATE OR REPLACE VARIABLE filenamePath VARCHAR(225); 
SET filenamePath= concat(concat('Z:/directory/file_',ts_fmt(current timestamp - 2 DAY,'ddmmyyyy')),'.csv'); 
import from '@filenamePath' of DEL SKIPCOUNT 1 insert into table; 
connect reset; 

这里ts_fmt是用于特定格式获得日期的存储过程。我正在输出@filenamePath

如果我运行下面的语句,

select @filenamePath FROM sysibm.sysdummy1; 

我会得到这样的输出,

Z:/directory/file_13092017.csv 

但对于进口的命令,我收到文件未找到错误。

回答

1

从各种资源中读取后,确认我们不能在db2导入实用程序中使用db2变量。由于导入命令不会读取db2变量值。 所以我创建了一个系统变量,并在导入命令中使用了相同的内容。有用。

以管理员身份打开DB2 CLP并运行以下命令。

My Sample Code

以前我用DB2变量用于获取文件名。

现在我使用上次修改的文件命令(Windows cmd)来获取相同的文件名。这是我的预期。

0

您正在收到该错误,因为IMPORT不是SQL语句,因此无法从访问RDBMS变量中受益。您可以为每个csv文件生成唯一的命令字符串,也可以使用ETL工具的功能,也可以使用任意数量的脚本语言为每个导入动态创建命令字符串。

0

您可以尝试为IMPORT创建命令字符串,然后将其用作ADMIN_CMD过程的参数。该过程将包含选项的整个命令作为一个字符串作为单个输入参数。