Как запустить dymanic SQL через утилиту IKJEFT01? - PullRequest
2 голосов
/ 07 марта 2012

Как мы можем передать параметры в запросе SQL при выполнении IKJEFT01? Пример:

//UNLOAD    EXEC PGM=IKJEFT01
//SYSTSPRT  DD SYSOUT=*
//SYSTSIN   DD *  DSN SYSTEM(DB2X) RETRY(120)
RUN PROGRAM(DSNTIAUL)
PLAN(DSNTIAUL) -
PARM('SQL')
END
//SYSPRINT  DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=D
//SYSREC00  DD DSN=FCSTN.AK.XXXXXX,
//          DISP=(NEW,CATLG,DELETE),
//SYSPUNCH  DD SYSOUT=*                                           
//SYSIN     DD *
SELECT * FROM ABC.DEF WHERE XYZ='999'   
/*

Вместо того, чтобы давать значение в SQL-запросе как '999', я хочу передать значение через переменную. Как это можно сделать? Пожалуйста, помогите ...!

1 Ответ

6 голосов
/ 07 марта 2012

У вас есть отдельный шаг перед вашим шагом UNLOAD, который записывает переменную строку (и) SQL во временный файл.Затем объедините этот временный файл с неизменными строками SQL.

Freehand ...

//SETVAR   EXEC PGM=PRM2FILE,PARM='WHERE XYZ=''&VAL'''
//SYSPRINT DD  SYSOUT=*
//OUTPUT01 DD  DISP=(NEW,PASS,DELETE),
//             LRECL=80,
//             AVGREC=U,
//             RECFM=FB,
//             SPACE=(80,(1,1),RLSE)
//*
//UNLOAD    EXEC PGM=IKJEFT01
//SYSTSPRT  DD SYSOUT=*
//SYSTSIN   DD *  DSN SYSTEM(DB2X) RETRY(120)
RUN PROGRAM(DSNTIAUL)
PLAN(DSNTIAUL) -
PARM('SQL')
END
//SYSPRINT  DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=D
//SYSREC00  DD DSN=FCSTN.AK.XXXXXX,
//          DISP=(NEW,CATLG,DELETE),
//SYSPUNCH  DD SYSOUT=*                                           
//SYSIN     DD *
SELECT * FROM ABC.DEF
//          DD  DISP=(OLD,PASS),DSN=*.SETVAR.OUTPUT01
//*

... где PRM2FILE - это программа, которую вы пишете, чтобы взять все, что находится в поле parm, изапишите это в OUTPUT01 DD.

Мы много делаем для достижения той же цели, которую вы пытаетесь достичь.

...