miércoles, 17 de agosto de 2016

Procedimientos Almacenados en MySQL (MariaDB) Parte II

Procedimientos Almacenados en MySQL (MariaDB) Parte II


Seguimos con el tema de los procedimientos almacenados en MySQL, pero ahora veremos el uso de variables dentro de los mismos stored procedures, pero primero veamos algunos conceptos básicos:

Variable: Una variable en informática es un espacio reservado en memoria, para almacenar un valor, que puede cambiar con el tiempo, tiene un nombre simbólico y un tipo de dato que almacena.

Datos numéricos

BIT o BOOL, para un número entero que puede ser 0 ó 1

INT para almacenar números enteros, en un rango de -2147463846 a 2147483647. Si configuramos este dato como unsigned, el rango es 0 a 4294967295

BIGINT número entero con rango de valores desde -9223372036854775808 a 9223372036854775807. Unsigned, desde 0 a 18446744073709551615.

FLOAT (m,d) representa números decimales. Podemos especificar cuantos dígitos (m) pueden utilizarse (término también conocido como ancho de pantalla), y cuantos en la parte decimal (d). Mysql redondeará el decimal para ajustarse a la capacidad.

Caracteres o cadenas

CHAR Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca desde 1 a 255 caracteres.

VARCHAR (n) Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1-255 caracteres, pero en este caso, de longitud variable. Un campo CHAR ocupará siempre el máximo de longitud que le hallamos asignado, aunque el tamaño del dato sea menor (añadiendo espacios adicionales que sean precisos). Mientras que VARCHAR solo almacena la longitud del dato (n), permitiendo que el tamaño de la base de datos sea menor. Eso si, el acceso a los datos CHAR es mas rápido que VARCHAR.

TINYTEXT, TINYBLOB para un máximo de 255 caracteres. La diferencia entre la familia de datatypes text y blob es que la primera es para cadenas de texto plano (sin formato) y case-insensitive (sin distinguir mayusculas o minusculas) mientras que blob se usa para objetos binarios: cualquier tipo de datos o información, desde un archivo de texto con todo su formato (se diferencia en esto de el tipo Text) hasta imágenes, archivos de sonido o video.

Fechas

DATE para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a 9999 12 31.

DATETIME Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TIMESTAMP Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo

TIME almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de ‘HH:MM:SS’

YEAR almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.


Muy bien queridos lectores, ya sabemos lo que son las variables y los tipos de datos que almacenan, en esta ocasión, en esta segunda parte de los procedimientos almacenados, veremos su uso y su utilidad, ya que nos darán mayor dinamismo a nuestros procedimientos, pero basta de teoría, pasemos a los hechos que es lo que nos gusta y como aprendemos.


Ejericicio 1

Crear un procedimiento almacenado (SP) que nos permita ingresar un país, validar que el país no exista y en caso de que exista, actualizar la información y mostrar la leyenda “País ya existe, se actualizarán los datos”, haciendo uso de las variables

DELIMITER $$
DROP PROCEDURE IF EXISTS insertapaises;
CREATE PROCEDURE `insertapaises`(codigo varchar(4), nombre varchar(100), bandera varchar(100), continente varchar(100))
BEGIN
declare existe int;
set existe = (select count(*) from paises where codigopais = codigo);
if existe =0

then
select existe;

insert into paises (codigopais, nombre, bandera, fecha_creacion, continente)
values (codigo, nombre, bandera, now(), continente);


else

SELECT 'Pais ya existe, se actualizarán los datos';
UPDATE paises set nombre = nombre, bandera=bandera where codigopais=codigo;

END if;
end$$

Como ven, la creación de stored procedure es similar, el procedimiento se llamará insertapaises y recibirá 4 parámetros (codigo, nombre, bandera y continente), todos ellos varchar, pero hay algunos cambios cuando se utilizan variables

declare existe int;

Para declarar una variable se hará con la instrucción DECLARE, despues el nombre de la variable, en este caso se llama EXISTE, que utilizaremos para validar si el país existe y por último el tipo de dato, en este caso INT

set existe = (select count(*) from paises where codigopais = codigo);

Para asignar valor a la variable se utiliza la palabra reservada SET y le signaremos el valor que resulte de la consulta, como ven esa consulta me cuenta cuantos registros existen con ese código de país.

if existe =0

then
select existe;

insert into paises (codigopais, nombre, bandera, fecha_creacion, continente)
values (codigo, nombre, bandera, now(), continente);

Una vez que tenemos la cuenta de los países, utilizaremos la función IF para tomar alguna decisión, en este caso, si no existe o sea que la cuenta es = a 0, THEN (entonces) mostrará es 0 (esto es solo para comproar) e insertará los valores que le pasamos para insertar el país

else

SELECT 'Pais ya existe, se actualizarán los datos';
UPDATE paises set nombre = nombre, bandera=bandera where codigopais=codigo;

END if;
end$$

Si la cuenta de los países no es = a 0 quiere decir que ya existe ese país, por lo tanto, vamos a mostrar la leyenda "País ya existe, se actualizarán los datos", y después actualizar el registro, después terminamos el IF con END IF y a su vez terminamos el procedimiento almacenado con la palabra END, con el doble signo de pesos ($$)

Ahora que tenemos el procedimiento almacenado, lo vamos a ejecutar y a probar, recuerden que para mandar llamar a un procedimiento almacenado se hace uso de la instrucción Call, así q lo mandaremos llamar de esa forma.

call insertapaises ('PRU', 'PAIS DE PRUEBA', 'prueba.png', 'America')

Al momento de ejecutar el procedimiento almacenado, se inserta un nuevo país, como vemos en la imagen:


Si volvemos a ejecutar el procedimiento almacenado insertando nuevamente el código PRU, pero con otro nombre, automáticamente hará el UPDATE, tal como se lo programamos en el procedimiento.

call insertapaises ('PRU', 'PAIS DE PRUEBA-2', 'prueba.png', 'America');

Ahora haremos la consulta para ver como quedó:


Hasta aquí el post queridos lectores, no quiero abrumarlos con tanta información, así que vendrá una tercera parte del tema de procedimientos almacenados, espero haya sido de su utilidad y su agrado.

Les pido compartan, den +1, comenten o den un clic en algún anuncio. Muchas gracias

Banderas de Visitantes

Flag Counter