Una función definida por el usuario ( UDF , por sus siglas en inglés) es una función proporcionada por el usuario de un programa o entorno, en un contexto donde se suele asumir que las funciones están integradas en el programa o entorno. Las UDF generalmente se escriben para satisfacer las necesidades de su creador.
Lenguaje BASIC
En algunas implementaciones antiguas del lenguaje de programación BASIC , las funciones definidas por el usuario se definen mediante la sintaxis "DEF FN". Las versiones más modernas de BASIC están influenciadas por el paradigma de programación estructurada , donde la mayor parte o la totalidad del código se escribe como funciones o procedimientos definidos por el usuario, y el concepto se vuelve prácticamente redundante.
lenguaje COBOL
En el lenguaje de programación COBOL , una función definida por el usuario es una entidad que se define mediante un párrafo FUNCTION-ID. Una función definida por el usuario debe devolver un valor, lo cual se especifica en la frase RETURNING del encabezado de la división de procedimiento, y se invoca mediante la sintaxis del identificador de función. Consulte la norma ISO/IEC 1989:2014, Lenguaje de Programación COBOL, para obtener más detalles.
A partir de mayo de 2022, el compilador IBM Enterprise COBOL para z/OS 6.4 ( IBM COBOL ) incluye soporte para funciones definidas por el usuario.
Bases de datos
En los sistemas de gestión de bases de datos relacionales , una función definida por el usuario proporciona un mecanismo para extender la funcionalidad del servidor de base de datos mediante la adición de una función que puede evaluarse con sentencias de lenguaje de consulta estándar (generalmente SQL ). El estándar SQL distingue entre funciones escalares y funciones de tabla. Una función escalar devuelve un único valor (o NULL ), mientras que una función de tabla devuelve una tabla (relacional) con cero o más filas, cada una con una o más columnas.
Las funciones definidas por el usuario en SQL se declaran mediante la CREATE FUNCTIONinstrucción `convert()`. Por ejemplo, una función definida por el usuario que convierte grados Celsius a Fahrenheit (una escala de temperatura utilizada en EE. UU.) podría declararse de esta manera:
CREAR FUNCIÓN dbo.CtoF ( Celsius FLOAT ) DEVUELVE FLOAT DEVOLVER ( Celsius * 1.8 ) + 32Una vez creada, una función definida por el usuario puede utilizarse en expresiones de sentencias SQL. Por ejemplo, puede invocarse donde se permiten la mayoría de las demás funciones intrínsecas. Esto también incluye las sentencias SELECT , donde la función puede utilizarse contra datos almacenados en tablas de la base de datos. Conceptualmente, la función se evalúa una vez por fila en este tipo de uso. Por ejemplo, supongamos una tabla llamada Elements, 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 ( PuntoDeEbullición ) DE ElementosRecuperará el nombre y el punto de ebullición de cada fila. Invoca la CtoFfunción definida por el usuario, tal como se declaró anteriormente, para convertir el valor de la columna a un valor en grados Fahrenheit.
Cada función definida por el usuario posee ciertas propiedades o características. El estándar SQL define las siguientes propiedades:
- Lenguaje: define el lenguaje de programación en el que se implementa la función definida por el usuario; algunos ejemplos son SQL, C, C# y Java.
- Estilo de parámetros: define las convenciones que se utilizan para pasar los parámetros y resultados de la función entre la implementación de la función y el sistema de base de datos (solo aplicable si el lenguaje no es SQL).
- Nombre específico: un nombre para la función que sea único dentro de la base de datos. Tenga en cuenta que el nombre de la función no tiene por qué 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 permiten funciones sobrecargadas.
- Determinismo: especifica si la función es determinista o no. Esta característica influye en el optimizador de consultas al compilar una sentencia SQL.
- Acceso a datos SQL: indica al sistema de gestión de bases 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 (READS SQL DATA) o modifica datos en la base de datos (MODIFIES SQL DATA).
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 dichos parámetros. Un procedimiento no es una expresión y, por lo tanto, no puede utilizarse como una función definida por el usuario.
Algunos sistemas de gestión de bases de datos permiten crear funciones definidas por el usuario en lenguajes distintos de SQL. Microsoft SQL Server , por ejemplo, permite utilizar lenguajes .NET, incluido C#, para este fin. DB2 y Oracle admiten funciones definidas por el usuario escritas en lenguajes de programación C o Java.
SQL Server 2000
There are three types of UDF in Microsoft SQL Server 2000: scalar functions, inline table-valued functions, and multistatement table-valued functions.
Scalar functions return a single data value (not a table) with RETURNS clause. Scalar functions can use all scalar data types, with exception of timestamp and user-defined data types. Inline table-valued functions return the result set of a single SELECT statement. Multistatement table-valued functions return a table, which was built with many TRANSACT-SQL statements.
User-defined functions can be invoked from a query like built‑in functions such as OBJECT_ID, LEN, DATEDIFF, or can be executed through an EXECUTE statement like stored procedures.
Performance Notes:
- On Microsoft SQL Server 2000 a table-valued function which "wraps" a View may be much faster than the View itself. The following MyFunction is an example of a "function-wrapper" which runs faster than the underlying view MyView:
CREATEFUNCTIONMyFunction()RETURNS@TblTABLE(StudentIDVARCHAR(255),SAS_StudentInstancesIDINT,LabelVARCHAR(255),ValueMONEY,CMN_PersonsIDINT)ASBEGININSERT@Tbl(StudentID,SAS_StudentInstancesID,Label,Value,CMN_PersonsID)SELECTStudentID,SAS_StudentInstancesID,Label,Value,CMN_PersonsIDFROMMyView-- where MyView selects (with joins) the same columns from large table(s)RETURNEND
- On Microsoft SQL Server 2005 the result of the same code execution is the opposite: view is executed faster than the "function-wrapper".
User-defined functions are subroutines made of one or more Transact-SQL statements that can be used to encapsulate code for reuse. It takes zero or more arguments and evaluates a return value. Has both control-flow and DML statements in its body similar to stored procedures. Does not allow changes to any Global Session State, like modifications to database or external resource, such as a file or network. Does not support output parameter. DEFAULT keyword must be specified to pass the default value of parameter. Errors in UDF cause UDF to abort which, in turn, aborts the statement that invoked the UDF.
CREATE FUNCTION CubicVolume -- Dimensiones de entrada en centímetros ( @CubeLength decimal ( 4 , 1 ), @CubeWidth decimal ( 4 , 1 ), @CubeHeight decimal ( 4 , 1 ) ) RETURNS decimal ( 12 , 3 ) AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) ENDColmena Apache
Apache Hive define, además de las funciones definidas por el usuario (UDF) habituales, también funciones de agregación definidas por el usuario (UDAF) y funciones de generación de tablas (UDTF). [ 1 ] Hive permite a los desarrolladores crear sus propias funciones personalizadas con Java. [ 2 ]
Apache Doris
Apache Doris, una base de datos analítica en tiempo real de código abierto, permite a los usuarios externos contribuir con sus propias UDF escritas en C++. [ 3 ]
Referencias
Enlaces externos
- Referencia de Microsoft SQL Server para CREATE FUNCTION
- Sección del manual de MySQL sobre funciones definidas por el usuario (UDF)
- Sentencia DB2 CREATE FUNCTION
- Bases de datos
- SQL
- Subrutinas