Funciones definidas por el usuario

Las funciones definidas por el usuario (UDF) son extensiones o adiciones a las funciones incorporadas existentes del lenguaje SQL.

Read syntax diagramSkip visual syntax diagramfunction-name(,expressionrow-expression)

Una función definida por el usuario puede ser una función escalar, que devuelve un solo valor cada vez que se invoca; una función agregada, a la que se pasa un conjunto de valores similares y devuelve un solo valor para el conjunto; una función de fila, que devuelve una fila o una función de tabla, que devuelve una tabla.

En los esquemas SYSFUN y SYSPROC se proporcionan varias funciones definidas por el usuario.

Una función definida por el usuario (UDF) sólo puede ser una función agregada si su fuente es una función agregada existente. Se hace referencia a una UDF mediante un nombre de función calificado o no calificado, seguido de paréntesis que encierran los argumentos de la función (si los hay). Una función de columna escalar definida por el usuario registrada con la base de datos puede aludirse en los mismos contextos en que pueda aparecer cualquier función incorporada. Una función de fila definida por el usuario sólo puede aludirse implícitamente cuando está registrada como función de transformación para un tipo definido por el usuario. Una función de tabla definida por el usuario registrada en la base de datos sólo puede aludirse en la cláusula FROM de una sentencia SELECT.

Los argumentos de la función deben corresponderse en número y posición con los parámetros especificados para la función definida por el usuario cuando se registró con la base de datos. Además, los argumentos deben ser de tipos de datos que sean promocionables a los tipos de datos de los parámetros definidos correspondientes.

El resultado de la función es el especificado en la cláusula RETURNS. La cláusula RETURNS, definida cuando se registró la UDF, determina si una función es una función de tabla o no lo es. Si se especifica (o se toma como valor por omisión) la cláusula RETURNS NULL ON NULL INPUT al registrar la función, el resultado es nulo si algún argumento es nulo. En el caso de las funciones de tabla, esto se interpreta como una tabla de retorno sin filas (es decir, una tabla vacía).

Consulte la sección sobre las expresiones de fila para obtener más información acerca de los tipos de datos de fila y las normas.

A continuación se muestran algunos ejemplos de funciones definidas por el usuario:

  • Una UDF escalar denominada ADDRESS extrae la dirección de inicio de los resúmenes almacenados en formato script. La función ADDRESS espera un argumento CLOB y devuelve VARCHAR(4000):
       SELECT EMPNO, ADDRESS(RESUME) FROM EMP_RESUME
         WHERE RESUME_FORMAT = 'SCRIPT'
  • La tabla T2 tiene una columna numérica A. Invocando la UDF escalar denominada ADDRESS del ejemplo anterior:
       SELECT ADDRESS(A) FROM T2
    se genera un error (SQLSTATE 42884), ya que no existe ninguna función con un nombre que coincida y con un parámetro promocionable del argumento.
  • Una UDF de tabla denominada WHO devuelve información acerca de las sesiones de la máquina servidora que estaban activas en el momento de ejecutar la sentencia. La función WHO se invoca desde una cláusula FROM que incluye la palabra clave TABLE y una variable de correlación obligatoria. Los nombres de columna de la tabla WHO() se han definido en la sentencia CREATE FUNCTION.
       SELECT ID, START_DATE, ORIG_MACHINE
         FROM TABLE( WHO() ) AS QQ
         WHERE START_DATE LIKE 'MAY%'