Función definida por el usuario

Ir a: navegación, búsqueda de

A función definida por el usuario (UDF) es un función facilitados por el usuario de un programa o medio ambiente, en un contexto donde la suposición usual es que las funciones están incorporadas en el programa o el medio ambiente.

Contenido

  • 1 Lenguaje BASIC
  • 2 Bases de datos
    • 2.1 SQL Server 2000
  • 3 Enlaces externos

Lenguaje BASIC

En algunas implementaciones de viejos de la BASIC lenguaje de programación, se definen las funciones definidas por el usuario utilizando la sintaxis "DEF FN". Dialectos modernos de BASIC están influenciados por la programación estructurada paradigma, donde la mayor parte o todo el código se escribe como procedimientos o funciones definidas por el usuario, y el concepto se vuelve prácticamente redundante.

Bases de datos

En bases de datos SQL, una función definida por el usuario proporciona un mecanismo para extender la funcionalidad de la servidor de base de datos mediante la adición de una función que puede ser evaluada en las sentencias SQL. El SQL Norma distingue entre escalar y funciones de la tabla. Una función escalar devuelve sólo un único valor (o NULL), mientras que una tabla función devuelve una tabla (relacional) compuesto por cero o más filas, cada fila con una o más columnas.

Funciones definidas por el usuario en SQL se declaran mediante la CREAR LA FUNCIÓN DE Declaración. Por ejemplo, una función que convierte a grados Celsius a Fahrenheit podría ser declarada como este:

CREAR FUNCIÓN DBO.CtoF(Celsius FLOTADOR)
  DEVOLUCIONES FLOTADOR
  RETORNO (Celsius * 1.8) + 32

Una vez creado, se puede utilizar en una función definida por el usuario Expresiones en las sentencias SQL. Por ejemplo, pueden invocarse donde se permiten la mayoría de las otras funciones intrínsecas. Esto también incluye Sentencias SELECT, donde la función se puede utilizar contra los datos almacenados en tablas de la base de datos. Conceptualmente, la función se evalúa una vez por fila en dicho uso. Por ejemplo, supongamos 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

SELECCIONE Nombre, CtoF(BoilingPoint)
  De Elementos

¿recuperar el nombre y el punto de ebullición de cada fila. Invoca la función definida por el usuario CtoF según lo declarado anteriormente con el fin de convertir el valor en la columna a un valor en grados Fahrenheit.

Cada función definida por el usuario lleva ciertas propiedades o características. El SQL estándar define las siguientes propiedades:

  • Lengua - define el lenguaje de programación en que se aplica la función definida por el usuario; los ejemplos incluyen SQL, C, C# y Java.
  • Estilo del 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 (sólo aplicable 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 única, teniendo en cuenta funciones sobrecargadas. Algunas implementaciones de SQL requieren que los nombres de función son ú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 tiene una influencia la Optimizador de consultas Cuando se compila una instrucción SQL.
  • Acceso a datos SQL - dice el sistema de gestión de base de datos si la función contiene ningunas declaraciones SQL (SQL NO), contiene sentencias SQL pero no acceder a cualquier tablas o vistas (CONTAINS SQL), lee datos de tablas o vistas (READS SQL DATA), o en realidad modifica datos en la base de datos (datos SQL se modifica).

Funciones definidas por el usuario no deben confundirse con 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 dependiendo de los parámetros. Un procedimiento no es una expresión y, por lo tanto, no puede utilizarse como funciones definidas por el usuario.

Algunos sistemas de gestión de base de datos permiten la creación de funciones definidas por el usuario en otros idiomas aparte del SQL. Microsoft SQL Server, por ejemplo, permite al usuario utilizar Idiomas de .NET incluyendo C# para este fin. DB2 y Oracle apoyan las funciones definidas por el usuario escritas en lenguajes de programación C o Java.

SQL Server 2000

Existen tres tipos de UDF en Microsoft SQL Server 2000:

  • Funciones escalares.
  • Funciones con valores de tabla en línea.
  • Funciones con valores de Multistatementtable.

Las funciones escalares devuelven un valor de datos único (no una tabla) con cláusula RETURNS. Las funciones escalares pueden utilizar todos los tipos de datos escalares, con excepción de timestamp y tipos de datos definidos por el usuario. Funciones con valores de tabla en línea devuelven el conjunto de resultados de una instrucción SELECT individual. Multistatement valores de tabla funciones devuelven una tabla, que fue construida con muchas declaraciones de TRANSACT-SQL.

Funciones definidas por el usuario pueden invocarse desde una consulta como funciones incorporadas como OBJECT_ID, LEN, DATEDIFF, o pueden ser ejecutadas a través de una instrucción EXECUTE como procedimientos almacenados.

Notas de funcionamiento: 1. en Microsoft SQL Server 2000 una función con valores de tabla que "envuelve" una vista puede ser mucho más rápido que la vista de sí mismo. El MyFunction siguiente es un ejemplo de una "función de envoltura" que corre más rápido que la vista subyacente MyView:

CREAR FUNCIÓN MyFunction()
    DEVOLUCIONES @Tbl MESA 
    (
StudentID VARCHAR(255), SAS_StudentInstancesID INT, Etiqueta VARCHAR(255), Valor                  DINERO, CMN_PersonsID INT
    )
AS
BEGIN
    INSERTAR @Tbl (
StudentID, SAS_StudentInstancesID, etiqueta, Valor, CMN_PersonsID )
    SELECCIONE StudentID, SAS_StudentInstancesID, etiqueta, Valor, CMN_PersonsID De MyView --Dónde MyView selecciona (con uniones) las mismas columnas de tablas grandes
 
    RETORNO
FINAL

2. en Microsoft SQL Server 2005 el resultado de la ejecución del mismo código es lo contrario: vista se ejecuta más rápido que la "función de envoltura".

Funciones definidas por el usuario son las subrutinas de uno o más declaraciones de Transact-SQL que pueden utilizarse para encapsular código para su reutilización. Toma cero o más argumentos y evalúa un valor devuelto. Ha tanto control de flujo y las declaraciones de DML en su cuerpo similar a los procedimientos almacenados. No permite cambios en cualquier estado de la sesión Global, como las modificaciones a la base de datos o recursos externos, como un archivo o una red. No admite el parámetro de salida. Debe especificarse la palabra clave DEFAULT para pasar el valor predeterminado del parámetro. Errores en la UDF causan UDF anular la operación que, a su vez, anula la declaración que invoca la FDU.

CREAR FUNCIÓN CubicVolume
--Entradas dimensiones en centímetros
(
@CubeLength decimal(4,1), @CubeWidth decimal(4,1), @CubeHeight decimal(4,1)
)
    DEVOLUCIONES decimal(12,3)
AS
BEGIN
  RETORNO(@CubeLength * @CubeWidth * @CubeHeight)
FINAL

Admite tipo de datos en Microsoft SQL Server 2000 como una tabla temporal utilizada para almacenar resultados mayormente utilizado para definir la variable temporal del tipo (tabla) y el valor devuelto de una FDU el alcance está limitado a la función, procedimiento almacenado o lote en el cual es definida operación de asignación no está permitido entre variables (tabla) pueden utilizarse en SELECT, INSERT, UPDATE y DELETE CREATE FUNCTION para crear UDF ALTER FUNCTION para cambiar las características de la UDF DROP FUNCTION para eliminar UDF

Enlaces externos

  • Referencia de Microsoft SQL Server para crear la función
  • Sección del manual MySQL en las FDU
  • Instrucción CREATE FUNCTION de DB2

Otras Páginas

Obtenido de"https://en.copro.org/w/index.php?title=User-defined_function&oldid=615086658"