|
The commands are STRQMQRY and CRTQMQRY. CRTQMQRY creates
objects of type *QMQRY. These objects may be used by STRQMQRY.
For example if I put the following in a source file:
SELECT * FROM library/file
And then I run the command CRTQMQRY against this source file,
I'll get a *QMQRY object. Then I can run STRQMQRY against this
object. All done on a system without the SQL product installed.
Now are you ready for the really cool item? 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')
Qin_Huang@schindler.com on 05/10/2000 08:01:29 PM
Please respond to RPG400-L@midrange.com@Internet
To: RPG400-L@midrange.com@Internet
cc:
Fax to:
Subject: Re: No subject given
Thanks for you to give it a subject.
I didn't fully understand your information.
FYI, when I type qmqry in the command line it just would tell me that ' Command
QMQRY in library *LIBL not found.'
best regards,
hqin
owner-rpg400-l@MIDRANGE.COM on 2000-05-09 22:22:09
Please respond to RPG400-L@MIDRANGE.COM
To: <RPG400-L@MIDRANGE.COM>
cc:
Subject: Re: No subject given
FYI, every AS400 has SQL processing capability built in. You do not
need the licensed product unless you need the SQL preprocessor for
embedded SQL in HLL. You can, in fact, run SQL statements from the
command line with a little program that uses QMQRY objects. If you
want more information on this, contact me directly.
hth
eric.delong@pmsi-services.com
______________________________ Reply Separator _________________________________
Subject: No subject given
Author: <RPG400-L@MIDRANGE.COM> at INET_WACO
Date: 5/9/00 10:42 AM
Dear all,
I have a model 720 installed BPCS405CD, however we have no Query nor SQL on that
machine, we have a old slower model 170 with sql and Query, is it possible for
me to access and update the date in IIM file of the Model 720 from old one Model
170?
thanks in anticipation of your kindly help
hqin
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-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.