Lea en AS/400 System i . . .

Aprovechando las posibilidades del WRKACTJOB a través de sus parámetros

Obtenga una salida diferente de la habitual al ejecutar el comando WRKACTJOB, aprovechando lo ofrecido por algunos parámetros interesantes que posibilitan entre otras acciones la de renovar automáticamente la pantalla resultante.

FaceBookTwitterGoogle+

Cómo ejecutar sentencias SQL usando el comando CL RUNSQLSTM

Aprenda la manera de ejecutar sentencias SQL almacenadas en un miembro fuente, usando el comando CL RUNSQLSTM.

En algún momento todo programador ha ejecutado sentencias SQL, ya sea interactivamente a través del comando STRSQL,  o con RPG usando cursores SQL, o inclusive desde el entorno gráfico ofrecido por iSeries Navigator (ex Operations Navigator).

El comando  RUNSQLSTM (Run Structured Query Language Statement) es un comando CL que lee y procesa sentencias SQL almacenadas en un miembro fuente.  Las sentencias en el miembro fuente pueden ejecutarse sin ser compiladas. Esto permite que sentencias SQL estáticas  o inclusive las generadas dinámicamente puedan ejecutarse sin la necesidad de embeberlas en un lenguaje de alto nivel  como RPG.

El comando RUNSQLSTM puede correr una serie de sentencias SQL, pero está limitado a un subconjunto de sentencias SQL stardard. En la sección “Para tener en cuenta” se especifican todas las sentencias de ese  subconjunto.

En muchas situaciones nos encontramos con la necesidad de ejecutar esas sentencias, para que sean invocadas desde un programa CL y  ejecutar ese programa en entorno interactivo o batch.

Es sabido por todo usuario de AS/400 que la programación CL no permite hacer modificaciones de ningún tipo sobre archivos de bases de datos (sólo leer información con el comando RCVF). Por lo tanto, las sentencias SQL puras  no podrían mezclarse con sentencias del lenguaje de control cuando es necesario realizar tareas de mantenimiento de base de datos.

Aunque el entorno de programación CL interactivo o batch sea el entorno de ejecución  más común para el comando RUNSQLSTM, existen otras posibilidades de ejecución. Por ejemplo, como argumento del programa QCMDEXC.

Además, ya sea dentro de un programa CL o directamente en la línea de comandos,  RUNSQLSTM puede usarse para crear  Stored Procedures, usando la sentencia SQL CREATE PROCEDURE.

El proceso general para usar el comando RUNSQLSTM involucra la creación de un miembro fuente dentro de un archivo físico de fuentes (en donde el tipo de fuente no necesita ser ninguno de los tipos específicos como PF, CLP, LF o RPG, por ejemplo, sino sólo definirlo como TXT.); luego especificar la serie de sentencias SQL separadas por el carácter “;” (punto y coma) dentro de ese miembro fuente (como si se estuviera definiendo un fuente en RPG, CL , Cobol, etc), para finalmente y (opcionalmente en un programa CL)  ejecutar la sentencia RUNSQLSTM mencionando ese fuente TXT, donde se encuentran las sentencias SQL a ejecutar.

Consideraciones previas

  • A partir de la V5R1 el  comando RUNSQLSTM viene con el OS/400 (no se necesita comprar el producto DB2 Query Manager and SQL Development Kit para usarlo).  Como consecuencia, las sentencias SQL Create Table, Create View, Create Index y otras sentencias se pueden usar para crear objetos de base de datos aún sin contar con el producto SQL Development Kit.
  • Puesto que el comando RUNSQLSTM está esencialmente orientado al mantenimiento de base de datos y preparación de entornos de ejecución de programas,  no acepta sentencias de consulta, del tipo SELECT, por lo tanto es importante tener en cuenta que la sentencia SELECT SQL no puede ser ejecutada con el comando RUNSQLSTM.
  • A menos que el archivo sobre el que se está operando se encuentre bajo el entorno de Control de Compromiso (Commitment Control) ( y por lo tanto que el  archivo esté jornalizado),  debería especificarse  el parámetro COMMIT (*NONE) en el comando RUNSQLSTM. Si no está especificado *NONE en este parámetro,  se obtendrá un error al ejecutar las sentencias SQL contenidas en el fuente de texto,  cuando sean invocadas por el comando RUNSQLSTM.
  • Las sentencias SQL definidas en el miembro fuente de tipo TXT no pueden ser “prompteadas” . Esto puede ser un problema para aquellos usuarios sin conocimiento de la sintaxis de las sentencias SQL. Una buena opción para tener las sentencias sintácticamente correctas, es ejecutarlas  y probarlas previamente  en  entorno SQL interactivo (STRSQL)  y luego desde la sesión SQL salvada, copiarlas al fuente TXT que se está definiendo.
  • Como se mencionó anteriormente, se puede ejecutar más de una sentencia SQL en un único miembro fuente. La manera de hacerlo es agregando al final de cada sentencia un símbolo  “;” (punto y coma),  excepto para la última.

Ejemplo de uso del comando RUNSQLSTM

El  uso del comando RUNSQLSTM implica realizar los siguientes pasos:

1) Definición del  miembro fuente de tipo TXT:

Es necesario previamente crear la biblioteca y el archivo físico de fuentes donde se va a definir el nuevo miembro:  Ejemplo: TEKBIB/QTXTSRC/(fuenteSQL)

El siguiente es el grupo de sentencias SQL a definir en el miembro fuente Fuentesql (que va a ser  procesadas por el comando RUNSQLSTM):

0001   -- Se realiza primero la sentencia UPDATE
0002      UPDATE teklib.clieproc SET clicred = clicred *3 where nrocli= '3';
0003      CREATE VIEW teklib.vista1 AS SELECT nomcli, domicilio, clicred
0004      FROM teklib.clieproc WHERE clicred >= 500;  /* Crea una vista */

Donde:

  • La línea  1 es un comentario. El símbolo  “--“ indica que todo lo que sigue a este símbolo es un comentario.
  • La línea 2 es una sentencia  SQL: UPDATE. Notar que la sentencia debe finalizar con un símbolo “;” (punto y coma).
  • La línea 3 es una sentencia SQL: CREATE VIEW. Esto crea una vista SQL, o "Archivo lógico" sobre el AS/400, que continúa en la línea 3
  • La línea 4 es la continuación de la 3. Notar que hay un segundo estilo de comentario en esta línea  (es el estilo de los comentarios en fuentes CL). Esta línea también incluye el “;” al final de la sentencia SQL.
 
2)  Ejecutar el comando RUNSQLSTM con los parámetros indicados para el ejemplo. Se puede definir un fuente de programa CL donde incorporarlo o elegir otro entorno de ejecución permitido para el comando:
RUNSQLSTM SRCFILE(TEKLIB/QTXTSRC) srcmbr(fuenteSQL) COMMIT(*NONE) 

Cuando RUNSQLSTM ejecuta las sentencias SQL contenidas en el miembro fuente indicado,  se genera automáticamente un archivo de spool que se envía al archivo de impresora QSYSPRT, a menos que se especifique otro archivo de impresora en el parámetro PRTFILE (Print File) del comando. El listado (archivo de spool) generado tiene el nombre del fuente que contiene las sentencias SQL (en el ejemplo: fuentesql).

Para tener en cuenta:

  • Para estar seguro que se han escrito correctamente las sentencias SQL que se desean procesar vía el comando RUNSQLSTM, usar  el parámetro  PROCESS(*SYN) para chequear la sintaxis de las sentencias antes de que se ejecuten. Sólo “Promptear” el comando e ingresar los parámetros. Si existen errores, se recibirá un mensaje  SQL9010. En este caso también se genera un archivo de spool indicando los errores de cada sentencia individualmente.  Especificar el comando de la siguiente manera:

RUNSQLSTM  SRCFILE(TEKLIB/QTXTSRC) SRCMBR(FUENTESQL)  COMMIT(*NONE) PROCESS(*SYN)

  • Cuando se usa el comando RUNSQLSTM, está disponible el Procesador de Sentencias SQL (el SQL Statement processor).
  • El  Procesador de Sentencias SQL permite que las sentencias  SQL sean ejecutadas desde un miembro fuente. Las sentencias en el miembro fuente pueden ser ejecutadas  o cambiadas más de una vez,  sin compilar el fuente.
  • Las sentencias que pueden ser usadas con el procesador de sentencias SQL son:  ALTER TABLE, CALL, COMMENT ON, COMMIT, CREATE ALIAS, CREATE DISTINCT TYPE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE, CREATE TRIGGER, CREATE VIEW, DECLARE GLOBAL TEMPORARY TABLE, DELETE, DROP, GRANT, INSERT, LABEL ON, LOCK TABLE, RELEASE SAVEPOINT, RENAME, REVOKE, ROLLBACK, SAVEPOINT, SET PATH, SET SCHEMA, SET TRANSACTION, UPDATE

Copyright Teknoda S.A.

IMPORTANTE:
“Notas técnicas de AS/400" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos.
Si desea suscribir otra dirección de e-mail para que comience a recibir las Notas Técnicas AS400, envíe un mensaje desde esa direcciónletter400@teknoda.com, aclarando nombre, empresa, cargo y país del suscriptor.

AS400 , iSeries y System i son marcas registradas de IBM. IBM no es el editor de esta publicación y no es responsable de la misma en ningún aspecto. La información contenida en esta publicación ha sido generada por nuestros especialistas a partir de fuentes consideradas confiables y del ejercicio profesional cotidiano. No obstante, por la posibilidad de error humano, mecánico, cambio de versión u otro, Teknoda no garantiza la exactitud o completud de la misma.
COPYRIGHT TEKNODA S.A. PROHIBIDA SU REPRODUCCION TOTAL O PARCIAL SIN CONSENTIMIENTO DE TEKNODA


 

Comentarios  

+2 #1 Jaime Martínez GLZ. 09-02-2014 06:00
Me parece de suma importancia toda la información
que publican en este sitio ya que con ésta logramos
tener una actualización constante sobre el tema.

Saludos
Citar

Escribir un comentario


Código de seguridad
Refescar

Lea en AS/400 Tips . . .

Infografía comparativa Comandos de SAVE RESTORE del AS400

save_restore_thumbnail

Conozca y diferencie visualmente qué partes del almacenamiento resguarda y restaura cada comando y cada opción del Menú Salvar y Restaurar. PUEDE DESCARGAR UN FORMATO POSTER PARA IMPRESION.

Para lograr un entendimiento conceptual es de suma utilidad contar con una ayuda gráfica, que  permita diferenciarlos a primera vista. Nuestro equipo de especialistas ha desarrollado el "Infographics" que presentamos con este tip. Por supuesto, el mismo debe complementarse con la información detallada de los innumerables parámetros de cada comando, pero es un útil marco de referencia  para recordar el área de injerencia de cada comando.

LEER ESTE ARTICULO >>>>>

 

 

 

Copyright © 2017 Teknoda tips - Tecnologia SAP Netweaver - IBM AS400 - System i - iSeries. Todos los derechos reservados.