Funciones y Procedimientos en MySQL – Definición y Usos

Las funciones y procedimientos en MySQL, permiten realizar ciertas acciones directamente desde el motor de la base de datos, como búsquedas, inserciones, modificaciones, cálculos intermedios,etc.  de forma independiente del código de un sistema.

Funciones y procedimientos en MySQL
Funciones y procedimientos en MySQL

El uso adecuado de las funciones y procedimientos en MySQL permite ser más ágil en la manipulación de datos, directamente desde el motor de la base, haciendo más mantenible el código del sistema, ya que las modificaciones sobre los datos se pueden realizar más fácilmente sobre la fuente, y no sobre un código que puede estar compilado.


Funciones en MySQL


Las funciones tienen como objetivo retornar algún tipo de valor, por ejemplo devolver un número entero o decimal, una cadena de texto, o un valor verdadero o positivo.

Las funciones reciben datos de entrada a modo de parámetros que se definen entre paréntesis, mientras que el tipo de dato que entrega se define luego de la palabra reservada RETURNS.

Por ejemplo esta función llamada pos_per, se encarga retornar una posición (valor entero bigint)  en un rango de datos, los datos de entrada los recibe entre paréntesis, recibiendo una fecha inicial (fi varchar), una fecha final (ff varchar) y un código (cod_d varchar) en formato de texto, y un valor entero (p int). El cuerpo de la función se inicia por la palabra reservada BEGIN y termina en END:

FUNCTION `pos_per`(`fi` varchar(30),`ff` varchar(30),`cod_d` varchar(40), `p` INT ) RETURNS bigint(20)
    DETERMINISTIC
BEGIN

  DECLARE per BIGINT;
  SET per=0;

--> Consulta que entrega un solo resultado en la variable per
Select truncate( C.N*p/100,0) INTO per from
    (
    Select Count(*) as N, cod_dircon from
      (
      select distinct (i.cod_dircon) as cod_dircon,r.subida,r.bajada from
      t_datos_identificacion i inner join (t_rates_vrf r right join t_servidor s on r.direccion_ip=s.ip_publica)
      on i.cod_dato_identificacion=s.cod_contrato
      where r.fecha between str_to_date(fi,'%Y-%m-%d %H:%i:%s') and str_to_date(ff,'%Y-%m-%d %H:%i:%s') and i.cod_dircon=cod_d
       ) B
     group by cod_dircon
     ) C;

->> Valor entero que se retorna en la función
return per+1;

END;
En este ejemplo, luego de realizar una consulta sobre un conjunto de datos, se obtiene un solo valor entero, que se retorna en el llamado de la función.
La función puede ser llamada desde una consulta de la base de datos, o dentro de otra función o procedimiento de MySQL.


También te puede interesar ¿Qué es y para que sirve MySQL Database?

Para el ejemplo la función podría ser llamada de la siguiente forma:

pos_per( '2015-03-12 00:00:00','2015-03-14 23:59:59',5 )
MySQL tiene un sinnúmero de funciones incorporadas que permiten realizar muhcas otras operaciones sobre los datos, como por ejemplo operaciones matemáticas, operaciones sobre cadenas de texto, etc.

Procedimientos en MySQL


Un procedimiento generalmente se encarga de realizar una acción sobre un conjunto de datos, ya sea para listarlos, borrarlos, modificarlos o agregar nuevos datos.
El procedimiento también recibe valores de entrada en forma de parámetros entre paréntesis, pero no especifíca un valor de retorno. Aunque también puede retornar valores en variables de tipo out.


También te podría interesar leer ¿Qué es la Programación Orientada a Objetos POO?

En el ejemplo de abajo, el procedimiento se llama perc_baj,  recibe parámetros de entrada como fecha inicial (fi varchar), fecha final (ff varchar) y código (cod_d varchar) en formato de texto, y un valor entero (p int), y entrega de salida además un valor en formato de texto, en la variable out_valor.

PROCEDURE `perc_baj`(fi varchar(30), ff varchar(30),cod_d varchar(40), p INT , out valor varchar(20))
begin

SET @_fi = fi;
SET @_ff = ff;
SET @_cod_d = cod_d;
SET @_p = p-1;
set @v='';
set @c='';

PREPARE stmt FROM "select distinct (i.cod_dircon) as cod_dircon,r.bajada INTO @c,@v from
      t_datos_identificacion i inner join (t_rates_vrf r right join t_servidor s on r.direccion_ip=s.ip_publica)
      on i.cod_dato_identificacion=s.cod_contrato
      where r.fecha between str_to_date(?,'%Y-%m-%d %H:%i:%s') and str_to_date(?,'%Y-%m-%d %H:%i:%s')
      and i.cod_dircon=? order by r.bajada asc limit ?,1 ";

EXECUTE stmt USING @_fi, @_ff, @_cod_d, @_p;
DEALLOCATE PREPARE stmt;

set valor=@v;

end;
Este procedimiento se encarga de listar datos provenientes de una consulta, además de devolver un resultado en la variable valor.
El procedimiento se llama precedido por la palabra clave call, por ejemplo:
set @a='';
call perc_baj( '2015-03-12 00:00:00','2015-03-14 23:59:59',5 ,@a);
set valor=@a;
Aquí se declara una variable @a que se encarga de recibir el valor de retorno del procedimiento.

Llamar procedimiento desde PHP


El procedimiento se puede llamar desde php más o menos de la siguiente forma:
<?php

$mysqli = new mysqli("182.1.8.1","user","pass","db");


if (mysqli_connect_errno()) {
  printf("<br />Connect failed: %s\n", mysqli_connect_error());
  exit();
}

if ($mysqli->multi_query("call percentil('2015-03-01 00:00:00','2015-03-14 23:59:59',5);")) {
  if ($result = $mysqli->store_result()) {
    while ($row = $result->fetch_assoc()) {
    echo "<pre>";
    print_r($row);
  }
  $result->close();
  }
}
?>
Las funciones y procedimientos en MySQL facilitan realizar operaciones y cálculos con los datos de la base, para que sean independientes del código que las usa, o si se realizan directamente en una consulta SQL normal.
Este artículo hace parte del sistema de divulgación de conocimiento de ITSoftware SAS.

Si te gustó, por favor no te olvides compartirlo en las redes sociales. 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.