DB2 – Implementar Drop Function If Exist

Una sentencia que se hecha en falta cuando programamos funciones en Db2 es la sentencia Drop function If Exist.  En Db2 esa cláusula no existe por lo que debemos hacer uso de la sentencia DROP FUNCTION NOMBRE. El problema con ello es que de no existir la función, DB2 lanzará un error deteniendo la ejecución de nuestro escript hasta el punto de esa declaración.

Para automatizar el borrado de funciones podemos hacer uso del código publicado en la entrada: Borrado dinámico de procedimientos almacenados. Así que usaremos la tabla qsys2.sysroutines que contiene información de las rutinas creadas en nuestro servidor.

Este sería el procedimiento almacenado para borrar funciones de manera dinámica :

 

-- =============================================
-- Procedimiento: DROP_FUNCTION_IF_EXISTS
-- Objetico     : Eliminar una función
-- Autor        : Edgar Ramírez
-- Fecha        : 19/09/2013
-- =============================================

CREATE PROCEDURE Schema.DROP_FUNCTION_IF_EXISTS
       (
        IN  Pv_Schema Varchar(100),     -- Nombre del schema donde se ha compilado
        IN  PV_FunName   Varchar(100), -- Nombre de la función a eliminar
        OUT PV_Result     Varchar(50)   -- Indica si fué eliminado 
       )

    LANGUAGE SQL
    SPECIFIC DROP_FUNCTION_IF_EXISTS
BEGIN

  DECLARE stmt varchar(200);
  SET PV_Result = 'NO SE ELIMINÓ';

  IF ( 1 = (  SELECT Count(*) 
                FROM qsys2.sysroutines
               WHERE Specific_Schema = UPPER(Pv_Schema) And 
                     Specific_Name   = UPPER(PV_FunName)   and
                     ROUTINE_TYPE = 'FUNCTION'
           )
     ) THEN

       SET stmt = 'DROP FUNCTION ' || UPPER(Pv_Schema) || '.' || UPPER(PV_FunName);
       EXECUTE IMMEDIATE stmt;
       SET PV_Result = 'Función borrada';

  END IF;

END;

 

 

 

1 Trackback / Pingback

  1. Conversaciones sobre Programación. Build 2013.04 | Linea de Codigo

Deja un comentario