
En este artículo les quiero enseñar otra herramienta más robusta sobre todo a la hora de trabajar con procedimientos almacenados en DB2, este herramienta esta disponible en la pagina de IBM Developer Works y el entorno gráfico de este IDE para los que han trabajado con Eclipse se le hará muy familiar. También quiero darles un ejemplo de la vida real que nos pueda ser útil en mi caso pienso que la modernización de ciertas aplicaciones delegadas son muy complejas sobretodo en AS400 que todo esta hecho con código COBOL o RPG, si es tu caso esta es la solución que necesitas 😀
Paso 1: Instalar la herramienta para crear nuestros SQL
Yo descargue la versión 3.20 el archivo llamado ibm_ds320_lin_im32.zip el cual es compatible con mi sistema operativo debian de 32bits
Vamos a copiar el archivo en nuestra carpeta personal, en mi casa yo cree una carpeta llamada IBMDataStudio donde coloca el archivo .zip ahora procedemos a descomprimir el archivo:
unzip ibm_ds320_lin_im32.zip
Luego de descomprimir cambiamos a la carpeta disk1/InstallerImage_linux e iniciamos la instalación:
cd ./IBMDataStudio/disk1/InstallerImage_linux ./install
Esto iniciara un asistente para hacer la instalación, es muy sencillo aceptamos la licencia. seleccionamos la carpeta destino y nuestro idioma luego esperamos a que se complete la instalación. (No voy a coloca fotos de todos los pasos para no hacer tan pesado el post.
Siguiente > Siguiente > Siguiente > Siguiente > jejeje
Enhorabuena! ya hemos instalado el IDE!!!
Paso 2: Abrir la herramienta conocer el entorno
Ahora vamos a mis Aplicaciones -> Programación Data Studio 3.2.0 full Client
Ahora seleccionamos el espacio de trabajo:
Esta es la vista inicial de nuestro IDE, como pueden ver es Eclipse 😛
Ahora que tenemos el IBM Data Studio instalado vamos a empezar a sacarle provecho creando la conexión al AS400, una tabla y un procedimiento almacenado de ejemplo.
Paso 3 Crear la conexión al DB2 del AS400
En el Explorador de administración hacemos clic en Nuevo -> Conexión nueva a una base de datos:
Esta nos va a desplegar el diálogo de conexión nueva:
Nos dice que debemos cambiar la perspectiva:
Cambiamos la perspectiva a Datos:
Paso 4: Crear un nuevo proyecto de datos
Ahora creamos un nuevo proyecto, seleccionamos en el Menú: Archivo -> Nuevo -> Proyecto:
Seleccionamos el tipo de proyecto de Datos -> Proyecto de desarrollo de datos

Luego le colocamos el nombre, en mi caso le voy a dejar Proyecto:
Ahora seleccionamos nuestra conexión al AS400:
Luego nos pide las librerías, muy importante colocar las librerías que vamos a usar al final de la lista en mi caso deje las que trae por defecto y coloque al fina , JESTEVEZ, JESTEVEZ1 que son mis librerías en el AS400.
Ahora que ya tenemos nuestro proyecto necesitamos poder crear un Script SQL para crear una tabla para donde vamos a hacer las pruebas en este ejemplo voy a crear una tabla de bancos.
Le colocamos el nombre Script1 y damos finalizar:
Paso 5: Crear nuestra tabla de Bancos
Dentro del editor podemos crear la tabla como se ve en la siguiente imagen:
Nuestra tabla de Bancos solo va tener un Id generado automáticamente, el nombre y el Código Swift, si te interesa saber mas del código switf puedes consultar esta página http://www.theswiftcodes.com.
CREATE TABLE JESTEVEZ1.BANKS (
ID INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY,
NAME VARCHAR(100) NOT NULL,
SWIFTCODE VARCHAR(11) NOT NULL,
CONSTRAINT JESTEVEZ1.PK_BANKS_ID PRIMARY KEY (ID)
);
INSERT INTO JESTEVEZ1.BANKS (NAME, SWIFTCODE)
VALUES ('BANK OF AMERICA, N.A.', 'BOFAUS3NLMA');
INSERT INTO JESTEVEZ1.BANKS (NAME, SWIFTCODE)
VALUES ('BANCO SANTANDER S.A.', 'BSCHESMM');
Para ejecutar el SQL anterior usamos el Botón verde que esta arriba como se ve en la siguiente imagen:
Al terminar la ejecución podemos ver el resultado en la parte inferior, en mi caso me arrojo el Warning del journal ya que creamos la tabla por SQL.
Ahora si queremos probar la creación de la tabla la podemos hacer una consulta 😀
SELECT * FROM JESTEVEZ1.BANKS
Tenemos que seleccionar la pestaña Resultado1 en la parte inferior y ver que están nuestros dos Bancos creados también podemos comprobar que se le asigno un ID automático.
Paso 6: Crear los procedimientos almacenados
En nuestro proyecto donde dice procedimientos almacenado seleccionamos Nuevo -> Procedimiento almacenado
Ahora le colocamos el nombre BANKS_ADD y damos finalizar, puedes poder el nombre o la nomenclatura que se adapte a las políticas de tu empresa 😀

Ahora vamos a modificar el SQL inicial con el contenido de nuestro SP
Este es el contenido de nuestro procedimiento almacenado BANKS_ADD
CREATE PROCEDURE JESTEVEZ1.BANKS_ADD ( IN P_NAME VARCHAR(100), IN P_SWIFTCODE VARCHAR(11), OUT ID INTEGER ) LANGUAGE SQL BEGIN DECLARE PID INTEGER DEFAULT 0; -- INSERTAMOS LOS DATOS RECIBIDOS EN LA TABLA INSERT INTO JESTEVEZ1.BANKS (NAME, SWIFTCODE) VALUES (P_NAME, P_SWIFTCODE); -- BUSCAMOS EL ID GENERADO EN LA SESION Y LO RETORNAMOS SELECT IDENTITY_VAL_LOCAL() AS LASTID INTO ID FROM SYSIBM.SYSDUMMY1; END
Desplegamos el procedimiento almacenado al servidor AS400, con el botón que tenemos en la parte superior derecha y luego lo ejecutamos.

Ejecutar el procedimiento almacenado, navegamos por el explorador de orígenes de datos y buscamos nuestra librería y seleccionamos la carpeta procedimientos almacenados como se muestra a continuación:
Seleccionamos BANK_ADD haciendo clic derecho y seleccionamos la opción Ejecutar
Como ven me esta pidiendo que llenemos los dos parámetros que creamos, para el ejemplo cree un banco con el nombre NUEVO BANCO y el código CODE0001 y seleccionamos ejecutar
En la pestaña de Resultados de SQL vemos el mensaje:
Ejecución de rutina completada satisfactoriamente.
Tiempo de ejecución de consulta => 1 s: 43 ms
Ahora vamos a crear otro procedimiento que retorne un resultado, este es el código de BANKS_GET
CREATE PROCEDURE JESTEVEZ1.BANKS_GET (
IN P_SWIFTCODE VARCHAR(11)
)
RESULT SETS 1
LANGUAGE SQL
BEGIN
Declare StringSQL Varchar(32000) Not Null Default '';
Declare WhereClause Varchar(32000) Not Null Default '';
Declare C1 Cursor With Return For stmt;
-- SI EL PARAMETRO SWIFTCODE NO ES NULO HACEMOS UNA BUSQUEDA
IF P_SWIFTCODE IS NOT NULL AND length(P_SWIFTCODE)>0 THEN
SET P_SWIFTCODE = UPPER(TRIM(P_SWIFTCODE));
SET WhereClause = WhereClause || ' AND SWIFTCODE LIKE ''%'|| P_SWIFTCODE ||'%'' ';
END IF;
Set StringSQL = 'SELECT ID, NAME, SWIFTCODE FROM JESTEVEZ1.BANKS WHERE 1=1 ' || WhereClause;
Prepare stmt From StringSQL;
Open C1;
END
GO
Me salto las pantallas para crear y ejecutar este procedimiento almacenado dentro del IDE ya que es igual al anterior. Vamos a ver la pantalla de resultado de la ejecución:
En la parte inferior seleccionamos Resultado1 y vemos el ResultSet del procedimiento almacenado.
En conclusión puedo decir que esta herramienta me facilito mucho mi desarrollo de procedimientos almacenados en DB2 de AS400 en mi Linux, adicionalmente el desarrollo con procedimientos almacenado es para mí la mejor forma de atacar este dinosaurio de pantalla verde
Quiero también dejarle un ejemplo de como invocar un programa RPG desde los procedimientos almacenados, los que están en estén mundo ya estará pensado en las miles de posibilidades de como explotar esto jejeje
CREATE PROCEDURE "LIBRERIA"."SP_CLCALLPGM" (
PARAM1 VARCHAR(40),
PARAM2 VARCHAR(40),
PARAM3 VARCHAR(40),
)
LANGUAGE RPGLE
PARAMETER STYLE GENERAL
DETERMINISTIC
NO SQL
SPECIFIC SP_CLCALLPGM
NEW SAVEPOINT LEVEL
EXTERNAL NAME 'LIBRERIA/CLCALLPGM'
Este ejemplo invoca un programa CL hecho en RPG.
Si te fue útil este post puedes dejarme unos bits!!!





















