<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FStoredFunciones</id>
	<title>Curso de MariaDB Desde la Consola/StoredFunciones - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FStoredFunciones"/>
	<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredFunciones&amp;action=history"/>
	<updated>2026-06-16T03:59:49Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredFunciones&amp;diff=122377&amp;oldid=prev</id>
		<title>Rrc en 17:16 24 nov 2016</title>
		<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredFunciones&amp;diff=122377&amp;oldid=prev"/>
		<updated>2016-11-24T17:16:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[:#Stored Functions | Stored Functions]]&lt;br /&gt;
* [[:#Sintaxis | Sintaxis]]&lt;br /&gt;
* [[:#Descripción | Descripción]]&lt;br /&gt;
&lt;br /&gt;
= Stored Functions =&lt;br /&gt;
&lt;br /&gt;
== Sintaxis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE [OR REPLACE]&lt;br /&gt;
    [DEFINER = {user | CURRENT_USER}]&lt;br /&gt;
    FUNCTION func_name ([func_parameter[,...]])&lt;br /&gt;
    RETURNS type&lt;br /&gt;
    [characteristic ...]&lt;br /&gt;
    RETURN func_body&lt;br /&gt;
&lt;br /&gt;
func_parameter:&lt;br /&gt;
    param_name type&lt;br /&gt;
&lt;br /&gt;
type:&lt;br /&gt;
    Any valid MariaDB data type&lt;br /&gt;
&lt;br /&gt;
characteristic:&lt;br /&gt;
    LANGUAGE SQL&lt;br /&gt;
  | [NOT] DETERMINISTIC&lt;br /&gt;
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }&lt;br /&gt;
  | SQL SECURITY { DEFINER | INVOKER }&lt;br /&gt;
  | COMMENT &amp;#039;string&amp;#039;&lt;br /&gt;
&lt;br /&gt;
func_body:&lt;br /&gt;
    Valid SQL procedure statement&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descripción ==&lt;br /&gt;
&lt;br /&gt;
Una stored function es una función definida que se llama desde dentro de una instrucción SQL&lt;br /&gt;
como una función regular, y devuelve un único valor.&lt;br /&gt;
&lt;br /&gt;
Creación de funciones almacenados&lt;br /&gt;
&lt;br /&gt;
He aquí un ejemplo de esqueleto para ver una función almacenada en acción:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DELIMITER //&lt;br /&gt;
&lt;br /&gt;
CREATE FUNCTION CuarentayDos() RETURNS TINYINT DETERMINISTIC&lt;br /&gt;
BEGIN&lt;br /&gt;
 DECLARE x TINYINT;&lt;br /&gt;
 SET x = 42;&lt;br /&gt;
 Return x;&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En primer lugar, el delimitador se cambia, ya que la definición de función contendrá el delimitador&lt;br /&gt;
de punto y coma regular. A continuación, la función se llama CuarentayDos y definido para devolver &lt;br /&gt;
un tinyint. La palabra clave DETERMINISTIC no es necesario en todos los casos (aunque si el log binario&lt;br /&gt;
está activado, dejando fuera generará un error), y es ayudar al optimizador de consultas elige un plan&lt;br /&gt;
de consulta. Una función determinista es aquel que, teniendo en cuenta los mismos argumentos, siempre&lt;br /&gt;
devolverá el mismo resultado.&lt;br /&gt;
&lt;br /&gt;
A continuación, el cuerpo de la función se coloca entre BEGIN y END declaraciones.&lt;br /&gt;
Se declara un tinyint, x, que simplemente se establece en 42, y este es el resultado devuelto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [(none)]&amp;gt; show databases;&lt;br /&gt;
+--------------------+&lt;br /&gt;
| Database           |&lt;br /&gt;
+--------------------+&lt;br /&gt;
| Prueba1            |&lt;br /&gt;
| PythonClase        |&lt;br /&gt;
| information_schema |&lt;br /&gt;
| mysql              |&lt;br /&gt;
| performance_schema |&lt;br /&gt;
| test               |&lt;br /&gt;
+--------------------+&lt;br /&gt;
6 rows in set (0.04 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [(none)]&amp;gt; use Prueba1;&lt;br /&gt;
Database changed&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; DELIMITER //&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; &lt;br /&gt;
MariaDB [Prueba1]&amp;gt; CREATE FUNCTION CuarentayDos() RETURNS TINYINT DETERMINISTIC&lt;br /&gt;
                   BEGIN&lt;br /&gt;
                     DECLARE x TINYINT;&lt;br /&gt;
                     SET x = 42;&lt;br /&gt;
                     Return x;&lt;br /&gt;
                     END //&lt;br /&gt;
Query OK, 0 rows affected (0.08 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; DELIMITER ;&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; show function status;&lt;br /&gt;
+---------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+&lt;br /&gt;
| Db      | Name         | Type     | Definer        | Modified            | Created             | Security_type | Comment |&lt;br /&gt;
+---------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+&lt;br /&gt;
| Prueba1 | CuarentayDos | FUNCTION | root@localhost | 2016-10-17 13:13:17 | 2016-10-17 13:13:17 | DEFINER       |         |&lt;br /&gt;
+---------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+&lt;br /&gt;
&lt;br /&gt;
+----------------------+----------------------+--------------------+&lt;br /&gt;
| character_set_client | collation_connection | Database Collation |&lt;br /&gt;
+----------------------+----------------------+--------------------+&lt;br /&gt;
| utf8                 | utf8_general_ci      | utf8_unicode_ci    |&lt;br /&gt;
+----------------------+----------------------+--------------------+&lt;br /&gt;
1 row in set (0.05 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; show create function CuarentayDos;&lt;br /&gt;
+--------------+----------+&lt;br /&gt;
| Function     | sql_mode |&lt;br /&gt;
+--------------+----------+&lt;br /&gt;
| CuarentayDos |          |&lt;br /&gt;
+--------------+----------+&lt;br /&gt;
&lt;br /&gt;
+------------------------------------------------------------------------------------+&lt;br /&gt;
| Create Function                                                                    |&lt;br /&gt;
+------------------------------------------------------------------------------------+&lt;br /&gt;
!                                                                                    |&lt;br /&gt;
!  CREATE DEFINER=`root`@`localhost` FUNCTION `CuarentayDos`() RETURNS tinyint(4)    |&lt;br /&gt;
!     DETERMINISTIC                                                                  |&lt;br /&gt;
! BEGIN                                                                              |&lt;br /&gt;
!  DECLARE x TINYINT;                                                                |&lt;br /&gt;
!  SET x = 42;                                                                       |&lt;br /&gt;
!  Return x;                                                                         |&lt;br /&gt;
! END                                                                                |&lt;br /&gt;
+------------------------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
+----------------------+----------------------+--------------------|&lt;br /&gt;
| character_set_client | collation_connection | Database Collation |&lt;br /&gt;
+----------------------+----------------------+--------------------|&lt;br /&gt;
| utf8                 | utf8_general_ci      | utf8_unicode_ci    |&lt;br /&gt;
|----------------------+----------------------+--------------------+&lt;br /&gt;
1 row in set (0.00 sec&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; select CuarentayDos();&lt;br /&gt;
+----------------+&lt;br /&gt;
| CuarentayDos() |&lt;br /&gt;
+----------------+&lt;br /&gt;
|             42 |&lt;br /&gt;
+----------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por supuesto, una función que no tiene ningún argumento es de poca utilidad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; drop function CuarentayDos;&lt;br /&gt;
Query OK, 0 rows affected (0.08 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; show function status;&lt;br /&gt;
Empty set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
He aquí un ejemplo más complejo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DELIMITER //&lt;br /&gt;
&lt;br /&gt;
CREATE FUNCTION VatCents( precio DECIMAL(10,2) ) RETURNS INT DETERMINISTIC&lt;br /&gt;
BEGIN&lt;br /&gt;
  DECLARE x INT;&lt;br /&gt;
  SET x = precio * 114;&lt;br /&gt;
  Return x;&lt;br /&gt;
END //&lt;br /&gt;
Query OK, 0 filas afectadas (0,04 seg)&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta función toma un argumento, el precio que se define como un decimal, y devuelve un int.&lt;br /&gt;
&lt;br /&gt;
Para encontrar las funciones almacenadas se están ejecutando en el servidor, use SHOW FUNCTION STATUS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; show function status \G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
                  Db: Prueba1&lt;br /&gt;
                Name: VatCents&lt;br /&gt;
                Type: FUNCTION&lt;br /&gt;
             Definer: root@localhost&lt;br /&gt;
            Modified: 2016-10-17 14:47:15&lt;br /&gt;
             Created: 2016-10-17 14:47:15&lt;br /&gt;
       Security_type: DEFINER&lt;br /&gt;
             Comment: &lt;br /&gt;
character_set_client: utf8&lt;br /&gt;
collation_connection: utf8_general_ci&lt;br /&gt;
  Database Collation: utf8_unicode_ci&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o consultar la tabla de rutinas en la base de datos directamente INFORMATION_SCHEMA:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [Prueba1]&amp;gt;  SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE=&amp;#039;FUNCTION&amp;#039;;&lt;br /&gt;
+--------------+&lt;br /&gt;
| ROUTINE_NAME |&lt;br /&gt;
+--------------+&lt;br /&gt;
| VatCents     |&lt;br /&gt;
+--------------+&lt;br /&gt;
1 row in set (0.21 sec)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para saber lo que hace la función almacenada, use SHOW CREATE FUNCTION.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; SHOW CREATE FUNCTION VatCents \G&lt;br /&gt;
********************* 1. row *********************&lt;br /&gt;
            Function: VatCents&lt;br /&gt;
            sql_mode: &lt;br /&gt;
     Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `VatCents`(price DECIMAL(10,2)) RETURNS int(11)&lt;br /&gt;
    DETERMINISTIC&lt;br /&gt;
BEGIN&lt;br /&gt;
 DECLARE x INT;&lt;br /&gt;
 SET x = price * 114;&lt;br /&gt;
 RETURN x;&lt;br /&gt;
END&lt;br /&gt;
character_set_client: utf8&lt;br /&gt;
collation_connection: utf8_general_ci&lt;br /&gt;
  Database Collation: utf8_unicode_ci&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [Prueba1]&amp;gt; select VatCents(100);&lt;br /&gt;
+---------------+&lt;br /&gt;
| VatCents(100) |&lt;br /&gt;
+---------------+&lt;br /&gt;
|         11400 |&lt;br /&gt;
+---------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para cambiar las características de una stored function, utilice la función ALTER.&lt;br /&gt;
Tenga en cuenta que no puede cambiar los parámetros o el cuerpo de una stored function&lt;br /&gt;
utilizando esta directivo; para hacer tales cambios, tendrá que quitar y volver a crear&lt;br /&gt;
la función usando DROP FUNCTION y CREATE FUNCTION.&lt;br /&gt;
&lt;br /&gt;
[[Category:MariaDB Desde la Consola]]&lt;br /&gt;
[[Category: CursoMatiaDB]]&lt;/div&gt;</summary>
		<author><name>Rrc</name></author>
		
	</entry>
</feed>