Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Monday, February 20, 2012

Stored Procedure. ¿Que es eso?











El Db2 Sql provee para el iseries o para el AS400 una herramienta para invocar programas o procedimientos (procedures) en instrucciones SQL.

Cuando el procedimiento almacenado o Stored Procedure se trata de un programa en un lenguaje de código distinto al SQL tal como RPG, Java, C u otros, se define un External Stored Procedure, para indicarle al Db2 SQL que debe invocarse un ejecutable escrito en otro lenguaje de programación. Al momento de crear un store procedure se especifica el nombre, los parámetros que utilizará y –en el caso de External Stored Procedures- se especifica además, el lenguaje de programación en el que está escrito.
El Stored Procedure se puede crear con comandos del SQL Embebido o con El SQL interactivo. El siguiente, es un ejemplo de External Store Procedure:

EXEC SQL CREATE PROCEDURE P1
                     (INOUT PARM1 CHAR(10))
                    EXTERNAL NAME MYLIB.PROC1
                    LANGUAGE C
                    GENERAL WITH NULLS;
 
Se especifica el nombre del programa, la librería donde reside, los parámetros de llamada y el lenguaje en el que está escrito. Se indica además que el parámetro de llamada PARM1 puede contener valores nulos y es de I/O. (recibe valores y también los modifica)


Podemos invocar un Stored Procedure de la siguiente manera:

  DCL HV1 CHAR(10);
     DCL IND1 FIXED BIN(15);
        :
     EXEC SQL CREATE P1 PROCEDURE
               (INOUT PARM1 CHAR(10))
               EXTERNAL NAME MYLIB.PROC1
               LANGUAGE C
               GENERAL WITH NULLS;
        :
     EXEC SQL CALL P1 (:HV1 :IND1);
 
Podemos invocar un Stored Procedure suponiendo que ya está creado previamente:
 
DCL HV2 CHAR(10);
        :
     EXEC SQL CALL P2 (:HV2);
 
Los ejemplos anteriores son “estáticos” es decir, se crea el Stored Procedure o se presume que ya fue creado y luego se invoca con un CALL.
 
Puede hacerse un Stored Procedure Dinámico en el que se invoca, creándolo en el mismo momento en que se realiza la llamada.
 
 
char hv3[10],string[100];
           :
       strcpy(string,"CALL MYLIB.P3 ('P3 TEST')");
       EXEC SQL EXECUTE IMMEDIATE :string;
           :
 
Escrito en lenguaje C, la funcion Strcpy se interpreta de la siguiente manera: 

strcpy( variable destino, cadena fuente )
 
para los que estamos mas familiarizados con RPG, diríamos que, el execute Inmediate seria equivalente a una llamada a la utilidad QCMDEXEC pasandole en un string, el comando a ejecutar.
 
 
Un Stored Procedure en código Db2 Sql sería el siguiente:
 
EXEC SQL CREATE PROCEDURE UPDATE_SALARY_1
 |            (IN EMPLOYEE_NUMBER CHAR(10),
 |             IN RATE DECIMAL(6,2))
 |             LANGUAGE SQL MODIFIES SQL DATA
 |             UPDATE CORPDATA.EMPLOYEE
 |               SET SALARY = SALARY * RATE
 |               WHERE EMPNO = EMPLOYEE_NUMBER;
 
 
 

También puede crearse un Stored Procedure que solo lea Data:

EXEC SQL CREATE PROCEDURE UPDATE_SALARY_1
 |            (IN EMPLOYEE_NUMBER CHAR(10),
 |             IN RATE DECIMAL(6,2))
 |             LANGUAGE SQL READS SQL DATA
 |             Select name, area from Library/File_employee
 |               WHERE EMPNO = EMPLOYEE_NUMBER;




El material sobre el Stored Procedure es extenso y tiene su sintaxis en definición y tipo de parámetros, principio (BEGIN)  y fin de procedure (END) y otros. El material en Ingles lo pueden conseguir en con mayor detalle en este enlace.


Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor: Ing. Liliana Suárez