RCSPC - Precompile a REXX SQL Exec for
RLX
/Compile

Describes the RCSPC - Precompile a REXX SQL exec for
RLX
/Compile procedure.
The RCSPC procedure in the following example is composed of the following four steps:
(1)
The procedure step that is named RCSP extracts and modifies the SQL statements that are embedded in your REXX source module and writes them to the RCSEXTR file. The RCSP step also modifies the original REXX exec. The SQL statements that it writes to the RCSEXTR extract file are also prefixed with an identifying DBRM name and statement number.
(2)
The second step, named RCSC, reads and compiles the set of SQL statements that are extracted from the original source exec to produce an assembly language module containing embedded SQL. These static SQL statements correspond to the SQL statements extracted from your
RLX
source procedure.
(3)
The procedure step that is named DSNHPC executes the Db2 precompiler to translate the assembly language module produced by the RCSC step.
(4)
Lastly, the ASM procedure step assembles the source module that is produced by the Db2 precompiler into an object module.
//*--------------------------------------------------------------------- //* (C) COPYRIGHT RELATIONAL ARCHITECTS INTL. //* LICENSED MATERIAL - PROGRAM PROPERTY RELATIONAL ARCHITECTS INTL //*--------------------------------------------------------------------- //* RLX/COMPILE - COMPILE REXX SQL EXECS TO PRODUCE //* RLX SQL REQUEST MODULES //*--------------------------------------------------------------------- //RCSPC PROC RLXLOAD='RAI.Rvrm.CRAILOAD, ** RLX SYSTEM LOADLIB // RLXEXEC='RAI.Rvrm.CRAIEXEC, ** RLX SYSTEM EXEC LIB // RLXMLIB='RAI.Rvrm.CRAIMSG', ** RLX ISPF MSG LIB // RLXSLIB='RAI.Rvrm.CRAISKEL, ** RLX ISPF SKEL LIB // RLXMACS='RAI.Rvrm.CRAIMACS, ** RLX MACRO LIBRARIES // RLXCNTL='RAI.Rvrm.CRAIJCL', ** RLX CONTROL LIBRARY // RCSIN='USER.EXEC', ** SOURCE EXEC LIBRARY // RCSEXEC='USER.RCSEXEC', ** PREPROCESSED REXX EXEC // RCSOBJ='USER.RCSOBJ', ** USER SQL REQUESTOR OBJ // RCSDBRM='USER.DBRMLIB', ** USER DBRMLIB // DSNLOAD='DSN.SDSNLOAD', ** Db2 LOAD LIBRARY // DSNLINK='DSN.SDSNLINK', ** Db2 LOAD LIB // SQLEXEC=SQLEXEC, ** NAME OF THE RLX EXEC // SQLREQ=SQLREQ ** SQL REQUESTOR MODULE //*------------------------------------------------------------------ //* PRECOMPILE THE RLX COMMAND PROCEDURE //*------------------------------------------------------------------ //RCSP EXEC PGM=RCSP,REGION=2M,COND=(4,LT) //STEPLIB DD DSN=&RLXLOAD,DISP=SHR //RCSIN DD DSN=&RCSIN,DISP=SHR //RCSOUT DD DSN=&RCSEXEC(&SQLEXEC),DISP=SHR //RCSEXTR DD DSN=&RCSRRM(&SQLEXEC),UNIT=SYSDA,SPACE=(CYL,(10,1,1)), // DISP=(NEW,PASS),DCB=(LRECL=84,RECFM=VB,BLKSIZE=3120) //SYSTSPRT DD SYSOUT=* //RCSERROR DD SYSOUT=* //RCSFMT DD SYSOUT=* //*RCSAUX DD *,DCB=(LRECL=80,BLKSIZE=80) //*-------------------------------------------------------------------- //* COMPILE EXTRACTED SQL STATEMENTS AND GENERATE SQL REQUEST MODULE //*-------------------------------------------------------------------- //RCSC EXEC PGM=IKJEFT01,COND=(4,LT),REGION=7M //STEPLIB DD DSN=&RLXLOAD,DISP=SHR // DD DSN=&DSNLOAD,DISP=SHR // DD DSN=&DSNLINK,DISP=SHR //RCSEXTR DD DSN=&RCSRRM,DISP=(OLD,DELETE) //SYSPROC DD DSN=&RLXEXEC,DISP=SHR //ISPMLIB DD DSN=&RLXMLIB,DISP=SHR //RCSFTS DD DSN=&RLXSLIB,DISP=SHR //RCSASM0 DD DSN=&ASM0,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /WORK FILE 0 //RCSASM1 DD DSN=&ASM1,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /WORK FILE 1 //RCSASM2 DD DSN=&ASM2,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /WORK FILE 2 //RCSASM3 DD DSN=&ASM3,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /WORK FILE 3 //RCSASM DD DSN=&GSOURCE,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /GENERATED ASM SOURCE MOD //SYSTSPRT DD SYSOUT=* //SYSTSIN DD DSN=&CRAIJCL(RCSCIN),DISP=SHR //*-------------------------------------------------------------------- //* RUN THE RLX/COMPILE GENERATED ASM SOURCE MODULE //* THROUGH THE STANDARD Db2 PRECOMPILER //*-------------------------------------------------------------------- //DSNHPC EXEC PGM=DSNHPC,REGION=4096K,COND=(4,LT), // PARM='HOST(ASM),XREF,DATE(ISO),TIME(ISO),SOURCE' //STEPLIB DD DSN=&DSNLOAD,DISP=SHR // DD DSN=&DSNLINK,DISP=SHR //SYSLIB DD DUMMY //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT1 DD SPACE=(800,(500,500),,,ROUND),UNIT=SYSDA //SYSIN DD DSN=&GSOURCE,DISP=(OLD,DELETE) //SYSCIN DD DSN=&TSOURCE,UNIT=SYSDA,SPACE=(CYL,(10,1)), // DISP=(NEW,PASS) /TRANSLATED SOURCE MODULE //DBRMLIB DD DSN=&RCSDBRM(&SQLEXEC),DISP=SHR //*-------------------------------------------------------------------- //* ASSEMBLE THE Db2 PRECOMPILED SQL REQUESTOR SOURCE MODULE //*-------------------------------------------------------------------- //ASM EXEC PGM=IEV90,COND=(4,LT),PARM=(DECK,NOOBJ,TERM,BATCH,RENT, // 'SYSPARM=1111110110011'),REGION=2M,COND=(4,LT) //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=&RLXMACS,DISP=SHR //SYSUT1 DD DSN=&SYSUT1,UNIT=SYSDA,SPACE=(1700,(600,100)) //SYSUT2 DD DSN=&SYSUT2,UNIT=SYSDA,SPACE=(1700,(300,50)) //SYSUT3 DD DSN=&SYSUT3,UNIT=SYSDA,SPACE=(1700,(300,50)) //SYSTERM DD SYSOUT=*,DCB=BLKSIZE=1089 //SYSPRINT DD SYSOUT=*,DCB=BLKSIZE=1089 //SYSIN DD DSN=&TSOURCE,DISP=(OLD,DELETE) /* FROM Db2 PRECOMPILE //SYSPUNCH DD DSN=&RCSOBJ(&SQLREQ),DISP=SHR
The next sample illustrates the invocation of the RCSPC catalogued procedure which processes the original REXX exec to produce a Db2 DBRM and an object module. The numbers in the right margin correspond to the following numbered paragraphs:
(1)
RCSPC is invoked as a catalogued procedure. RCSPC can also be included instream with the JCL.
(2)
The RCSIN parameter identifies the EXEC library which contains the REXX source procedure to be processed.
(3)
The SQLEXEC parameter identifies the name of the REXX procedure within the EXEC library that is identified by the RCSIN parameter. The Db2 DBRM produced by RCSPC is assigned the name that you specify for the SQLEXEC parameter.
(4)
The SQLREQ parameter identifies the name of the SQL requestor object module that is produced by the RCSPC procedure. This parameter lets you assign a different name to the object module than that used for the Db2 DBRM.
(5)
The DD statement that is labeled RCSP.RCSPARMS provides the means by which to supply file input to the catalogued procedure step name RCSP. The NAME
parameter passed instream is required. It identifies the name of the REXX source exec to be precompiled.
//JOB JOB (PARMS) //STEP1 EXEC RCSPC,
(1)
// RCSIN='EXAMPLE.REXX.EXEC',
(2)
// SQLEXEC=EXAMPLE,
(3)
// SQLREQ=EXAMPLE
(4)
//RCSP.RCSPARMS DD *
(5)
NAME(EXAMPLE)