Professional Documents
Culture Documents
Categora : Programacin
Autor : Carlos Robles Espinoza
Ttulo : Armado de un SQL dinamico en SQLRPGLE
Descripcin del truco:
Este truco consiste en el armado de sentencia SQL dinamicamente segun parametros
recibidos que pude ser tambien una pantalla, para el ejemplo se tomo el ingreso por *entry.
Si se ingresa un dato se arma la sentencia con ese dato recibido y asi susecivamente con los
siguientes, aca es la condicion por EQ y AND.
El secreto esta en el SQL sentencias Prepare y Declare. Esto ya esta probado y aceptado
para una aplicacion on-line en desarrollo con mas de 17 opciones de seleccion dinamicas
ademas se le agrego order by. Funciona, con esto no se crean 17 LF.
Esta realizado en SQLRPGLE tiene algo de free, el real esta en desarrollo en free y sub-file.
Espero que les ayude este ejemplo.
H Debug Option(*nodebugio)
*
*
**
Sistema
: Consulta masiva on-line
**
Modulo
:
**
Analisis
: Carlos Robles Espnoza
**
Programacion: Carlos Robles Espinoza
SIDESYS
**
Fecha.......: Octubre 2004 - Argentina
*
**
Descripcin : Arma un SQL dinamicamente segun parametros
**
ingresados.
**
Es un fuente Beta que va a servir como base
**
para una aplicacion on-line de consulta masiva
**
para usuarios finales.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
FTCIPICCOUTIF A E
K DISK
rename(CIPICCTI:OUPICCTI)
F
prefix(ou:2) usropn
* ===================================================================
* Auxiliares para SQL
* Variables tipo const
D VarSelect
c
const('select tifecp, tifdpf,
tificcD
,tifrec, tihora, tinnrr, tirrec
D
from tcipicc where ')
D VarEq
c
const(' = ')
D VarAnd
c
const(' and ')
D VarFdpf
c
const(' tifdpf')
D VarFicc
c
const(' tificc')
D VarFecp
c
const(' tifecp')
*
D VarAll
s
1000a
inz(*blanks)
*
* Sentencia para SQL
D Str_sql
s
1000a
inz(*blanks)
* ===============================================================
D
D
D
D
s$_fdpf
s$_ficc
s$_fecp
ip_flag
s
s
s
like(oufdpf) inz(*blanks)
like(ouficc) inz(*zeros)
like(oufecp) inz(*zeros)
DIM(3)
PR
extpgm('QCMDEXC')
200A
options(*varsize) const
15P 5 const
SDS
C
C
C
C
Prog
Parms
Pgm_lib
Job_name
User
Job_num
*entry
*proc
*parms
81
244
254
264
90
253
263
269s 0
plist
parm
parm
parm
exsr
ip_fdpf
ip_ficc
ip_fecp
rinicio
C
C
C
C
C
C
C
C
if
move
eval
endif
C
C
C
C
if
move
eval
endif
/free
VarAll = VarSelect;
if ip_flag(1);
10
8
8
/end-free
* Prepara y carga variables SQL
C/EXEC SQL
C+ Prepare P1 From : str_sql
C/End-Exec
* Declara Cursor
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR P1
C/END-EXEC
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
C
*
*
*
ex_fetch
eval
*inlr = *on
FIN Pgm
C
C
exsr
----------ex_fetch
-----------
------Begsr
-------
write
OUPICCTI
Endsr
-------
*
*
----------rinicio
-----------
------Begsr
-------
C
C
C
Endsr
H Debug Option(*nodebugio)
*
*
**
Sistema
: Consulta masiva on-line
*
**
Modulo
:
*
**
Analisis
: Carlos Robles Espnoza
*
**
Programacion: Carlos Robles Espinoza
SIDESYS
*
**
Fecha.......: Octubre 2004 - Argentina
*
*
*
**
Descripcin : Arma un SQL dinamicamente segun parametros
*
**
ingresados.
*
**
Es un fuente Beta que va a servir como base
*
**
para una aplicacion on-line de consulta masiva para
*
**
usuarios finales.
*
*
*
*
*
FTCIPICCOUTIF A E
K DISK
rename(CIPICCTI:OUPICCTI)
F
prefix(ou:2) usropn
* ===================================================================
* Auxiliares para SQL
* Variables tipo const
D VarSelect
c
const('select tifecp, tifdpf,
tificcD
,tifrec, tihora, tinnrr, tirrec
D
from tcipicc where ')
D VarEq
c
const(' = ')
D VarAnd
c
const(' and ')
D VarFdpf
c
const(' tifdpf')
D VarFicc
c
const(' tificc')
D VarFecp
c
const(' tifecp')
*
D VarAll
s
1000a
inz(*blanks)
*
* Sentencia para SQL
D Str_sql
s
1000a
inz(*blanks)
* ===============================================================
D
D
D
D
s$_fdpf
s$_ficc
s$_fecp
ip_flag
s
s
s
like(oufdpf) inz(*blanks)
like(ouficc) inz(*zeros)
like(oufecp) inz(*zeros)
DIM(3)
PR
extpgm('QCMDEXC')
200A
options(*varsize) const
15P 5 const
SDS
Prog
Parms
*proc
*parms
D
D
D
D
C
C
C
C
Pgm_lib
Job_name
User
Job_num
*entry
81
244
254
264
90
253
263
269s 0
plist
parm
parm
parm
exsr
ip_fdpf
ip_ficc
ip_fecp
rinicio
C
C
C
C
C
C
C
C
if
move
eval
endif
C
C
C
C
if
move
eval
endif
/free
VarAll = VarSelect;
if ip_flag(1);
VarAll = %trimr(VarAll) + VarFdpf + VarEq
+ '''' + s$_fdpf + '''';
endif;
if ip_flag(2);
if VarAll <> VarSelect;
VarAll = %trimr(VarAll) + VarAnd;
endif;
VarAll = %trimr(VarAll) + VarFicc + VarEq
+ %char(s$_ficc);
endif;
if ip_flag(3);
if VarAll <> VarSelect;
VarAll = %trimr(VarAll) + VarAnd;
endif;
VarAll = %trimr(VarAll) + VarFecp + VarEq
+ %char(s$_fecp);
endif;
Str_sql = VarAll;
/end-free
10
8
8
FIN Pgm
----------ex_fetch
-----------
exsr
ex_fetch
eval
*inlr = *on
------Begsr
-------
C
C
Endsr
-------
*
*
C
----------rinicio
-----------
------Begsr
-------
C
C
C
Endsr