viernes, 17 de febrero de 2012

Ejecutar un programa RPG de AS/400 desde SQL Server


Hace algún tiempo escribí un breve artículo sobre como interconectar un SQL Server con AS/400. Ahora que ya tienes un Linked Server (termino técnico de Microsoft para denominar este tipo de conexiones)  lo siguiente sin duda es aprovecharlo. Para empezar, estoy asumiendo que ya tienes una conexión entre tu SQL y algún AS/400 pero si no es así, te recomiendo visitar este articulo.

Ahora bien, ¿Cómo ejecutas un programa RPG desde SQL Server?

Primero que nada, SQL “visualiza” —por decir de algún modo— los programas de AS/400 como procedimientos almacenados. Estoy seguro que a estas alturas ya te habrás imaginado que vamos a usar EXCEC… si fue así, te felicito sinceramente.

Ahora la sintaxis requerida para ejecutar un RPG sería más o menos esta:  

EXEC (‘call somelib.somerpg’) AT MYAS400

Donde somelibrary es la librería donde se almacena el programa de RPG, somerpg es el programa RPG que deseas ejecutar y MYAS400 es el nombre de tu linked server.

Hasta aquí, todo de maravilla. Pero ¿Qué sucede si necesito pasar parámetros? Si ese fuera el caso, será necesario realizar unos pequeños ajustes. Uno de ellos es almacenar primero los valores que usarás como parámetro en variables de tipos compatible con AS/400.  En este sencillo ejemplo, voy a pasar un texto como parámetro: Notarán que usé CHAR en vez de VARCHAR.

DECLARE @param AS CHAR(11)

SET @param='Luis Osorio'

EXEC ('call somelib.newrpg(?)',@param) AT MYAS400

La razón de usar variables con tipos de datos compatibles con AS/400 es simple: integridad de datos. Para muestra, un botón. A continuación observamos la salida del programa RPG en dos diferentes circunstancias: una usando el ejemplo anterior y otra pasando directamente el valor.