Я создаю задание Sequence, которое содержит действие UserVariables (ParamLoading) и действие Job (ExtractJob) в указанном порядке. ParamLoading создает 4 пользовательские переменные и вызывает процедуру для заполнения каждой из них соответствующим значением, а затем вызывает ExtractJob, передавая ему ранее загруженные параметры.
ParamLoading вызывает процедуру сервера (GetParams), которая просто выполняет сценарий оболочки (ShellQuery) и фиксирует результат; этот сценарий оболочки выполняет SQL-запрос к базе данных Oracle и выводит результат на экран.
Что касается тестов, ShellQuery работает так, как ожидалось, и GetParams возвращает ожидаемое значение. Но когда 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 $1/$2@$3/$4 <<!
set heading off
set feedback off
set pages 0
select param_value from cfg_params where filter='$5' and param_name='$6';
!)
echo $value
Код GetParams:
Call DSExecute("UNIX", Ruta_Programas:"getparams.sh ":Username:" ":Password:" ":Server:" ":ServiceId:" ":Filtro:" ":Parametro, Output, SystemReturnCode)
Ans = Output
Return(Ans)