2016-09-19 7 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型です)は、タイムスタンプではなく文字列で機能します。 'TIMESTAMP_ISO()'の代わりに 'VARCHAR_FORMAT()'を試してみてください。 – mustaccio

答えて

1

ADMIN_CMDは文字列である1つの引数を取るため、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(26)に変換するCHAR()を使用しています注意してください。