0

Informatica フォーラムでこの質問をしましたが、誰も答えを知りませんでした。

私の理解では、「セッション後の成功コマンド」フィールドにあるものはすべて、適切なコマンド インターフェイスに渡して実行する必要があります。ただし、IF ステートメントを使用すると失敗します。何か案は?

"IF 1==1 echo.bob >> f:\filename.txt"

これは、端末 (この場合は DOS) に手動で入力すると機能します。しかし、それを再利用可能なコマンド タスクに投入すると、次のようになります。

ERROR
POST-SESS
CMN_1949
エラー: [プレ/ポスト セッション コマンド] プロセス ID 2996。シェル コマンドは終了コード 1 で失敗しました。

PS: 9.5.1 Hotfix 1 を使用

4

1 に答える 1

0

問題は Informatica がコマンドを実行する方法ではないと思います。問題は、DOS がエラー コードを返す方法にあり、具体的には、一部のコマンドが likeIFECHOdo'nt にあることにあります。(Informatica が DOS から取得したリターン コードは DOS で確認できますecho %ERRORLEVEL%。Windows では厳密には正しくありませんが、ここでは便宜上 DOS という名前を使用します)

次のコマンドを連続して実行します。

REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 0
cd c:\
echo %ERRORLEVEL%

REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged 
echo.bob >> c:\filename.txt
echo %ERRORLEVEL%

REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged 
echo.bob >> c:\thisdirdontexist\filename.txt
echo %ERRORLEVEL%

最初CDは戻りコードを設定します。この場合は 0 です
。次のECHO(IF テストの有無にかかわらず) 戻りコードは変更されないため、最後のテストECHOが失敗しても 0 のままです。

最初のCDコマンドがエラーを返した場合。

@echo off
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 1
cd xxxxxx
echo %ERRORLEVEL%

その後はすべてECHO1 が返され、Informatica は両方とも失敗します。

これは、Informatica の各セッション後の成功コマンドが独自の cmd-shell で実行されるため、依然として奇妙であると述べているため、ERRORLEVELすべてのコマンドの初期値は常に 0 である必要があります。それを説明することはできず、残念ながらこれを実際にテストすることはできませんUNIX で実行している Informatica では、これが少なくとも問題の一部であると確信しています。

この問題を回避するには、プロパティ タブで [コマンドが失敗した場合にタスクを失敗させる] オプションを設定する必要があります。これにより、Informatica はcmd/cオプションを使用し、適切なリターン コードが設定されるため、Informatica はエラー (または成功) を正しく検出できるはずです。それでもうまくいかない場合は、コマンドを次のように変更してみてください。

 cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"
于 2013-10-30T10:13:55.517 に答える