Felipe, parte de este gran equipo, nos hizo el favor de redactar este post ya que conoce muy bien este tema.
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.
Reseñas y valoraciones
Si posees alguna sospecha o forma de aclararse nuestro artículo eres capaz de añadir una explicación y con gusto lo ojearemos.