<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FStoredProceedures</id>
	<title>Curso de MariaDB Desde la Consola/StoredProceedures - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_MariaDB_Desde_la_Consola%2FStoredProceedures"/>
	<link rel="alternate" type="text/html" href="https://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredProceedures&amp;action=history"/>
	<updated>2026-04-04T06:43:29Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredProceedures&amp;diff=122323&amp;oldid=prev</id>
		<title>Rrc: /* Diferencias entre los stored procedures y las stored functions */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cabal.mx/index.php?title=Curso_de_MariaDB_Desde_la_Consola/StoredProceedures&amp;diff=122323&amp;oldid=prev"/>
		<updated>2016-11-10T18:14:30Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Diferencias entre los stored procedures y las stored functions&lt;/span&gt;&lt;/span&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 Procedures | Stored Prodeedures]]&lt;br /&gt;
* [[:#Definición | &amp;amp;#124;___ Definición]]&lt;br /&gt;
* [[:#Ventajas de los stored procedures de MariaDB | &amp;amp;#124;______ Ventajas de los stored procedures de MariaDB]]&lt;br /&gt;
* [[:#Desventajas de los stored procedures de MariaDB | &amp;amp;#124;______ Desventajas de los stored procedures de MariaDB]]&lt;br /&gt;
* [[:#Diferencias entre los stored procedures y las stored functions | &amp;amp;#124;______ Diferencias entre los stored procedures y las stored functions]]&lt;br /&gt;
* [[:#Introducción a los parámetros de stored procedures de MariaDB | &amp;amp;#124;___ Introducción a los parámetros de stored procedures de MariaDB]]&lt;br /&gt;
* [[:#Sintaxis de definir un parámetro en los stored procedures | &amp;amp;#124;______ Sintaxis de definir un parámetro en los stored procedures]]&lt;br /&gt;
* [[:#Ejemplos de parámetros de stored procedures | &amp;amp;#124;______ Ejemplos de parámetros de stored procedures]]&lt;br /&gt;
* [[:#Ejemplo del IN parámetro | &amp;amp;#124;______ Ejemplo del IN parámetro]]&lt;br /&gt;
* [[:#Ejemplo del OUT parámetro | &amp;amp;#124;______ Ejemplo del OUT parámetro]]&lt;br /&gt;
* [[:#Ejemplo del INOUT parámetro | &amp;amp;#124;______ Ejemplo del INOUT parámetro]]&lt;br /&gt;
* [[:#Modificar un procedimiento almacenado | &amp;amp;#124;___ Modificar un procedimiento almacenado]]&lt;br /&gt;
* [[:#Eliminar un stored procedure |  &amp;amp;#124;___ Eliminar un stored procedure]]&lt;br /&gt;
* [[:#Descargar el EjemploDB | &amp;amp;#124;___ Descargar el EjemploDB]]&lt;br /&gt;
&lt;br /&gt;
= Stored Prodedures =&lt;br /&gt;
&lt;br /&gt;
== Definición ==&lt;br /&gt;
&lt;br /&gt;
Un stored procedure es un segmento de declaraciones SQL declarativas&lt;br /&gt;
almacenadas dentro del catálogo de bases de datos. Un stored procedure&lt;br /&gt;
puede ser invocado por triggers, otros stored procedures y aplicaciones&lt;br /&gt;
como Java, Python, PHP, etc.&lt;br /&gt;
&lt;br /&gt;
Un stored proceedure que se llama a sí mismo se conoce como un&lt;br /&gt;
stored procedure recursivo. La mayoría de los sistemas de administración de &lt;br /&gt;
bases de datos admiten stored procedures recursivos. Sin embargo, MariaDB&lt;br /&gt;
no lo soporta muy bien. Usted debe comprobar su versión de la base de datos&lt;br /&gt;
MariaDB antes de implementar stored procedures recursivos.&lt;br /&gt;
&lt;br /&gt;
=== Ventajas de los stored procedures de MariaDB ===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures típicamente ayudan a aumentar el rendimiento de las&lt;br /&gt;
aplicaciones. Una vez creados, los stored procedures se compilan y almacenan &lt;br /&gt;
en la base de datos. Sin embargo, MariaDB implementa los stored procedures&lt;br /&gt;
ligeramente diferentes. Los stored procedures de MariaDB se compilan bajo demanda.&lt;br /&gt;
Después de compilar un stored procedure, MariaDB lo coloca en un caché. Y MariaDB&lt;br /&gt;
mantiene su propio caché de stored procedures para cada conexión. Si una&lt;br /&gt;
aplicación utiliza un stored procedure varias veces en una sola conexión,&lt;br /&gt;
se utiliza la versión compilada, de lo contrario, el stored procedure funciona&lt;br /&gt;
como una consulta.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures ayudan a reducir el tráfico entre la aplicación y el&lt;br /&gt;
servidor de bases de datos, ya que en lugar de enviar varias sentencias SQL largas,&lt;br /&gt;
la aplicación sólo tiene que enviar nombre y parámetros del stored procedure.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures son reutilizables y transparentes para cualquier aplicación.&lt;br /&gt;
Los stored procedures exponen la interfaz de la base de datos a todas las aplicaciones&lt;br /&gt;
para que los desarrolladores no tengan que desarrollar funciones que ya están soportadas&lt;br /&gt;
en stored procedure.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored proceedures son seguros. El administrador de bases de datos puede conceder&lt;br /&gt;
permisos adecuados a las aplicaciones que acceden a stored procedures en la base de datos&lt;br /&gt;
sin conceder permisos sobre las tablas de base de datos subyacentes.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desventajas de los stored procedures de MariaDB ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
     Si utiliza una gran cantidad de stored procedures, el uso de&lt;br /&gt;
memoria de cada conexión que utiliza estos stored procedures aumentará&lt;br /&gt;
sustancialmente. Además, si sobreutiliza un gran número de operaciones&lt;br /&gt;
lógicas dentro de stored procedure, el uso de CPU también aumentará porque&lt;br /&gt;
el servidor de base de datos no está bien diseñado para operaciones lógicas.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
      Las construcciones de stored procedures dificultan el desarrollo de &lt;br /&gt;
stored procedures que tienen una lógica de negocio complicada.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
      Es difícil depurar stored procedures. Sólo unos pocos sistemas de gestión&lt;br /&gt;
de bases de datos permiten depurar stored procedures. Desafortunadamente, MariaDB&lt;br /&gt;
no proporciona facilidades para depurar stored procedures.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
      No es fácil desarrollar y mantener stored procedures. Desarrollar y mantener&lt;br /&gt;
stored procedures a menudo se requiere un conjunto de habilidades especializadas&lt;br /&gt;
que no todos los desarrolladores de aplicaciones poseen. Esto puede dar lugar a&lt;br /&gt;
problemas tanto en el desarrollo de aplicaciones como en las fases de mantenimiento.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diferencias entre los stored procedures y las stored functions ===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures no se pueden utilizar en operaciones Select.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures admiten la resolución de nombres diferidos.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures se utilizan generalmente para realizar la lógica de negocio.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures pueden devolver cualquier tipo de datos.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures pueden aceptar un mayor número de parámetros de entrada que las stored functions. Los stored procedures pueden tener hasta 21.000 parámetros de entrada.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures pueden ejecutar SQL dinámico.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Los stored procedures admiten el tratamiento de errores.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Funciones no deterministas se pueden utilizar en stored procedures.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions se pueden utilizar en las instrucciones Select.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions no admiten la resolución de nombres diferidos.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions se utilizan generalmente para cálculos.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions deben devolver un valor.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions no pueden devolver imágenes.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions aceptan números más pequeños de parámetros de entrada que los stored procedures. Los stored functions pueden tener hasta 1.023 parámetros de entrada.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las tablas temporales no se pueden utilizar en stored functions.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions no pueden ejecutar SQL dinámico.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las stored functions no admiten el tratamiento de errores. RAISEERROR OR @@ ERROR no están permitidos en stored functions.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Las funciones no deterministas no pueden usarse en stored functions. Por ejemplo, GETDATE() no se puede utilizar en stored functions.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introducción a los parámetros de stored procedures de MariaDB ==&lt;br /&gt;
&lt;br /&gt;
Casi todos de los stored procedures que se desarrollan requieren parámetros.&lt;br /&gt;
Los parámetros hacen que el stored procedure sea más flexible y útil.&lt;br /&gt;
En MariaDB, un parámetro tiene uno de los tres modos: IN, OUT o INOUT.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    IN - es el modo predeterminado. Cuando define un parámetro IN en un stored procedure,&lt;br /&gt;
el programa llamante tiene que pasar un argumento al stored procedure. Además, el valor&lt;br /&gt;
de un parámetro IN se protege. Esto significa que incluso el valor del parámetro IN se&lt;br /&gt;
cambia dentro del stored procedure, su valor original se conserva después de que finaliza&lt;br /&gt;
el procedimiento almacenado. En otras palabras, el stored procedure sólo funciona en la&lt;br /&gt;
copia del parámetro IN.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
      OUT - el valor de un parámetro OUT puede cambiarse dentro del stored procedure y su&lt;br /&gt;
nuevo valor se devuelve al programa llamante. Observe que el stored procedure no puede&lt;br /&gt;
acceder al valor inicial del parámetro OUT cuando se inicia.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;&lt;br /&gt;
      INOUT - un parámetro INOUT es la combinación de los parámetros IN y OUT.&lt;br /&gt;
Esto significa que el programa llamante puede pasar el argumento, y el stored procedure&lt;br /&gt;
puede modificar el parámetro INOUT y pasar el nuevo valor al programa llamante.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sintaxis de definir un parámetro en los stored procedures ===&lt;br /&gt;
&lt;br /&gt;
MODE param_nombre param_tipo (param_tamaño)&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    MODE - puede ser IN, OUT o INOUT, dependiendo del propósito del parámetro en el&lt;br /&gt;
stored procedure.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    param_nombre - es el nombre del parámetro. El nombre del parámetro debe seguir las&lt;br /&gt;
reglas de nomenclatura del nombre de la columna en MariaDB.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    param_tipo y tamaño - de datos. Al igual que una variable, el tipo de datos del &lt;br /&gt;
parámetro puede ser cualquier tipo de datos válido de MariaDB.&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Cada parámetro está separado por una coma (,) si el stored procedure tiene&lt;br /&gt;
más de un parámetro&lt;br /&gt;
&lt;br /&gt;
== Ejemplos de parámetros de stored procedures ==&lt;br /&gt;
=== Ejemplo del IN parámetro ===&lt;br /&gt;
&lt;br /&gt;
En el ejemplo siguiente se muestra cómo utilizar el parámetro IN en el &lt;br /&gt;
stored procedure ObtenOficinasPorPais que selecciona las oficinas ubicadas&lt;br /&gt;
en un país en particular.&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;
CREATE PROCEDURE ObtenOficinasPorPais( IN PaisNombre VARCHAR(255) )&lt;br /&gt;
 BEGIN&lt;br /&gt;
   SELECT * &lt;br /&gt;
   FROM Oficinas&lt;br /&gt;
   WHERE Pais = PaisNombre;&lt;br /&gt;
 END //&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; show procedure status \G;&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
                  Db: classicmodels&lt;br /&gt;
                Name: ObtenOficinasPorPais&lt;br /&gt;
                Type: PROCEDURE&lt;br /&gt;
             Definer: root@localhost&lt;br /&gt;
            Modified: 2016-11-04 15:51:45&lt;br /&gt;
             Created: 2016-11-04 15:51:45&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;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; show create procedure ObtenOficinasPorPais \G;&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           Procedure: ObtenOficinasPorPais&lt;br /&gt;
            sql_mode: &lt;br /&gt;
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `ObtenOficinasPorPais`( IN PaisNombre VARCHAR(255) )&lt;br /&gt;
BEGIN&lt;br /&gt;
   SELECT * &lt;br /&gt;
   FROM Oficinas&lt;br /&gt;
   WHERE Pais = PaisNombre;&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; CALL ObtenOficinasPorPais( &amp;#039;USA&amp;#039; ); &lt;br /&gt;
+-----------+---------------+-----------------+----------------------+------------+--------+------+-------+------------+&lt;br /&gt;
| OficinaID | Ciudad        | Telefono        | Direccion1           | Direccion2 | Estado | Pais | CP    | Territorio |&lt;br /&gt;
+-----------+---------------+-----------------+----------------------+------------+--------+------+-------+------------+&lt;br /&gt;
| 1         | San Francisco | +1 650 219 4782 | 100 Market Street    | Suite 300  | CA     | USA  | 94080 | NA         |&lt;br /&gt;
| 2         | Boston        | +1 215 837 0825 | 1550 Court Place     | Suite 102  | MA     | USA  | 02107 | NA         |&lt;br /&gt;
| 3         | NYC           | +1 212 555 3000 | 523 East 53rd Street | apt. 5A    | NY     | USA  | 10022 | NA         |&lt;br /&gt;
+-----------+---------------+-----------------+----------------------+------------+--------+------+-------+------------+&lt;br /&gt;
3 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; CALL ObtenOficinasPorPais( &amp;#039;France&amp;#039; ); &lt;br /&gt;
+-----------+--------+-----------------+--------------------------+------------+--------+--------+-------+------------+&lt;br /&gt;
| OficinaID | Ciudad | Telefono        | Direccion1               | Direccion2 | Estado | Pais   | CP    | Territorio |&lt;br /&gt;
+-----------+--------+-----------------+--------------------------+------------+--------+--------+-------+------------+&lt;br /&gt;
| 4         | Paris  | +33 14 723 4404 | 43 Rue Jouffroy D&amp;#039;abbans | NULL       | NULL   | France | 75017 | EMEA       |&lt;br /&gt;
+-----------+--------+-----------------+--------------------------+------------+--------+--------+-------+------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo del OUT parámetro ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
El siguiente stored procedure devuelve el número de pedidos por&lt;br /&gt;
estado de pedido. Tiene dos parámetros:&lt;br /&gt;
&lt;br /&gt;
     OrdenEstatus: el parámetro IN que es el estado del pedido que&lt;br /&gt;
                   queremos contar los pedidos.&lt;br /&gt;
     Total:        el parámetro OUT que almacena el número de pedidos&lt;br /&gt;
                   para un estado de pedido específico.&lt;br /&gt;
&lt;br /&gt;
El siguiente es el código fuente del stored procedure ContarOrdenesPorEstatus.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE ContarOrdenesPorEstatus(&lt;br /&gt;
 IN OrdenEstatus VARCHAR(25),&lt;br /&gt;
 OUT Total INT)&lt;br /&gt;
BEGIN&lt;br /&gt;
 SELECT count(OrdenID)&lt;br /&gt;
 INTO Total&lt;br /&gt;
 FROM Ordenes&lt;br /&gt;
 WHERE Estatus = OrdenEstatus;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Para obtener el número de pedidos enviados, llamams al &lt;br /&gt;
stored procedure ContarOrdenesPorEstatus y pasamos el estado&lt;br /&gt;
del pedido como Shipped y también pasamos un argumento (@Total)&lt;br /&gt;
para obtener el valor devuelto.&lt;br /&gt;
&lt;br /&gt;
CALL ContarOrdenesPorEstatus(&amp;#039;Shipped&amp;#039;,@Total);&lt;br /&gt;
SELECT @Total;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
MariaDB [classicmodels]&amp;gt; CALL ContarOrdenesPorEstatus(&amp;#039;Shipped&amp;#039;,@Total);&lt;br /&gt;
Query OK, 1 row affected (0.01 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SELECT @Total;&lt;br /&gt;
+--------+&lt;br /&gt;
| @Total |&lt;br /&gt;
+--------+&lt;br /&gt;
|    303 |&lt;br /&gt;
+--------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Para obtener el número de órdenes que están en proceso, &lt;br /&gt;
llamamos al stored procedure ContarOrdenesPorEstatus de&lt;br /&gt;
la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
CALL ContarOrdenesPorEstatus(&amp;#039;in process&amp;#039;,@Total);&lt;br /&gt;
SELECT @Total AS  total_in_process;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
MariaDB [classicmodels]&amp;gt; CALL ContarOrdenesPorEstatus(&amp;#039;in process&amp;#039;,@Total);&lt;br /&gt;
Query OK, 1 row affected (0.01 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SELECT @Total AS  total_in_process;&lt;br /&gt;
+------------------+&lt;br /&gt;
| total_in_process |&lt;br /&gt;
+------------------+&lt;br /&gt;
|                6 |&lt;br /&gt;
+------------------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo del INOUT parámetro ===&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;
CREATE PROCEDURE set_counter(INOUT cuenta INT(4),IN inc INT(4))&lt;br /&gt;
  BEGIN&lt;br /&gt;
    SET cuenta = cuenta + inc;&lt;br /&gt;
   END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&lt;br /&gt;
Query OK, 0 rows affected (0.01 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
El stored procedure set_counter acepta un parámetro INOUT (cuenta)&lt;br /&gt;
y un parámetro IN (inc).&lt;br /&gt;
&lt;br /&gt;
Dentro del stored proceedure, aumentamos el contador (cuenta) por&lt;br /&gt;
el valor del parámetro inc.&lt;br /&gt;
&lt;br /&gt;
Vea cómo llamamos al stored procedure set_counter:&lt;br /&gt;
&lt;br /&gt;
SET @counter = 1;&lt;br /&gt;
SELECT @counter;&lt;br /&gt;
CALL set_counter(@counter,1);&lt;br /&gt;
SELECT @counter;&lt;br /&gt;
CALL set_counter(@counter,1);&lt;br /&gt;
SELECT @counter;&lt;br /&gt;
CALL set_counter(@counter,5);&lt;br /&gt;
SELECT @counter;&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SET @counter = 1;&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
MariaDB [classicmodels]&amp;gt; SELECT @counter;&lt;br /&gt;
+----------+&lt;br /&gt;
| @counter |&lt;br /&gt;
+----------+&lt;br /&gt;
|        1 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; CALL set_counter(@counter,1);&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SELECT @counter;&lt;br /&gt;
+----------+&lt;br /&gt;
| @counter |&lt;br /&gt;
+----------+&lt;br /&gt;
|        2 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; CALL set_counter(@counter,1);&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SELECT @counter;&lt;br /&gt;
+----------+&lt;br /&gt;
| @counter |&lt;br /&gt;
+----------+&lt;br /&gt;
|        3 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; CALL set_counter(@counter,5);&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
MariaDB [classicmodels]&amp;gt; SELECT @counter;&lt;br /&gt;
+----------+&lt;br /&gt;
| @counter |&lt;br /&gt;
+----------+&lt;br /&gt;
|        8 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modificar un stored procedure ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MariaDB proporciona una instrucción ALTER PROCEDURE para modificar una rutina, pero sólo permite&lt;br /&gt;
la posibilidad de cambiar ciertas características. Si necesita modificar el cuerpo o los parámetros,&lt;br /&gt;
debe eliminar y volver a crear el stored procedure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eliminar un stored procedure ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE [IF EXISTS] Nombre de Procedure;&lt;br /&gt;
&lt;br /&gt;
Este es un comando simple. La cláusula IF EXISTS opcional previene un error&lt;br /&gt;
en caso de que el procedure no exista.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descargar el EjemploDB ==&lt;br /&gt;
[http://www.linuxcabal.org/MariaDBEjemplos.sql.xz Descargar el EjemploDB]&lt;br /&gt;
&lt;br /&gt;
[[Category:MariaDB Desde la Consola]]&lt;br /&gt;
[[Category: CursoMariaDB]]&lt;/div&gt;</summary>
		<author><name>Rrc</name></author>
		
	</entry>
</feed>