|
To get a free sql processor do the following:
Put the following in a source file:
&LINE01&LINE02&LINE03&LINE04&LINE05&LINE06&LINE07&LINE08&LINE09&LINE10
Do a CRTQMQRY against this object.
Create the following CL program:
/********************************************************************/
/* */
/* Program - ZUCXSQL */
/* This is the command processing program for command RUNSQL. */
/* */
/********************************************************************/
/* */
/* Description: Process SQL commands using QM query. */
/* */
/********************************************************************/
SQL: PGM PARM(&LINES &TYPE &OUTFILE &OUTMBR &PRTFILE)
DCL VAR(&TYPE) TYPE(*CHAR) LEN(10)
DCL VAR(&LINES) TYPE(*CHAR) LEN(550)
DCL VAR(&LINE01) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE02) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE03) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE04) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE05) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE06) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE07) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE08) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE09) TYPE(*CHAR) LEN(55)
DCL VAR(&LINE10) TYPE(*CHAR) LEN(55)
DCL VAR(&OUTFILE) TYPE(*CHAR) LEN(20)
DCL VAR(&OFIL) TYPE(*CHAR) LEN(10)
DCL VAR(&OLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTMBR) TYPE(*CHAR) LEN(20)
DCL VAR(&OMBR) TYPE(*CHAR) LEN(10)
DCL VAR(&ORPL) TYPE(*CHAR) LEN(10)
DCL VAR(&PRTFILE) TYPE(*CHAR) LEN(20)
DCL VAR(&PLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PFIL) TYPE(*CHAR) LEN(10)
/* Standard error handler fields */
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&ERRORSW) TYPE(*LGL)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
CHGVAR VAR(&LINE01) VALUE(%SST(&LINES 1 55))
CHGVAR VAR(&LINE02) VALUE(%SST(&LINES 56 55))
CHGVAR VAR(&LINE03) VALUE(%SST(&LINES 111 55))
CHGVAR VAR(&LINE04) VALUE(%SST(&LINES 166 55))
CHGVAR VAR(&LINE05) VALUE(%SST(&LINES 221 55))
CHGVAR VAR(&LINE06) VALUE(%SST(&LINES 276 55))
CHGVAR VAR(&LINE07) VALUE(%SST(&LINES 331 55))
CHGVAR VAR(&LINE08) VALUE(%SST(&LINES 386 55))
CHGVAR VAR(&LINE09) VALUE(%SST(&LINES 441 55))
CHGVAR VAR(&LINE10) VALUE(%SST(&LINES 496 55))
CHGVAR VAR(&OFIL) VALUE(%SST(&OUTFILE 1 10))
CHGVAR VAR(&OLIB) VALUE(%SST(&OUTFILE 11 10))
CHGVAR VAR(&OMBR) VALUE(%SST(&OUTMBR 1 10))
CHGVAR VAR(&ORPL) VALUE(%SST(&OUTMBR 11 10))
CHGVAR VAR(&PFIL) VALUE(%SST(&PRTFILE 1 10))
CHGVAR VAR(&PLIB) VALUE(%SST(&PRTFILE 11 10))
IF COND(&TYPE = '*OUTFILE') +
THEN(DO)
STRQMQRY QMQRY(ZUQXSQL) OUTPUT(&TYPE) +
OUTFILE(&OLIB/&OFIL) OUTMBR(&OMBR &ORPL) +
ALWQRYDFN(*YES) SETVAR((LINE01 &LINE01) +
(LINE02 &LINE02) (LINE03 &LINE03) (LINE04 +
&LINE04) (LINE05 &LINE05) (LINE06 +
&LINE06) (LINE07 &LINE07) (LINE08 +
&LINE08) (LINE09 &LINE09) (LINE10 &LINE10))
MONMSG MSGID(QWM0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('+
Syntax error in SQL statement. See previous +
messages for details') MSGTYPE(*DIAG)
ENDDO
ENDDO
ELSE (DO)
OVRPRTF FILE(QPQXPRTF) TOFILE(&PLIB/&PFIL)
STRQMQRY QMQRY(ZUQXSQL) OUTPUT(&TYPE) +
ALWQRYDFN(*YES) SETVAR((LINE01 &LINE01) +
(LINE02 &LINE02) (LINE03 &LINE03) (LINE04 +
&LINE04) (LINE05 &LINE05) (LINE06 +
&LINE06) (LINE07 &LINE07) (LINE08 +
&LINE08) (LINE09 &LINE09) (LINE10 &LINE10))
MONMSG MSGID(QWM0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('+
Syntax error in SQL statement. See previous +
messages for details') MSGTYPE(*DIAG)
ENDDO
DLTOVR FILE(QPQXPRTF)
ENDDO
RETURN /* Normal end of program */
ERROR: /* Standard error handler */
IF COND(&ERRORSW) THEN(SNDPGMMSG MSGID(CPF9999) +
MSGF(QCPFMSG) MSGTYPE(*ESCAPE)) /* +
Function check message */
CHGVAR VAR(&ERRORSW) VALUE('1')
ERROR2: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) MSGFLIB(&MSGFLIB)
IF COND(&MSGID = ' ') THEN(GOTO +
CMDLBL(ERROR3))
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO CMDLBL(ERROR2)
ERROR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) MSGFLIB(&MSGFLIB)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
ENDPGM
Create the following command:
/********************************************************************/
/* */
/* Command definition for RUNSQL command */
/* Command processing program is ZUCXSQL */
/* */
/********************************************************************/
/* */
/* Description: Process SQL commands using QM query. */
/* */
/********************************************************************/
CMD PROMPT('Process SQL commands')
PARM KWD(REQUEST) TYPE(*CHAR) LEN(550) MIN(1) +
PROMPT('SQL request')
PARM KWD(OUTPUT) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*) VALUES(* *PRINT *OUTFILE) MIN(0) +
PROMPT('Output')
PARM KWD(OUTFILE) TYPE(T1) MIN(0) PMTCTL(P1) +
PROMPT('File to receive output')
PARM KWD(MEMBER) TYPE(T2) MIN(0) PMTCTL(P1) +
PROMPT('Output member options')
PARM KWD(PRTFILE) TYPE(T3) MIN(0) PMTCTL(P2) +
PROMPT('Printer file to use')
T1: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) +
SPCVAL((*LIBL) (*CURLIB)) PROMPT('Library')
T2: QUAL TYPE(*NAME) LEN(10) DFT(*FIRST) +
SPCVAL((*FIRST))
QUAL TYPE(*NAME) LEN(10) RSTD(*YES) DFT(*REPLACE) +
SPCVAL((*REPLACE) (*ADD)) PROMPT('Replace +
or add records')
T3: QUAL TYPE(*NAME) LEN(10) DFT(QPQXPRTF)
QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) +
SPCVAL((*LIBL) (*CURLIB)) PROMPT('Library')
P1: PMTCTL CTL(OUTPUT) COND((*EQ *OUTFILE))
P2: PMTCTL CTL(OUTPUT) COND((*EQ *PRINT))
You are then done.
Sample execution:
runsql ('Select * from library/file')
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.