Borrado dinámico de procedimientos almacenados en Db2

Una de las sentencias que se extrañan al estar programando procedimientos almacenados en Db2 es “IF EXISTS  DROP PROCEDURE” ya que al recompilar el código de nuestros Scripts es necesario que estos sean eliminados del sistema para generar la nueva versión, y aunque tenemos la sentencia Drop Procedure, su uso puede resultar en errores si no sabemos con certeza de la existencia del procedimiento almacenado.

Dado que en db2 no tenemos una sentencia que elimine un procedimiento solo si existe, podemos crear el siguiente procedimiento almacenado que lo hará por nosotros:

CREATE PROCEDURE Libreria.DROPPROC
       (
        IN  Pv_ProcSchema Varchar(100), -- Nombre del schema donde se ha compilado
        IN  PV_ProcName   Varchar(100), -- Nombre del procedimiento a eliminar
        OUT PV_Result     Varchar(50)   -- Indica si fué eliminado 
       )

    LANGUAGE SQL
    SPECIFIC DROPPROC

BEGIN

  DECLARE stmt varchar(200);

  SET PV_Result = 'NO SE ELIMINÓ';

  IF ( 1 = (  SELECT Count(*) 
                FROM qsys2.sysroutines
               WHERE Specific_Schema = UPPER(Pv_ProcSchema) And 
                     Specific_Name   = UPPER(PV_ProcName)  
           )
     ) THEN
       SET stmt = 'DROP PROCEDURE ' || UPPER(Pv_ProcSchema) || '.' || UPPER(PV_ProcName);
       EXECUTE IMMEDIATE stmt;
       SET PV_Result = 'PROCEDIMIENTO BORRADO';
  END IF;

END;

Para usarlo en sus scripts solo será necesario ejecutar lo siguiente antes de cualquier operación create procedure:

CALL Libreria.DROPPROC("schema",NombreProcedire)

Espero que esto les sea de utilidad tanto como a mi.

2 Trackbacks / Pingbacks

  1. DB2 – Sentencias SQL Dinámicas en Procedimientos Almacenados. | Blog del Poli
  2. DB2 – Implementar Drop Function If Exist | Blog del Poli

Deja un comentario