Hi All,
We created a standard version of the RUNSQL command to allow us to exectue SQL statements in CL programs. What I want is to run a select statement over a file for a specific key value and have it return the selected field(s) to locally declared CL Variables so I can use these values for subsequent SQL statements...
I am sure I could dump my results into an outfile in QTEMP and read that but was hoping to make it a little cleaner...and not have to call another program/procedure etc to get me the data elements.
Any ideas?
Thanks,
Rayden.
Software/Hardware used:
ASKED:
February 16, 2006 1:32 PM
UPDATED:
November 30, 2009 3:38 AM
Hi,
I have a similar problem. I need to run a CL command in my SQL script. I can think of many ways to accomplish this but I am looking on a ‘clean’ solution. I want to remove a trigger before SQL zaps the file.
Thank you for your help.
Ash
To run a CL cmd in a SQL script you have to do 2 things :
1) create a stored proc that calls a cl:
CREATE PROCEDURE JPL/SYSCMD(
IN AS400COMMANDE CHARACTER (6000 )
)
LANGUAGE CL
NOT DETERMINISTIC
NO SQL
EXTERNAL NAME JPL/JPLSYSCMD
PARAMETER STYLE GENERAL
(put it in your work library, here it is JPL)
2) mke the corresponding CL :
PGM &cmd
DCL VAR(&CMD) TYPE(*CHAR) LEN(6000)
/*===========GESTION-DES-MESSAGES-D’ERREUR————————–*/
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(512)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
/*-RENVOI-DES-MESSAGES-VERS-L’APPELANT——————*/
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(STDMONMSG))
GOTO CMDLBL(DEBUTPGM)
STDMONMSG:
/*———–CAPTURE-DU-MESSAGE———————-*/
RCVMSG MSGTYPE(*LAST) RMV(*NO) MSGDTA(&MSGDTA) +
MSGID(&MSGID) MSGF(&MSGF) +
SNDMSGFLIB(&MSGFLIB)
/*———–PROMOTION-DU-MESSAGE——————–*/
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
RETURN
DEBUTPGM:
/*===========CORPS-DU-PROGRAMME————————————-*/
CALL PGM(QCMDEXC) PARM(&CMD 6000)
FIN: ENDPGM
Now, when running SQL you can execute :
CALL SYSCMD (‘CLRPFM alib/afile’)