将变量传递给SYSPROC.ADMIN_CMD

时间:2016-09-19 23:24:12

标签: db2

我有一个问题,我需要将一个变量值传递给SYSPROC.ADMIN_CMD。

这是交易:

DECLARE vDate   TIMESTAMP;
SET vDate = timestamp_iso (MyDateFunctionGoesHere());

CALL SYSPROC.ADMIN_CMD ('LOAD FROM (select vDate...) OF CURSOR insert into ..  (DateColumn...) NONRECOVERABLE');

问题是,在运行存储过程时,我收到错误:

  

错误[42703] [IBM] [DB2 / AIX64] SQL0206N“VDATE”在使用它的上下文中无效。 SQLSTATE = 42703

我尝试将其修改为:

CALL SYSPROC.ADMIN_CMD ('LOAD FROM (select'''||vDate||'''...) OF CURSOR insert into ..  (DateColumn...) NONRECOVERABLE');

然后我得到“没有授权例程命名为||类型为FUNCTION ...

我需要将我的日期变量传递给LOAD,因为这是一个一直在变化的动态值。我该怎么处理?

1 个答案:

答案 0 :(得分:1)

因为ADMIN_CMD接受一个字符串参数,所以最简单的方法是将SQL语句构建为VARCHAR,然后将该变量传递给ADMIN_CMD。设置vDate是不必要的。

DECLARE vCMD    VARCHAR(1024);

SET vCMD = 'LOAD FROM (select ' || CHAR(MyDateFunctionGoesHere()) || '...) OF CURSOR insert into ..  (DateColumn...) NONRECOVERABLE';

CALL SYSPROC.ADMIN_CMD (vSQL);

请注意,我假设MyDateFunctionGoesHere()返回TIMESTAMP,并使用CHAR()将其转换为CHAR(26)以进行连接。