Sintaxis

CREATE[ORREPLACE][AGGREGATE]FUNCTION[IFNOTEXISTS] function_name
    RETURNS DECIMAL
    SONAME shared_library_name

Descripción

Una función definida por el usuario (UDF) es una forma de ampliar MariaDB con una nueva función que funciona como una función MariaDB nativa (incorporada) como ABS() o CONCAT().

function_name es el nombre que debe usarse en las sentencias de SQL para invocar la función.

Para crear una función, debe tener el privilegio INSERT para la base de datos mysql. Esto es necesario porque CREATE FUNCTION agrega una fila a la tabla del sistema mysql.func que registra el nombre, el tipo y el nombre de la biblioteca compartida de la función. Si no tiene esta tabla, debe ejecutar el comando mysql_upgrade para crearla.

Los UDF deben estar escritos en C, C++ u otro lenguaje que utilice las convenciones de llamada de C, MariaDB debe haberse compilado dinámicamente y su sistema operativo debe admitir la carga dinámica.

Para ver un ejemplo, véase sql/udf_example.cc en el árbol de fuentes. Para ver una colección de UDF existentes, consulte http://www.mysqludf.org/.

Las declaraciones que utilizan funciones definidas por el usuario no son seguras para la replicación.

Para crear una función almacenada en lugar de una función definida por el usuario, consulte CREAR FUNCIÓN.

Para conocer los identificadores válidos para usar como nombres de funciones, consulte Nombres de identificadores.

DEVOLUCIONES

Él RETURNS La cláusula indica el tipo de valor de retorno de la función y puede ser STRING, INTEGER, REAL o DECIMAL. DECIMAL las funciones regresan actualmente string valores y deben escribirse como funciones STRING.

nombre_de_biblioteca_compartida

shared_library_name es el nombre base del archivo de objeto compartido que contiene el código que implementa la función. El archivo debe estar ubicado en el directorio del complemento. Este directorio viene dado por el valor de la variable de sistema plugin_dir. Tenga en cuenta que antes de MariaDB/MySQL 5.1, el objeto compartido se podía ubicar en cualquier directorio que buscaba el enlazador dinámico de su sistema.

AGREGAR

Las funciones agregadas son funciones de resumen como SUM() y AVG().

MariaDB a partir de 10.4

Las funciones UDF agregadas se pueden utilizar como funciones de ventana.

O REEMPLAZAR

MariaDB comenzando con 10.1.3

Él OR REPLACE se añadió una cláusula en Maria DB 10.1.3

Si el opcional OR REPLACE se utiliza la cláusula, actúa como un atajo para:

DROPFUNCTIONIFEXISTS function_name;CREATEFUNCTION name ...;

SI NO EXISTE

MariaDB comenzando con 10.1.3

Él IF NOT EXISTS se añadió una cláusula en Maria DB 10.1.3

Cuando se usa la cláusula IF NOT EXISTS, MariaDB devolverá una advertencia en lugar de un error si la función especificada ya existe. No se puede usar junto con O REEMPLAZAR.

Actualización de una UDF

Para actualizar la biblioteca compartida de la UDF, primero ejecute una declaración DROP FUNCTION, luego actualice la biblioteca compartida y finalmente ejecute la declaración CREATE FUNCTION. Si actualiza sin seguir este proceso, puede bloquear el servidor.

Ejemplos

CREATEFUNCTION jsoncontains_path RETURNSintegerSONAME'ha_connect.so';
Query OK,0rows affected (0.00 sec)

O REEMPLAZAR y SI NO EXISTE:

CREATEFUNCTION jsoncontains_path RETURNSintegerSONAME'ha_connect.so';
ERROR 1125(HY000): Function'jsoncontains_path' already existsCREATEORREPLACEFUNCTION jsoncontains_path RETURNSintegerSONAME'ha_connect.so';
Query OK,0rows affected (0.00 sec)CREATEFUNCTIONIFNOTEXISTS jsoncontains_path RETURNSintegerSONAME'ha_connect.so';
Query OK,0rows affected,1 warning (0.00 sec)SHOWWARNINGS;+-------+------+---------------------------------------------+|Level| Code | Message                                     |+-------+------+---------------------------------------------+| Note  |1125|Function'jsoncontains_path' already exists|+-------+------+---------------------------------------------+

Ver también

  • Nombres de identificadores
  • FUNCIÓN DE GOTA
  • CREAR FUNCIÓN

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido por adelantado. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o cualquier otra parte.