Был бы способ запрограммировать параметр, который не жестко запрограммирован для этого?
Вместо: переменной хоста SomeValue в этом вопросе / фрагменте:
EXEC SQL
FETCH NEXT ROWSET FROM C_NJSRD2_cursor_declared_and_opened
FOR :SomeValue ROWS
INTO
:NJCT0022.SL_ISO2 :NJMT0022.iSL_ISO2
etc....
Вот некоторые пояснения:
Параметризация запроса, такого как опубликованный во вводном вопросе, действительно работает, если я установил переменную хоста: SomeValue в 1 и определил массивы переменных хоста для заполнения из базы данных до размера 1, например
struct
??<
char SL_ISO2 ??(1??) ??(3??); // sorry for Z/os trigraphs
etc..
И это также работает, если для массивов переменных хоста установить большее целочисленное значение (например, 20) и жестко закодировать значение (: SomeValue) в это значение в выборке набора курсоров.
EXEC SQL
FETCH NEXT ROWSET FROM C_NJSRD2
FOR 20 ROWS
INTO
:NJCT0022.SL_ISO2 :NJMT0022.iSL_ISO2
,:NJCT0022.BZ_COUNTRY :NJMT0022.iBZ_COUNTRY
,:NJCT0022.KZ_RISK :NJMT0022.iKZ_RISK
Я sh получу количество строк от вызывающей программы (COBOL), а в идеале соответствующим образом установлю размер массивов переменных хоста. Чтобы избежать проблем с изменением размера массива переменных, было бы неплохо также увеличить размеры массивов переменных хоста до большего значения.
Эти комбинации возвращают ошибки компиляции: HOST VARIABLE ARRAY "NJCT0022" НЕ ИМЕЕТСЯ ИЛИ НЕ УКАЗАНО ИЛИ НЕ ПОЛЕЗНО