0

我在Informatica 论坛上问过这个问题,但没有人知道答案,所以现在我来这里寻求帮助。

据我了解,“会话后成功命令”字段中的任何内容都应传递到适当的命令接口并执行。但是,当我使用 IF 语句时,它会失败。有任何想法吗?

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

当我手动将其键入终端(在本例中为 DOS)时,此方法有效。但是当我把它扔到一个可重用的命令任务中时,我得到了这个:

错误
POST-SESS
CMN_1949
错误:[Pre/Post Session Command] Process id 2996。shell 命令失败,退出代码为 1。

PS:使用 9.5.1 修补程序 1

4

1 回答 1

0

我认为问题不在于 Informatica 如何执行命令。问题在于 DOS 如何返回错误代码,特别是某些命令,比如喜欢IF和不喜欢ECHO。(可以echo %ERRORLEVEL%在 DOS 中看到 Informatica 从 DOS 获取的返回码,为了方便起见,我将在此处使用名称 DOS,尽管现在在 Windows 下这并不完全正确)

连续运行这些命令:

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%

然后所有后续ECHO都将返回 1,而 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 回答