2016-09-19 181 views
0

我有點問題,我需要將一個變量值傳遞給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,因爲這是一個始終在變化的動態值。我該如何處理?

+0

級聯(這是類型FUNCTION的||)對字符串起作用,而不是時間戳。您可能想嘗試'VARCHAR_FORMAT()'而不是'TIMESTAMP_ISO()'。 – mustaccio

回答

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)來連接它。