使用例程填充参数时出现 DSSetParam -4 错误

DSSetParam -4 error when filling a parameter with a routine

我正在构建一个序列作业,其中包含一个 UserVariables activity (ParamLoading) 和一个作业 activity (ExtractJob),按此顺序。 ParamLoading 创建 4 个用户变量并调用一个例程来为每个变量填充相应的值,然后调用 ExtractJob 将先前加载的参数传递给它。

ParamLoading 调用服务器例程 (GetParams),该例程仅执行 shell 脚本 (ShellQuery) 并捕获结果; shell 脚本对 Oracle 数据库执行 SQL 查询并在屏幕上打印结果。

就测试而言,ShellQuery 按预期工作,而 GetParams returns 为预期值。但是当从序列作业调用 GetParams 时(无论它是在 ParamLoading 还是 ExtractJob 中)作业失败并出现以下错误:

Test2..JobControl (@JOB033_TBK_026_EXT_PTLF): Controller problem: Error calling DSSetParam(RUTA_ORIGEN), code=-4
[ParamValue/Limitvalue is not appropriate]

我已经检查了所有数据类型、参数名称,但都没有成功,甚至没有一条消息说明可能发生的情况。

ShellQuery代码:

value=$(sqlplus -s /@/ <<!
        set heading off
        set feedback off
        set pages 0
        select param_value from cfg_params where filter='' and param_name='';
!)
echo $value

获取参数代码:

  Call DSExecute("UNIX", Ruta_Programas:"getparams.sh ":Username:" ":Password:" ":Server:" ":ServiceId:" ":Filtro:" ":Parametro, Output, SystemReturnCode)
  Ans = Output
  Return(Ans)

您return从 GetParams 获取什么值?

从序列中调用函数需要返回一个整数值,任何非零数字 returned 都会被评估为错误。

作为测试,尝试将例程中的 return 值更改为值 0-4。

已解决。对于那些遇到类似问题的人,GetParams 从 ShellQuery 返回捕获的值并添加一个名为 "field delimiter" 的特殊字符,并且假设该字符是 ASCII 中的 254,任何接收该参数的作业都会抱怨无效值,这是错误。

将例程更改为以下解决方法:

Call DSExecute("UNIX", Ruta_Programas:"getparams.sh ":Username:" ":Password:" ":Server:" ":ServiceId:" ":Filtro:" ":Parametro, Output, SystemReturnCode)
Ans = EReplace(Output, @FM, "")
Return(Ans)

感谢Matt Calderon提供求解线索