传递变量到SYSPROC.ADMIN_CMD
问题描述:
我有点问题,我需要将一个变量值传递给SYSPROC.ADMIN_CMD。传递变量到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');
的问题是,一旦运行存储过程时,我得到错误:
ERROR [42703] [IBM][DB2/AIX64] SQL0206N "VDATE" is not valid in the context where it is used. SQLSTATE=42703
我试了一下修改于:
CALL SYSPROC.ADMIN_CMD ('LOAD FROM (select'''||vDate||'''...) OF CURSOR insert into .. (DateColumn...) NONRECOVERABLE');
然后,我得到“没有授权例程|| FUNCTION ...
我需要我的日期变量传递给LOAD,因为这是一个始终在变化的动态值。我该如何处理?
答
因为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)
来连接它。
级联(这是类型FUNCTION的||)对字符串起作用,而不是时间戳。您可能想尝试'VARCHAR_FORMAT()'而不是'TIMESTAMP_ISO()'。 – mustaccio