Manipulación de bases de datos desde programas CL, a través de Query/400
Aprenda cómo actualizar tablas desde programas CL, sin usar lenguajes de alto nivel, invocando y parametrizando Queries desde programas CL.
QUERY/400 permite generar consultas y almacenar sus características en objetos de tipo *QRYDFN: nombres de los archivos a consultar, formulario de salida (detalle o resumen), tipo de salida del informe (pantalla, impresora o archivo), criterio de selección de registros o definición de campos de resultado, etc.. Luego, para ejecutar consultas, el sistema operativo provee el comando RUNQRY.
Una vez que la consulta está definida (objeto *QRYDFN creado), existen dos posibilidades de cambiarla: se puede modificar las características de la consulta antes de ejecutarla; o bien alterar algunas de sus propiedades en el momento de invocarla, sólo para la ejecución corriente. Esta última opción permitirá realizar una especie de “override” de la definición de la consulta en forma dinámica, en función de datos ingresados por el usuario en el momento de la ejecución.
Estas facilidades, sumada a la posibilidad de incluir la sentencia RUNQRY dentro de un programa, potencian a los programas CL con una capacidad que naturalmente no poseen: la de grabar datos en archivos. Este último punto es el tema a tratar en el presente tip.
Alteración de características de la consulta en el momento de invocarla
El prompt del mandato RUNQRY posee parámetros que permiten alterar temporalmente algunas de las características de la consulta, solamente para esa ejecución. La siguiente pantalla muestra los parámetros del comando RUNQRY:
Detalles del prompt del mandato:
- Archivo de consulta: a través de este parámetro puede seleccionarse otro archivo sobre el cual la consulta se ejecutará. Es importante aclarar que el archivo elegido debe tener el mismo formato de registro que el archivo sobre el cual corre la consulta.
- Tipo de salida del informe: en este parámetro se puede especificar salida por pantalla, por impresora o por archivo.
- Formulario de salida: el valor *DETAIL muestra el listado completo; *SUMMARY, sólo información de resumen (totales, promedios, mínimos, máximos y contadores).
- Selección de registros: *YES habilita en forma automática la pantalla de Selección de registros, permitiendo escribir un criterio de selección diferente al especificado originalmente en la consulta. Este es el parámetro a destacar en este tip.
El siguiente punto incluye una aplicación ejemplo, donde se combina el uso de queries con selección de registros y salida por archivo, “todo” dentro del mismo programa CL.
Cómo potenciar un programa CL con invocaciones a consultas
El siguiente programa visualiza los objetos de tipo *FILE que son propiedad de un determinado usuario y pertenecen a una biblioteca, cuyo nombre se solicita por programa.
Detalles del programa:
- Se solicita el nombre de la biblioteca, y se chequea su existencia.
- El mandato DSPOBJD vuelca al archivo TEKQRY/ARCHIDES la descripción de cada uno de los archivos de la biblioteca seleccionada en el paso anterior.
- Se ejecuta la consulta sobre el archivo generado en el paso 2, especificando RCDSLT en *YES. Esta opción permite seleccionar registros que cumplan con un criterio. En este ejemplo, el nombre de un perfil de usuario que sea propietario de los archivos de la biblioteca seleccionada.
- Ejecuta la consulta y lista los nombres de los archivos que son propiedad del usuario elegido dinámicamente. En este punto, también podría invocarse a cualquier programa HLL que procese los datos del archivo.
El siguiente esquema representa la secuencia de acciones del programa anterior:
La posibilidad de manipular y actualizar tablas desde programas CL puede ser muy útil para pequeñas aplicaciones informales, desarrolladas a veces por operadores para resolver tareas cotidianas, sin necesidad de recurrir a lenguajes de alto nivel.
Para tener en cuenta...
- Cuando en el mandato RUNQRY, el parámetro RCDSLT (selección de registros) es *YES, la ejecución está limitada solamente a entornos interactivos. Debe considerarse los efectos sobre el rendimiento cuando se ejecutan consultas “pesadas” interactivamente.
- Si bien el comando RUNQRY puede utilizarse sin tener el producto bajo licencia QUERY/400, cuando RCDSLT está especificado en *YES, es necesario tener el producto instalado.
- Utilizar RUNQRY con selección de registros, dentro de un programa CL, resultará más eficiente, en términos de performance, que realizar la selección con sentencias IF en código CL.
Copyright Teknoda S.A.
IMPORTANTE: “Notas técnicas de AS/400 - IBM i" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes IBM i - AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. NS iTech - Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |