|
1 |
| - CMD PROMPT('Run Bash Command via Qshell') |
2 |
| - PARM KWD(CMDLINE) TYPE(*CHAR) LEN(5000) MIN(1) + |
3 |
| - EXPR(*YES) CASE(*MIXED) PROMPT('Bash + |
4 |
| - command line') |
5 |
| - PARM KWD(CMDLINEDLM) TYPE(*CHAR) LEN(1) + |
6 |
| - DFT(*SGLQUOTE) SPCVAL((*DBLQUOTE '"') + |
7 |
| - (*SGLQUOTE '''') (*NONE '')) PROMPT('Bash + |
8 |
| - command line delimiter') |
9 |
| - PARM KWD(DEBUGCMD) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
10 |
| - DFT(*NO) VALUES(*NO *YES) EXPR(*YES) + |
11 |
| - CASE(*MIXED) PROMPT('Debug bash command + |
12 |
| - line') |
13 |
| - PARM KWD(SETPKGPATH) TYPE(*CHAR) LEN(4) + |
14 |
| - RSTD(*YES) DFT(*YES) VALUES(*NO *YES) + |
15 |
| - EXPR(*YES) CASE(*MIXED) PROMPT('Set + |
16 |
| - QOpenSys yum package path') |
17 |
| - PARM KWD(DSPSTDOUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
18 |
| - DFT(*NO) VALUES(*NO *YES) PROMPT('Display + |
19 |
| - Standard Output Result') |
20 |
| - PARM KWD(LOGSTDOUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
21 |
| - DFT(*NO) VALUES(*NO *YES) PROMPT('Log + |
22 |
| - standard output to job log') |
23 |
| - PARM KWD(PRTSTDOUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
24 |
| - DFT(*NO) VALUES(*NO *YES) PROMPT('Print + |
25 |
| - Standard Output Result') |
26 |
| - PARM KWD(DLTSTDOUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
27 |
| - DFT(*YES) VALUES(*NO *YES) PROMPT('Delete + |
28 |
| - Standard Output Result') |
29 |
| - PARM KWD(IFSSTDOUT) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
30 |
| - DFT(*NO) VALUES(*NO *YES) PROMPT('Copy + |
31 |
| - std output to IFS file') |
32 |
| - PARM KWD(IFSFILE) TYPE(*CHAR) LEN(255) + |
33 |
| - PROMPT('IFS file for stdout results') |
34 |
| - PARM KWD(IFSOPT) TYPE(*CHAR) LEN(10) RSTD(*YES) + |
35 |
| - DFT(*REPLACE) VALUES(*ADD *REPLACE *NONE) + |
36 |
| - PROMPT('IFS file option') |
37 |
| - PARM KWD(CCSID) TYPE(*CHAR) LEN(10) DFT(*SAME) + |
38 |
| - SPCVAL((*SAME *SAME)) PROMPT('Coded + |
39 |
| - character set ID for job') |
40 |
| - PARM KWD(PRTSPLF) TYPE(*CHAR) LEN(10) DFT(QSHBASHLOG) PROMPT('Print stdout spool + |
41 |
| - file') |
42 |
| - PARM KWD(PRTUSRDTA) TYPE(*CHAR) LEN(10) DFT(*NONE) SPCVAL((*NONE ' ')) + |
43 |
| - PROMPT('Print stdout user data') |
44 |
| - PARM KWD(PRTTXT) TYPE(*CHAR) LEN(30) DFT(*NONE) SPCVAL((*NONE ' ')) CASE(*MIXED) + |
45 |
| - PROMPT('Print stdout print text') |
46 |
| - PARM KWD(PRTHOLD) TYPE(*CHAR) LEN(4) RSTD(*YES) + |
47 |
| - DFT(*YES) VALUES(*NO *YES) SPCVAL((*NONE + |
48 |
| - ' ')) CASE(*MIXED) PROMPT('Print stdout + |
49 |
| - hold spool file') |
50 |
| - PARM KWD(PRTOUTQ) TYPE(QUAL2) MIN(1) + |
51 |
| - PROMPT('Print stdout to outq') |
52 |
| - PARM KWD(OUTFILE) TYPE(QUAL3) MIN(1) PROMPT('File + |
53 |
| - to receive output') |
54 |
| - PARM KWD(MBROPT) TYPE(*CHAR) LEN(10) RSTD(*YES) + |
55 |
| - DFT(*REPLACE) VALUES(*ADD *REPLACE) + |
56 |
| - PROMPT('Replace or add records') |
57 |
| - PARM KWD(PASEJOBNAM) TYPE(*CHAR) LEN(10) + |
58 |
| - DFT(*DEFAULT) CASE(*MIXED) PROMPT('PASE + |
59 |
| - fork thread job names') |
60 |
| - QUAL2: QUAL TYPE(*NAME) LEN(10) DFT(*SAME) + |
61 |
| - SPCVAL((*SAME)) EXPR(*YES) |
62 |
| - QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + |
63 |
| - SPCVAL((*LIBL)) EXPR(*YES) PROMPT('Library') |
64 |
| - QUAL3: QUAL TYPE(*NAME) LEN(10) DFT(STDOUTQSH) + |
65 |
| - SPCVAL((*SAME)) EXPR(*YES) |
66 |
| - QUAL TYPE(*NAME) LEN(10) DFT(QTEMP) + |
67 |
| - SPCVAL((*LIBL)) EXPR(*YES) PROMPT('Library') |
| 1 | + PGM PARM(&SQL &OUTPUTFMT &JSONFMT &OUTPUTFILE &OPTION + |
| 2 | + &SETPKGPATH &DSPSTDOUT &LOGSTDOUT + |
| 3 | + &PRTSTDOUT &DLTSTDOUT &IFSSTDOUT &IFSFILE + |
| 4 | + &IFSOPT &CCSID &PRTSPLF &PRTUSRDTA + |
| 5 | + &PRTTXT &PRTHOLD &PRTOUTQALL &PASEJOBNAM + |
| 6 | + &VIEWOUTPUT) |
| 7 | + |
| 8 | +/*----------------------------------------------------------------------------*/ |
| 9 | +/* Variables */ |
| 10 | +/*----------------------------------------------------------------------------*/ |
| 11 | + DCL VAR(&VIEWOUTPUT) TYPE(*CHAR) LEN(4) |
| 12 | + DCL VAR(&SQL) TYPE(*CHAR) LEN(1024) |
| 13 | + DCL VAR(&OUTPUTFILE) TYPE(*CHAR) LEN(255) |
| 14 | + DCL VAR(&OUTPUTFMT) TYPE(*CHAR) LEN(10) |
| 15 | + DCL VAR(&JSONFMT) TYPE(*CHAR) LEN(10) |
| 16 | + DCL VAR(&JSONEXPORT) TYPE(*CHAR) LEN(100) |
| 17 | + DCL VAR(&OPTION) TYPE(*CHAR) LEN(10) |
| 18 | + DCL VAR(&PRTHOLD) TYPE(*CHAR) LEN(4) |
| 19 | + DCL VAR(&PRTOUTQALL) TYPE(*CHAR) LEN(20) |
| 20 | + DCL VAR(&PRTOUTQ) TYPE(*CHAR) LEN(10) |
| 21 | + DCL VAR(&PRTOUTQLIB) TYPE(*CHAR) LEN(10) |
| 22 | + DCL VAR(&CMDLINE) TYPE(*CHAR) LEN(5000) |
| 23 | + DCL VAR(&CURLCMDLIN) TYPE(*CHAR) LEN(5000) |
| 24 | + DCL VAR(&SETPKGPATH) TYPE(*CHAR) LEN(4) |
| 25 | + DCL VAR(&DSPSTDOUT) TYPE(*CHAR) LEN(4) |
| 26 | + DCL VAR(&LOGSTDOUT) TYPE(*CHAR) LEN(4) |
| 27 | + DCL VAR(&DLTSTDOUT) TYPE(*CHAR) LEN(4) |
| 28 | + DCL VAR(&PRTSTDOUT) TYPE(*CHAR) LEN(4) |
| 29 | + DCL VAR(&IFSSTDOUT) TYPE(*CHAR) LEN(4) |
| 30 | + DCL VAR(&IFSOPT) TYPE(*CHAR) LEN(10) |
| 31 | + DCL VAR(&IFSFILE) TYPE(*CHAR) LEN(255) |
| 32 | + DCL VAR(&PRTSPLF) TYPE(*CHAR) LEN(10) |
| 33 | + DCL VAR(&PRTUSRDTA) TYPE(*CHAR) LEN(10) |
| 34 | + DCL VAR(&PRTTXT) TYPE(*CHAR) LEN(30) |
| 35 | + DCL VAR(&QT) TYPE(*CHAR) LEN(1) VALUE('''') |
| 36 | + DCL VAR(&CCSID) TYPE(*CHAR) LEN(10) |
| 37 | + DCL VAR(&PASEJOBNAM) TYPE(*CHAR) LEN(10) |
| 38 | + |
| 39 | +/*----------------------------------------------------------------------------*/ |
| 40 | +/* MONITOR FOR GLOBAL ERROR. ANY ERROR IS A CAUSE TO BLOW OUT OF HERE */ |
| 41 | +/* AND WE WANT A GRACEFUL EXIT. */ |
| 42 | +/*----------------------------------------------------------------------------*/ |
| 43 | + MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERRORS)) |
| 44 | + |
| 45 | +/*----------------------------------------------------------------------------*/ |
| 46 | +/* Extract output queue info. */ |
| 47 | +/*----------------------------------------------------------------------------*/ |
| 48 | + CHGVAR VAR(&PRTOUTQ) VALUE(%SST(&PRTOUTQALL 1 10)) |
| 49 | + CHGVAR VAR(&PRTOUTQLIB) VALUE(%SST(&PRTOUTQALL 11 10)) |
| 50 | + |
| 51 | +/*----------------------------------------------------------------------------*/ |
| 52 | +/* MAIN */ |
| 53 | +/*----------------------------------------------------------------------------*/ |
| 54 | + /* Output file is required */ |
| 55 | + IF COND(&OUTPUTFILE *EQ ' ') THEN(DO) |
| 56 | + SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('Output + |
| 57 | + file name must be specified') + |
| 58 | + MSGTYPE(*ESCAPE) |
| 59 | + ENDDO |
| 60 | + |
| 61 | + /* Check for output file and replace if selected and exists */ |
| 62 | + QSHONI/QSHIFSCHK FILNAM(&OUTPUTFILE) |
| 63 | + /* Not Found. Do nothing special */ |
| 64 | + MONMSG MSGID(CPF9898) EXEC(DO) |
| 65 | + ENDDO |
| 66 | + /* Found. Delete if selected */ |
| 67 | + MONMSG MSGID(CPF9897) EXEC(DO) |
| 68 | + /* Delete output file if found and replace */ |
| 69 | + IF COND(&OPTION *EQ *REPLACE) THEN(DO) |
| 70 | + ERASE OBJLNK(&OUTPUTFILE) |
| 71 | + ENDDO |
| 72 | + ENDDO |
| 73 | + |
| 74 | + |
| 75 | + /* Build db2util command line to pass to qshell or bash */ |
| 76 | + /* with JSON formatting export statement */ |
| 77 | + IF COND(&OUTPUTFMT *EQ 'json') THEN(DO) |
| 78 | + CHGVAR VAR(&CURLCMDLIN) VALUE('export + |
| 79 | + DB2UTIL_JSON_CONTAINER=' |< &JSONFMT |< + |
| 80 | + '; db2util -o' |> &OUTPUTFMT |> '"' |< + |
| 81 | + &SQL |< '" >>' |> &OUTPUTFILE) |
| 82 | + ENDDO |
| 83 | + /* Build db2util command line to pass to qshell or bash */ |
| 84 | + /* with JSON formatting export statement */ |
| 85 | + IF COND(&OUTPUTFMT *NE 'json') THEN(DO) |
| 86 | + CHGVAR VAR(&CURLCMDLIN) VALUE('db2util -o' |> + |
| 87 | + &OUTPUTFMT |> '"' |< &SQL |< '" >>' |> + |
| 88 | + &OUTPUTFILE) |
| 89 | + ENDDO |
| 90 | + |
| 91 | + /* Run the db2util command via QSHBASH */ |
| 92 | + QSHONI/QSHBASH CMDLINE(&CURLCMDLIN) + |
| 93 | + SETPKGPATH(&SETPKGPATH) + |
| 94 | + DSPSTDOUT(&DSPSTDOUT) + |
| 95 | + LOGSTDOUT(&LOGSTDOUT) + |
| 96 | + PRTSTDOUT(&PRTSTDOUT) + |
| 97 | + DLTSTDOUT(&DLTSTDOUT) + |
| 98 | + IFSSTDOUT(&IFSSTDOUT) IFSFILE(&IFSFILE) + |
| 99 | + IFSOPT(&IFSOPT) CCSID(&CCSID) + |
| 100 | + PRTSPLF(&PRTSPLF) PRTUSRDTA(&PRTUSRDTA) + |
| 101 | + PRTTXT(&PRTTXT) PRTHOLD(&PRTHOLD) + |
| 102 | + PRTOUTQ(&PRTOUTQLIB/&PRTOUTQ) + |
| 103 | + MBROPT(*REPLACE) PASEJOBNAM(&PASEJOBNAM) |
| 104 | + |
| 105 | + /* View output file after creation if selected */ |
| 106 | + IF COND(&VIEWOUTPUT *EQ *YES) THEN(DO) |
| 107 | + EDTF STMF(&OUTPUTFILE) |
| 108 | + ENDDO |
| 109 | + |
| 110 | + SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('db2util + |
| 111 | + command completed to file' |> + |
| 112 | + &OUTPUTFILE) MSGTYPE(*COMP) |
| 113 | + |
| 114 | + RETURN |
| 115 | + |
| 116 | +ERRORS: |
| 117 | + SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('db2util + |
| 118 | + command failed') MSGTYPE(*ESCAPE) |
| 119 | + |
| 120 | + ENDPGM: |
| 121 | + ENDPGM |
0 commit comments