Creación de funciones definidas por el usuario

Puede crear sus propias funciones en Db2 para simplificar las consultas.

Hay tres tipos de funciones definidas por el usuario primarias.

Función derivada
Funciones que se basan en funciones existentes.
Funciones externas
Funciones que los usuarios desarrollan.
funciones de SQL
Funciones definidas en la base de datos mediante el uso de sentencias de SQL únicamente.

Las funciones definidas por el usuario externas pueden devolver un valor único o una tabla de valores.

  • Las funciones externas que devuelven un valor único se denominan funciones escalares definidas por el usuario.
  • Las funciones externas que devuelven una tabla se denominan funciones de tabla definidas por el usuario.

Las funciones definidas por el usuario como, por ejemplo, funciones u operaciones incorporadas, permiten la manipulación de tipos diferenciados.

ejemplos

Iniciar la información de la interfaz de programación de uso general.

Los dos ejemplos siguientes muestran cómo definir y utilizar una función definida por el usuario y un tipo diferenciado.

Ejemplo 1
Suponga que define una tabla denominada EUROEMP. Una columna de esta tabla, EUROSAL, tiene un tipo diferenciado de EURO, basado en DECIMAL(9,2). No puede utilizar la función AVG incorporada para buscar el valor medio de EUROSAL puesto que AVG opera únicamente en tipos de datos incorporados. Sin embargo, puede definir una función AVG que tiene como fuente la función AVG incorporada y acepta argumentos de tipo EURO:
CREATE FUNCTION AVG(EURO)
  RETURNS EURO
  SOURCE SYSIBM.AVG(DECIMAL);
Ejemplo 2
A continuación, puede utilizar esta función para buscar el valor medio de la columna EUROSAL:
SELECT AVG(EUROSAL) FROM EUROEMP;

Los dos ejemplos siguientes muestran cómo definir y utilizar una función definida por el usuario externa.

Ejemplo 3
Suponga que define y escribe una función, denominada REVERSE, para invertir los caracteres de una serie. La definición es similar al ejemplo siguiente:
CREATE FUNCTION REVERSE(VARCHAR(100))
  RETURNS VARCHAR(100)
  EXTERNAL NAME 'REVERSE'
  PARAMETER STYLE SQL
  LANGUAGE C;
Ejemplo 4
A continuación, puede utilizar la función REVERSE en una sentencia de SQL siempre que utilice una función incorporada que acepte un argumento de tipo carácter, como se muestra en el ejemplo siguiente:
SELECT REVERSE(:CHARSTR)
  FROM SYSDUMMY1;

Aunque no puede escribir funciones de totales definidas por el usuario, puede definir funciones de totales definidas por el usuario fuente basadas en funciones de totales incorporadas. Esta posibilidad es útil en los casos en que desea hacer referencia a una función definida por el usuario existente utilizando otro nombre o desea pasar un tipo diferenciado.

Los dos ejemplos siguientes muestran cómo definir y utilizar una función de tabla definida por el usuario.

Ejemplo 5
Puede definir y escribir una función de tabla definida por el usuario que los usuarios pueden invocar en la cláusula FROM de una sentencia SELECT. Por ejemplo, suponga que define y escribe una función denominada BOOKS. Esta función devuelve una tabla de información sobre libros relacionados con un tema especificado. La definición es similar al ejemplo siguiente:
CREATE FUNCTION BOOKS     (VARCHAR(40))
  RETURNS TABLE (TITLE_NAME     VARCHAR(25),
                 AUTHOR_NAME    VARCHAR(25),
                 PUBLISHER_NAME VARCHAR(25),
                 ISBNNO         VARCHAR(20),
                 PRICE_AMT      DECIMAL(5,2),
                 CHAP1_TXT      CLOB(50K))
  LANGUAGE COBOL
  PARAMETER STYLE SQL        
  EXTERNAL NAME BOOKS;
Ejemplo 6
A continuación, puede incluir la función BOOKS en la cláusula FROM de una sentencia SELECT para recuperar la información sobre libros, tal como se muestra en el ejemplo siguiente:
SELECT B.TITLE_NAME, B.AUTHOR_NAME, B.PUBLISHER_NAME, B.ISBNNO
  FROM TABLE(BOOKS('Computers')) AS B
  WHERE B.TITLE_NAME LIKE '%COBOL%';
Finalizar la información de la interfaz de programación de uso general.