Sentencia CREATE FUNCTION

La sentencia CREATE FUNCTION se utiliza para registrar o definir una función definida por el usuario o una plantilla de función en el servidor actual.

Existen cinco tipos diferentes de funciones que se pueden crear utilizando esta sentencia. Cada una de ellos se describe por separado.

  • Escalar externo. La función se escribe en un lenguaje de programación y devuelve un valor escalar. El ejecutable externo se registra en la base de datos, junto con diversos atributos de la función.
  • Tabla externa. La función se escribe en un lenguaje de programación y devuelve una tabla completa. El ejecutable externo se registra en la base de datos junto con diversos atributos de la función.
  • Tabla externa OLE DB. Una función de tabla externa OLE DB definida por el usuario está registrada en la base de datos para acceder a los datos de un proveedor OLE DB.
  • Derivada o plantilla. Una función fuente se implanta invocando otra función (incorporada, externa, SQL o fuente) que ya está registrada en la base de datos.

    Es posible crear una función parcial, denominada función de plantilla, que define qué tipos de valores van a devolverse, pero que no contiene código ejecutable. El usuario la correlaciona con una función fuente de datos dentro de un sistema federado, de esta forma se puede invocar la función fuente de datos desde una base de datos federada. Una plantilla de función puede registrarse solamente en un servidor de aplicaciones que esté designado como servidor federado.

  • Escalar, tabla o fila de SQL. El cuerpo de la función está escrito en SQL y se define junto con el registro en la base de datos. Devuelve un valor escalar, una tabla o una fila individual.
  • Interfaz agregada. Una función de interfaz agregada se implementa invocando varios procedimientos externos y una función externa a la que se hace referencia como rutinas de componente.

La sentencia CREATE FUNCTION se puede enviar en formato ofuscado. En una sentencia ofuscada, solamente son legibles el nombre de la función y sus parámetros. El resto de la sentencia se codifica de tal manera que no es legible, pero que el servidor de bases de datos puede descodificar. Las sentencias ofuscadas se pueden generar mediante una llamada a la función DBMS_DDL.WRAP.