0

我有一个 datastage 例程转换函数,它做的事情比以下更复杂(在 Arg1 中可以为空):

Ans = Len(Arg1)

在某些情况下,我在转换阶段和某些行中调用此转换函数,在这些行中,我在一个可以为空的时间戳列中传递,并且我相信当我通过数据阶段运行我的工作时,有几个空值正在传递给我的函数导演,我的转换阶段看到“完成(参见日志)”,并显示了许多警告消息,他们基本上是这样说的(重复了很多次):

程序“ABC”:第 2 行,变量“Arg1”以前未定义。使用空字符串。

我试图通过使用“ ISNULL ”函数来检测它来捕捉这种情况,但不幸的是我的努力没有成功,我尝试了以下方法:

If ISNULL(Arg1) THEN
   Ans = 0
END
ELSE IF Arg1 = $Null THEN
   Ans = 0
END
ELSE
   Ans = Len(Arg1)
END

同样的问题,只是警告消息上的行号不同。

我不明白为什么会发生这种情况,“ ISNULL ”函数似乎很简单,我相信错误消息指的是 Arg1 为空的事实。我发现了一些与此相关的帖子,但我没有直接链接,这是否准确,在 datastage basic 中 undefined = null 是否正确,或者我可以通过其他方式捕捉到这种情况吗?

我进行了广泛搜索,此应用程序上写的大部分内容都是过时的,并没有真正提供有关警告消息本身的任何相关信息。是否有更好的资源来查找有关 datastage 警告消息的相关信息,我觉得好像我不了解 datastage 的核心租户。如何在函数内部捕获这种情况并仅使用 datastage 基本代码抑制警告消息(不更改我的输入或列类型)?

4

2 回答 2

0

您需要使用 IsAssigned() 函数而不是 IsNull() 函数来捕捉这种情况。

于 2021-11-19T05:29:22.617 回答
0

@RayWurlod 很接近,它实际上是完成此操作的“ Assigned ”函数,所以我的最终解决方案如下所示:

If NOT(ASSIGNED(Arg1)) THEN
   Ans = 0
END
ELSE
   Ans = Len(Arg1)
END
于 2021-11-22T17:56:16.497 回答