iSeries - вызов хранимой процедуры SQL из программы CL - PullRequest
3 голосов
/ 29 октября 2008

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

Ответы [ 4 ]

5 голосов
/ 31 октября 2008

Вы можете вызвать системную программу 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)
3 голосов
/ 29 октября 2008

Может быть 2 варианта:

В программе CL создайте временный исходный элемент. Создайте оператор SQL с предоставленными параметрами для выполнения хранимой процедуры и запишите этот исходный код во временный член. Затем добавьте вызов RUNSQLSTM с сгенерированным членом в качестве параметра.

Второй вариант - не создавать программу CL, а использовать RPG / COBOL. Используя встроенный SQL, хранимая процедура может быть выполнена с параметрами. Их значения должны передаваться из команды в программу.

2 голосов
/ 29 октября 2008

Одно время была команда, которую кто-то написал, которую я использовал. Я больше не могу найти эту ссылку, но у меня есть два других варианта:

  1. В этой статье используется REXX
  2. В этой статье используется RPG

Они оба содержат источник, необходимый для работы команды.

0 голосов
/ 03 февраля 2012

QCMDEXC может быть команда, которую вы ищете.

...