Una función definida por el usuario ( UDF ) es una función proporcionada por el usuario de un programa o entorno, en un contexto donde la suposición habitual es que las funciones están integradas en el programa o entorno. Las UDF generalmente se escriben para los requisitos de su creador.
Lenguaje basico
En algunas implementaciones antiguas del lenguaje de programación BASIC , las funciones definidas por el usuario se definen utilizando la sintaxis "DEF FN". Los dialectos más modernos de BASIC están influenciados por el paradigma de programación estructurada , donde la mayor parte o todo el código se escribe como funciones o procedimientos definidos por el usuario, y el concepto se vuelve prácticamente redundante.
Bases de datos
En los sistemas de administración de bases de datos relacionales , una función definida por el usuario proporciona un mecanismo para extender la funcionalidad del servidor de la base de datos agregando una función, que se puede evaluar en declaraciones de lenguaje de consulta estándar (generalmente SQL ). El estándar SQL distingue entre funciones escalares y de tabla. Una función escalar devuelve solo un valor único (o NULL ), mientras que una función de tabla devuelve una tabla (relacional) que comprende cero o más filas, cada fila con una o más columnas.
Las funciones definidas por el usuario en SQL se declaran mediante la CREATE FUNCTION
instrucción. Por ejemplo, una función que convierte grados Celsius a Fahrenheit podría declararse así:
CREAR FUNCIÓN dbo . Ctof ( Celsius FLOAT ) VUELVE FLOAT RETURN ( Celsius * 1 . 8 ) + 32
Una vez creada, una función definida por el usuario puede usarse en expresiones en sentencias SQL. Por ejemplo, se puede invocar cuando se permiten la mayoría de las demás funciones intrínsecas. Esto también incluye sentencias SELECT , donde la función puede usarse contra datos almacenados en tablas en la base de datos. Conceptualmente, la función se evalúa una vez por fila en dicho uso. Por ejemplo, suponga una tabla llamada ELEMENTOS, con una fila para cada elemento químico conocido. La tabla tiene una columna llamada BoilingPoint para el punto de ebullición de ese elemento, en grados Celsius. La consulta
SELECCIONAR Nombre , CtoF ( BoilingPoint ) DE Elementos
recuperaría el nombre y el punto de ebullición de cada fila. Invoca la función definida por el usuario CtoF como se declaró anteriormente para convertir el valor en la columna a un valor en Fahrenheit.
Cada función definida por el usuario tiene ciertas propiedades o características. El estándar SQL define las siguientes propiedades:
- Idioma: define el lenguaje de programación en el que se implementa la función definida por el usuario; los ejemplos incluyen SQL, C, C # y Java.
- Estilo de parámetro: define las convenciones que se utilizan para pasar los parámetros de la función y los resultados entre la implementación de la función y el sistema de base de datos (solo se aplica si el lenguaje no es SQL).
- Nombre específico: un nombre para la función que es único dentro de la base de datos. Tenga en cuenta que el nombre de la función no tiene que ser único, considerando las funciones sobrecargadas . Algunas implementaciones de SQL requieren que los nombres de las funciones sean únicos dentro de una base de datos y no se permiten funciones sobrecargadas.
- Determinismo: especifica si la función es determinista o no. La característica de determinismo influye en el optimizador de consultas al compilar una declaración SQL.
- Acceso a datos SQL: le dice al sistema de administración de la base de datos si la función no contiene sentencias SQL (NO SQL), contiene sentencias SQL pero no accede a ninguna tabla o vista (CONTAINS SQL), lee datos de tablas o vistas (LEE DATOS SQL), o modifica datos en la base de datos (MODIFICA DATOS SQL).
Las funciones definidas por el usuario no deben confundirse con los procedimientos almacenados . Los procedimientos almacenados permiten al usuario agrupar un conjunto de comandos SQL. Un procedimiento puede aceptar parámetros y ejecutar sus sentencias SQL en función de esos parámetros. Un procedimiento no es una expresión y, por lo tanto, no se puede utilizar como funciones definidas por el usuario.
Algunos sistemas de gestión de bases de datos permiten la creación de funciones definidas por el usuario en lenguajes distintos de SQL. Microsoft SQL Server , por ejemplo, permite al usuario utilizar lenguajes .NET, incluido C #, para este propósito. DB2 y Oracle dan soporte a funciones definidas por el usuario escritas en lenguajes de programación C o Java.
SQL Server 2000
Hay tres tipos de UDF en Microsoft SQL Server 2000: funciones escalares , funciones con valores de tabla en línea y funciones con valores de tabla de varias declaraciones.
Las funciones escalares devuelven un valor de datos único (no una tabla) con la cláusula RETURNS. Las funciones escalares pueden utilizar todos los tipos de datos escalares, con excepción de la marca de tiempo y los tipos de datos definidos por el usuario. Las funciones en línea con valores de tabla devuelven el conjunto de resultados de una sola instrucción SELECT. Las funciones con valores de tabla de varias declaraciones devuelven una tabla, que se creó con muchas declaraciones TRANSACT-SQL.
Las funciones definidas por el usuario se pueden invocar desde una consulta, como funciones integradas como OBJECT_ID, LEN, DATEDIFF, o se pueden ejecutar a través de una instrucción EXECUTE como procedimientos almacenados.
Notas de rendimiento: 1. En Microsoft SQL Server 2000, una función con valores de tabla que "envuelve" una vista puede ser mucho más rápida que la propia vista. El siguiente MyFunction es un ejemplo de un "contenedor de función" que se ejecuta más rápido que la vista subyacente MyView:
CREAR FUNCIÓN MyFunction () DEVOLUCIONES @Tbl TABLE ( StudentID VARCHAR ( 255 ), SAS_StudentInstancesID INT , Etiqueta VARCHAR ( 255 ), Valor DINERO , CMN_PersonsID INT )COMOEMPEZAR INSERTAR @Tbl ( StudentID , SAS_StudentInstancesID , etiqueta , valor , CMN_PersonsID ) SELECCIONE ID de estudiante , SAS_StudentInstancesID , etiqueta , valor , CMN_PersonsID DE MyView - donde MyView selecciona ( con uniones ) las mismas columnas de gran mesa ( s ) REGRESOFINAL
2. En Microsoft SQL Server 2005, el resultado de la misma ejecución de código es el opuesto: la vista se ejecuta más rápido que el "contenedor de funciones".
Las funciones definidas por el usuario son subrutinas compuestas por una o más instrucciones Transact-SQL que se pueden usar para encapsular código para su reutilización. Toma cero o más argumentos y evalúa un valor de retorno. Tiene instrucciones de flujo de control y DML en su cuerpo similares a los procedimientos almacenados. No permite cambios en ningún estado de sesión global, como modificaciones en la base de datos o en un recurso externo, como un archivo o una red. No es compatible con el parámetro de salida. La palabra clave DEFAULT debe especificarse para pasar el valor predeterminado del parámetro. Los errores en UDF hacen que UDF se anule, lo que, a su vez, anula la declaración que invocaba la UDF.
CREAR FUNCIÓN CubicVolume - Dimensiones de entrada en centímetros ( @CubeLength decimal ( 4 , 1 ), @CubeWidth decimal ( 4 , 1 ), @CubeHeight decimal ( 4 , 1 ) ) DEVOLUCIONES decimal ( 12 , 3 ) COMOEMPEZAR RETORNO ( @CubeLength * @CubeWidth * @CubeHeight ) FINAL
Tipo de datos admitido en Microsoft SQL Server 2000 Como una tabla temporal que se usa para almacenar resultados Se usa principalmente para definir la variable temporal de tipo (tabla) y el valor de retorno de una UDF El alcance está limitado a la función, procedimiento almacenado o lote en el que se encuentra La operación de asignación definida no está permitida entre las variables (Tabla) Se puede usar en SELECT, INSERT, UPDATE y DELETE CREATE FUNCTION para crear UDF ALTER FUNCTION para cambiar las características de UDF DROP FUNCTION para eliminar UDF
Apache Hive
Apache Hive define, además de las funciones normales definidas por el usuario (UDF), también las funciones agregadas definidas por el usuario (UDAF) y las funciones generadoras de tablas (UDTF). [1] Hive permite a los desarrolladores crear sus propias funciones personalizadas con Java. [2]
Referencias
- ^ "LanguageManual UDF - Apache Hive - Apache Software Foundation" . 26 de junio de 2015.
- ^ "HivePlugins - Apache Hive - Apache Software Foundation" . 26 de junio de 2015.