使用例程填充参数时出现 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提供求解线索
我正在构建一个序列作业,其中包含一个 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提供求解线索