Как я могу запустить хранимую процедуру из программы CL? RUNSQLSTM требует члена-источника, но я просто хочу создать команду, чтобы пользователи могли легко передавать переменные, поэтому это не сработает.


Возможны 2 варианта:
В программе CL создайте временный исходный член. Создайте инструкцию SQL с предоставленными параметрами для выполнения хранимой процедуры и запишите этот исходный код во временный член. Затем добавьте вызов RUNSQLSTM со сгенерированным членом в качестве параметра.
Второй вариант - не создавать программу на CL, а использовать RPG / COBOL. Используя встроенный SQL, хранимая процедура может выполняться с параметрами. Их значения должны передаваться из команды в программу.
Когда-то была команда, которую кто-то написал, которую использовал я. Я больше не могу найти эту ссылку, но у меня есть два других варианта:
Оба они включают источник, необходимый для работы команды.
Вы можете вызвать системную программу QZDFMDB2 и передать ей один параметр со строкой SQL для выполнения. В этом случае строка SQL - это вызов вашей хранимой процедуры:
CALL PGM(QZDFMDB2) PARM('CALL PROCEDURE (''XYZ'', ''ABC'')')
Чтобы заменить ваши значения, используйте переменную для PARM:
DCL VAR(&CALL) TYPE(*CHAR) LEN(200)
CHGVAR VAR(&CALL)
VALUE('CALL PROCEDURE (''' *CAT &PARM1 *TCAT ''', ''' *CAT &PARM2 *TCAT ''')')
CALL PGM(QZDFMDB2) PARM(&CALL)
Чтобы указать расположение или библиотеку процедуры, вот образец: CALL PGM(QZDFMDB2) PARM('CALL LIBRARY.PROCEDURE (''XYZ'', ''ABC'')')
QCMDEXC может быть той командой, которую вы ищете.
Думаю, мне лучше всего подойдет ваша вторая идея - спасибо. Было бы неплохо иметь возможность вызывать процедуру напрямую!