Sei sulla pagina 1di 27

Administración de Sistemas Gestores de Bases de Datos

Índice
 Rutinas almacenadas (SR) and Lenguaje de Programas
Almacenados (SPL)

 Inspeccionando las rutinas almacenadas

I.E.S. Dos Mares 2


Rutinas Almacenadas
 Cuando múltiples aplicaciones cliente se escriben en distintos
lenguajes o funcionan en distintas plataformas, pero necesitan realizar
la misma operación en la base de datos.

 Cuando la seguridad es muy importante. Los bancos, por ejemplo,


usan procedimientos almacenados para todas las oparaciones
comunes. Esto proporciona un entorno seguro y consistente, y los
procedimientos pueden asegurar que cada operación se loguea
apropiadamente. En tal entorno, las aplicaciones y los usuarios no
obtendrían ningún acceso directo a las tablas de la base de datos, sólo
pueden ejectuar algunos procedimientos almacenados.

I.E.S. Dos Mares 3


Rutinas Almacenadas
 Conjunto de sentencias disponibles para las
aplicaciones que acceden a un RDBMS.

 Almacenados en el Gestor de la Bases de Datos.

 En MySQL , se escriben usando SPL basado en un


subconjunto del estandar Módulo de Almacenamiento
Persistente del ANSI SQL:2003 (PSM).

I.E.S. Dos Mares 4


Rutinas Almacenadas
 Tiene un nombre

 Puede tener una lista de parámetros

 Puede contener un conjunto de sentencias SQL.

 Se crean utilizando el comando CREATE.

I.E.S. Dos Mares 5


Rutinas Almacenadas
 Por defecto, se crea en la base de datos actual. Si
queremos crearla en una BD distinta, deberemos
hacer preceder el nombre de la BD de destino.

 El delimitador de línea de comando por defecto (;)


necesita ser cambiado a la hora de codificar rutinas
almacenadas.

I.E.S. Dos Mares 6


Rutinas Almacenadas
 DELIMITER //

 CREATE PROCEDURE `DBName.AddData`(err VARCHAR(255))

 BEGIN

 …………

 END;

 //

 DELIMITER ;

I.E.S. Dos Mares 7


Rutinas Almacenadas
 Cuando se invocan, se realiza un USE DBName implícito (y se
deshace cuando la rutina termina). La sentencia USE no está
permitida dentro de las SRs.

 Cuando se borra una DB, todas las SR almacenadas en él, se


borran también.

 MySQL soporta 3 tipos de rutinas:

1. Procedimientos Almacenados (SP),

2. Funciones Almacenadas (SF),

3. Triggers o Disparadores.

I.E.S. Dos Mares 8


Procedimientos Almacenados
 Son llamados utilizando el comando explícito CALL.

 No devuelven un valor de manera explícita.

CREATE PROCEDURE `DBName.AddData`(err


VARCHAR(255))
…..
CALL AddData(“…”);

I.E.S. Dos Mares 9


Procedimientos Almacenados
 Conjunto de sentencias SQL que pueden ser
almacenados en el servidor.

 Una vez creados, los clientes pueden referirse al


procedimiento almacenado en lugar de ejecutar las
sentencias individuales.

 Ninguno de los 3 tipos de parámetros son requeridos


en un SP.

I.E.S. Dos Mares 10


Procedimientos Almacenados
 Aunque no tenga parámetros, hay que finalizar la
definición de la cabecera con ().

 No obstante, un SP sin parámetros, puede ser


invocado sin utilizar los paréntesis.

 Se le invoca utilizando el comando CALL.

 Un SP puede mostrar resultados o devolver los


resultados en las variables OUTPUT especificadas.

I.E.S. Dos Mares 11


Tipos de parámetros
 IN.

 Es el parámetro por defecto. Puede cambiar su valor dentro de la


rutina, pero, permanece inalterable su valor externo.

 OUT.

 En el momento de la llamada, su valor es NULL, pero, puede ser


modificado dentro de la rutina y dicho valor estará disponible en el
exterior de la rutina.

 INOUT.

 Se comporta como una combinación de los 2 anteriores. Se le puede


asignar un valor en la llamada, que puede ser modificado en el interior
y estar disponible en el exterior.

I.E.S. Dos Mares 12


Procedimientos Almacenados
CREATE PROCEDURE how_is_it (IN x INT)

BEGIN

IF (x > 5) THEN

SELECT CONCAT(x, " is higher") as answer;

ELSE

SELECT CONCAT(x, " is lower") as answer;

END IF;

END
I.E.S. Dos Mares 13
Procedimientos Almacenados
CALL how_is_it(6);
+-------------+
| answer |
+-------------+
| 6 is higher |
+-------------+

CALL how_is_it(2);
+-------------+
| answer |
+-------------+
| 2 is lower |
+-------------+

I.E.S. Dos Mares 14


Funciones Almacenadas
 Pueden ser usadas como funciones definidas por el
usuario.

 Se invocan utilizando su nombre.

 Puede devolver un valor, que puede ser usado en otra


sentencia SQL, de la misma forma que se invocan a
otras funciones como REPLACE, CONCAT(), etc.
CREATE FUNCTION AddData()
RETURNS ……..
SELECT AddData();
I.E.S. Dos Mares 15
Funciones Almacenadas
 Una SF no puede mostrar resultados.

 Una SF se crea utilizando el comando CREATE .

 Los parámetros de entrada (IN) no son requeridos en una


SF.

 Una SF debe tener una sentencia RETURN y sólo puede


devolver un valor.

I.E.S. Dos Mares 16


Funciones Almacenadas

 Una SF es llamada simplemente con su nombre (sin


usar CALL).

 El nombre de una SF debe ser diferente a la de


cualquier función SQL.

I.E.S. Dos Mares 17


Funciones Almacenadas
CREATE FUNCTION is_bigger (x INT)
RETURNS CHAR(3)
BEGIN
IF (x > 5) THEN
RETURN 'YES';
ELSE
RETURN 'NO';
END IF;
END
I.E.S. Dos Mares 18
Variables
DECLARE edad INT;

SET edad=36;

I.E.S. Dos Mares 19


IF THEN ELSE
delimiter //
CREATE procedure miProc(IN p1 int)
begin
declare miVar int;
SET miVar = p1 +1 ;
IF miVar = 12 then
INSERT INTO lista VALUES(55555);
else
INSERT INTO lista VALUES(7665);
end IF;
end;
//
I.E.S. Dos Mares 20
SWITCH
delimiter //
CREATE procedure miProc (IN p1 int)
begin
declare var int ;
SET var = p1 +2 ;
case var
when 2 then INSERT INTO lista VALUES (66666);
when 3 then INSERT INTO lista VALUES (4545665);
else INSERT INTO lista VALUES (77777777);
end case;
end;
//
I.E.S. Dos Mares 21
COMPARACION DE CADENAS
delimiter //
CREATE procedure compara(IN cadena varchar(25),
IN cadena2 varchar(25))
begin
IF strcmp(cadena, cadena2) = 0 then
SELECT "son iguales!";
else
SELECT "son diferentes!!";
end IF;
end;
//

I.E.S. Dos Mares 22


LOOP
DELIMITER //
CREATE FUNCTION CalcIncome ( starting_value INT )
RETURNS INT
BEGIN
DECLARE income INT;
SET income = 0;
label1: LOOP
SET income = income + starting_value;
IF income < 4000 THEN
ITERATE label1;
END IF;
LEAVE label1;
END LOOP label1;
RETURN income;
END;
//
I.E.S. Dos Mares 23
WHILE
delimiter //
CREATE procedure p14()
begin
declare v int;
SET v = 0;
while v < 5 do
INSERT INTO lista VALUES (v);
SET v = v +1 ;
end while;
end;
//

I.E.S. Dos Mares 24


REPEAT
delimiter //
CREATE procedure p15()
begin
declare v int;
SET v = 20;
repeat
INSERT INTO lista VALUES(v);
SET v = v + 1;
until v <= 1
end repeat;
end;
//
I.E.S. Dos Mares 25
CURSORES

Un cursor es un objeto que apunta a las filas


retornadas de una consulta. Esta característica
permite manipular los datos de cada fila de forma
individual. MySQL usa la palabra reservada
CURSOR para declarar estos espacios de lectura.

I.E.S. Dos Mares 26


CURSORES
Un cursor es un objeto que apunta a las filas
retornadas de una consulta. Esta característica
permite manipular los datos de cada fila de forma
individual. MySQL usa la palabra reservada
CURSOR para declarar estos espacios de lectura.

Ejemplo

I.E.S. Dos Mares 27

Potrebbero piacerti anche