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
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%';