*================================================================ * SISTEMA.....: Modulo de Indicadores de Gestion. * PROGRAMA....: ZGFCFIGI * DESCRIPCION.: Envia consulta de SQL formada por una formula * ANALISIS....: Nicolas Machado * PROGRAMACION: Nicolas Machado * FECHA.......: 12/11/2004 * (c) COPYRIGHT METODO Argentina S.A. *================================================================ H DEBUG DATEDIT(*YMD) * * -------------------------------------------------------------- * * Definicion de Prototipos * -------------------------------------------------------------- * D Qcmd PR ExtPgm('QCMDEXC') D Command 32702A const options(*varsize) D Length 15P 5 const * -------------------------------------------------------------- * * Definicion de Variables Globales * -------------------------------------------------------------- * D SqlStmt S 1024A D Resultado S 30 9 D Formula S 1024A D Comando S 1024a D Form S 40a * D time_start s z D time_end s z D diffSecsMs s 26s 0 D diffSecs s 30s 6 D dum s 30 * D piFormula S 1024A D poResult S 30 9 D poError S 10A * -------------------------------------------------------------- * * Parametros de Entrada / Salida * * -------------------------------------------------------------- * C *ENTRY PLIST C PARM piFormula C PARM poResult C PARM poError * -------------------------------------------------------------- * * * * -------------------------------------------------------------- * C C If %Parms = 0 * // Para Ejemplo C eval Formula = '( 125 + 30 + ( 1.5 * 2 ) )' C eval Form = %trim(formula) C 'Formula' Dsply Form C if Form <> *blanks C eval Formula = %trim(Form) C Endif * C Else C eval Formula = piFormula C Endif * ------ * --------------------------------------------------------------- * Inicializacion de Archivo Temporal * // Borra Archivo temporal C eval comando = 'DLTF FILE(QTEMP/DUMMY)' C callp(e) Qcmd(%trim(comando) : C %len(%trim(comando))) * * // crea Archivo temporal c eval comando = 'Crtpf FILE(QTEMP/DUMMY) ' + c 'RCDLEN(100)' C callp Qcmd(%trim(comando) : C %len(%trim(comando))) * C eval time_start = %timestamp() * C/EXEC SQL C+ C+ INSERT INTO QTEMP/DUMMY (DUMMY) VALUES('nada') C+ C/END-EXEC * --------------------------------------------------------------- * Definición de sentencias SQL. C/EXEC SQL C+ DECLARE C1 DYNAMIC SCROLL CURSOR FOR S1 C/END-EXEC * /free SqlStmt = 'Select distinct ' + %trim(Formula) + ' from qtemp/dummy' ; // /end-free * C/EXEC SQL C+ PREPARE S1 FROM :SqlStmt C/END-EXEC * C/EXEC SQL C+ OPEN C1 C/END-EXEC * C/EXEC SQL C+ FETCH NEXT FROM C1 INTO :Resultado C/END-EXEC * * C/EXEC SQL C+ CLOSE C1 C/END-EXEC * --- * C eval time_end = %timestamp() C time_end Subdur time_start DiffSecsMs:*MS C eval DiffSecs = DiffSecsMS / 1000000 * * --- C SQLCOD IFNE *ZEROS C eval Resultado = 0 C eval poResult = Resultado C eval poError = SQLERR C else * C if %parms = 0 C 'Resultado:' Dsply C Resultado Dsply * C eval dum = %trim(%editc(DiffSecs:'J')) C 'Elapsed T.' Dsply C dum Dsply C eval form = *blanks C 'Oprima Enter'Dsply form * c else c eval poResult = Resultado C eval poError = *blanks c endif C END * C eval *inlr = *on