Sunteți pe pagina 1din 37

15/03/2018

Procedimientos Almacenados (PA) – 1 –


(Stored Procedure )

P Antes de imprimir, asegúrese de que sea necesario. El medio ambiente está


en nuestras manos

BD

Que es un PA?
2

 Un Procedimiento Almacenado es un
programa escrito en lenguaje del SMBD

 Son almacenados como parte de la Base


de Datos y sus metadatos

1
15/03/2018

Que es un PA?
3

Los procedimientos almacenados pueden


recibir parámetros de entrada y retornar
valores a la aplicación

Ventajas
4

 Diseño modular.

 Aplicaciones que acceden la misma Base de


Datos pueden compartir los procedimientos
almacenados, eliminando el código doble y
reduciendo el tamaño de las aplicaciones

 El fácil mantenimiento

2
15/03/2018

Ventajas
5

 Cuando un procedimiento se actualiza, los


cambios se reflejan automáticamente en
todas las aplicaciones, sin la necesidad de
recompilar

 Los procedimientos almacenados son


ejecutados por el servidor, no por el
cliente lo que reduce el tráfico en la red y
mejora desempeño, especialmente para el
acceso del cliente remoto

Ventajas
6

 Están almacenados en los servidores y


asegurados por las medidas tomadas en
la instalación, lo que impide que los
usuarios normales puedan modificarlos e
incluso desconocen su existencia

3
15/03/2018

Rendimiento
7

 Cada vez que un comando SQL, o conjunto


de comandos, es enviado el servidor para
su procesamiento, el servidor debe
determinar si el remitente tiene suficientes
privilegios para ejecutar esos comandos y si
los comandos son válidos

 Una vez que los permisos y la sintaxis de


los comandos se han verificado, el servidor
construye un plan de ejecución para
procesar el requerimiento

Rendimiento
8

 Los procedimientos almacenados son más


eficientes en parte porque el procedimiento
es almacenado en el SMBD cuando se crea

 La sintaxis de los comandos contenidos en


un procedimiento almacenado se
comprueba que este libre de errores antes
de ser guardado

4
15/03/2018

Rendimiento
9

 El nombre del procedimiento almacenado se


almacena en las tablas del D.D

 Invocar al procedimiento almacenado


implica ejecutar un solo comando en vez de
cientos de comandos que un procedimiento
almacenado podría contener

Rendimiento
10

 La primera vez que se ejecuta el


procedimiento, se crea un plan de ejecución
y se compila al procedimiento almacenado

 Los procesamientos subsecuentes del


procedimiento almacenado son mucho más
rápidos ya que el SMBD no vuelve a
controlar la sintaxis, ni recrea un plan de
ejecución, ni se recompila el procedimiento

5
15/03/2018

Marco de programación
11

 Una vez que se crea un procedimiento


almacenado, puede ser llamado todas las
veces que sea necesario

 Esta capacidad provee modulación y


habilita la reutilización del código

Marco de programación
12

 La reutilización del código mejora el


mantenimiento de la base de datos al
aislar la base de datos de los cambios en
las prácticas del negocio

 Si las reglas de negocios cambian en una


organización, se puede modificar a los
procedimientos almacenados para cumplir
con las nuevas reglas de negocio.

6
15/03/2018

Marco de programación
13

 Todas las aplicaciones que llaman a esos


procedimientos almacenados cumplirán
con la nuevas reglas, sin tener que ser
directamente modificados

Seguridad
14

 Otro capacidad importante de los


procedimientos almacenados es que
mejoran la seguridad a través de la
encriptación y el aislamiento

 Los usuarios de las bases de datos pueden


tener permisos de ejecutar un
procedimiento almacenado sin tenerlos para
acceder directamente a los objetos de la
bases de datos sobre las que opera el
procedimiento almacenado.

7
15/03/2018

Seguridad
15

 Además un procedimiento almacenado


puede ser encriptado cuando se lo crea o
modifica inhabilitando a los usuarios a leer
los comandos SQL contenidos en el
procedimiento almacenado

 Esta capacidad de seguridad permite aislar


la estructura de la base de datos del usuario
de la base de datos, con la consiguiente
ganancia en seguridad

Categorías de PA’s
16

Una tipología de los PA es la siguiente:

 Procedimientos almacenados del sistema,


 Procedimientos almacenados locales,
 Procedimientos almacenados temporales,
 Procedimientos almacenados extendidos y
 Procedimientos almacenados remotos.

8
15/03/2018

PA’s del sistema


17

Por ejemplo del SMBD SQL Sever , se


pueden ver los privilegios de una tabla usando
el procedimiento almacenado de catálogo :

sp_table_privileges
https://stackoverflow.com/questions/73
3349/list-of-stored-procedures-
functions-mysql-command-line

PA’s del sistema


18

El comando siguiente utiliza un procedimiento


almacenado para mostrar los privilegios de la
tabla stores en la base de datos Pubs en el
SMBD Sql server:

USE Pubs
GO
EXECUTE sp_table_privileges Stores

9
15/03/2018

PA’s locales
19

 Los procedimientos almacenados locales


son usualmente almacenados en una base
de datos y están típicamente diseñados
para completar tareas en la base de datos
donde residen

 Un procedimiento almacenado local se


podría crear también para personalizar
código de los procedimientos almacenados
del sistema

PA’s locales
20

Para crear una tarea personalizada basada


sobre un procedimiento almacenado del
sistema, primero copie el contenido del
procedimiento almacenado del sistema y
guarde el nuevo procedimiento almacenado
y guarde el nuevo procedimiento
almacenado como un procedimiento
almacenado local y modifique lo que le
interese

10
15/03/2018

PA’s temporales
21

Un procedimiento almacenado temporal en


algunos SMBD es similar a un procedimiento
almacenado local, pero existe sólo hasta que
se cierre la conexión que lo creó o se dé de
baja el SMBD

PA’s extendidos
22

Un procedimiento almacenado extendido usa


un programa externo, compilado como una
libreria externa ( por ejemplo DLL), para
expandir las capacidades de un procedimiento
almacenado

11
15/03/2018

Como se guarda un
procedimiento
23

Cuando se crea un procedimiento, el SMBD


checa la sintaxis de los comandos SQL que
incluye. Si la sintaxis es incorrecta, el SMBD
generará un mensaje de error , y el
procedimiento no será creado

Procedimientos almacenados en
MySQL

12
15/03/2018

Requerimientos
25

 Contar con la versión 5.0 de MySQL o superior


 Comprobación de versión:

mysql> select version();


+-----------+
| version() |
+-----------+
| 5.0.18 |
+-----------+
1 row in set (0.20 sec)

Sintaxis
26

Para crear o eliminar un procedimiento


almacenado, se emplean las sentencias

 CREATE PROCEDURE

 DROP PROCEDURE

13
15/03/2018

Sintaxis CREATE PROCEDURE


27

CREATE

[DEFINER = { user | CURRENT_USER }]


PROCEDURE nombre_sp ([proc_parametros[,...]])
[caracteristicas...] cuerpo_procedimiento

 Consultar articulo al respecto en:

http://www.w3resource.com/mysql/mysql-
procedure.php

Sintaxis DROP PROCEDURE


28

DROP {PROCEDURE | FUNCTION} [IF


EXISTS] sp_name;

14
15/03/2018

PA – Usando Begin y End


29

Los procedimientos almacenados pueden


contener varios comandos, usando :

BEGIN ... END .


BEGIN
[lista_de_sentencias]
END

Sintaxis para la sentencia


compuesta Begin … End
30

Cambiar el delimitador de final de consulta ;


end-of-query (por ejemplo, al simbolo //)

Mysql> delimiter //
Mysql> select * from película //

15
15/03/2018

31 Ejercicio: Crear un PA

Ejercicio preliminar : crear un PA en Mysql


32

 Crear la base de datos sobre la que va actuar el


procedimiento almacenado
 Crear las tablas donde se realizarán las
operaciones y llenarlas con registros
 Declarar el procedimiento almacenado
 Llamar con el comando call al procedimiento

16
15/03/2018

Ejemplo 1 de procedimiento
almacenado Paso 1
33

 Crear la base de Datos:

mysql> create database dbprueba;


Query OK, 1 row affected (0.08 sec)

mysql> use dbprueba;


Database changed

Ejemplo 1 de procedimiento
almacenado Paso 2
34

Crear las tablas

mysql> create table t (c1 int);


Query OK, 0 rows affected (0.22 sec)

mysql> insert into t (c1) values (20);


Query OK, 1 row affected (0.06 sec)

17
15/03/2018

Ejemplo 1 de procedimiento
almacenado Paso 3
35

Declarar el procedimiento almacenado:

mysql> CREATE PROCEDURE p1 ()


SELECT * FROM t;
Query OK, 0 rows affected (0.00 sec)

Ejemplo 1 de procedimiento
almacenado Paso 4
36

Llamar con el comando call al procedimiento:

mysql> call p1();


+------+
| c1 |
+------+
|1 |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

18
15/03/2018

Ejemplo de procedimientos almacenados


con parámetros de entrada
37

Crear procedimiento

mysql> CREATE PROCEDURE p2(IN p INT)


SET @x = p;

mysql> CALL p2(12345);

mysql> SELECT @x;


+-------+
| @x |
+-------+
| 12345 |
+-------+
1 row in set (0.00 sec)

Ejemplo de procedimientos almacenados


con parámetros de salida
38

mysql> CREATE PROCEDURE p3 (OUT p INT)


SET p = -5 ;
mysql> CALL p3(@y);
mysql> SELECT @y;
+------+
| @y |
+------+
| -5 |
+------+

19
15/03/2018

Ejemplo de procedimientos almacenados


con sentencias compuestas
39

mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END;
//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

mysql> CALL simpleproc(@a);


Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;


+------+
| @a |
+------+
|1 |
+------+

PA: El paso de parámetros

20
15/03/2018

PA: El Paso de Parámetros


41

1. CREATE PROCEDURE sp_name () ...

2. CREATE PROCEDURE sp_name ([IN]


param_name type)...

3. CREATE PROCEDURE sp_name ([OUT]


param_name type)...

4. CREATE PROCEDURE sp_name ([INOUT]


param_name type)...

PA: Usando parametros de entrada IN


42

En el siguiente procedimiento se utiliza un

parámetro IN 'var1' (tipo entero),

que acepta un número de usuario. Dentro del cuerpo


del procedimiento esta sentencia SELECT que
recuperar filas de la tabla "puestos de trabajo“ (jobs).
El número de filas será suministrado por el usuario.

21
15/03/2018

PA: Usando parametros de entrada IN


43

-- REf: uso de LIMIT


http://www.w3schools.com/sql/sql_top.asp

PA: Usando parametros de entrada IN


44

 Ahora ejecutamos procedimiento para recuperar 5 tuplas

22
15/03/2018

PA: Usando parametros de entrada OUT

45

El siguiente ejemplo muestra un procedimiento


almacenado que usa un parámetro de salida OUT.

Dentro del procedimiento de MySQL, la función MAX


() recupera el salario máximo de MAX_SALARY de la
tabla JOBS

-- Uso de MAX()
http://jjmojicamysql.blogspot.mx/2012/04/34-
funciones-de-agrupamiento-count-max.html

PA: Usando parametros de entrada


OUT
46

Delimiter //
use hr
drop procedure if exists procedure_out;

CREATE PROCEDURE procedure_out (OUT


SueldoMasAlto INT)
BEGIN
SELECT MAX(MAX_SALARY) INTO
SueldoMasAlto FROM JOBS;
END //

23
15/03/2018

PA: Usando parametros de entrada OUT


47

Ejecutamos el procedimiento y obtendrá el salario


más alto de la columna MAX_SALARY. Aquì
SueldoMasAlto es el nombre del parámetro de salida
y pasa su valor a una variable de sesión llamada
miVariable M, en la sentencia CALL.

PA: Usando parámetros de entrada y salida INOUT

48

El siguiente ejemplo muestra un procedimiento


almacenado que usa un parámetro INOUT y un
parámetro IN. El usuario deberá suministrar el nombre
de la ciudad en el parámetro IN para contar el número
de empleados de esa ciudad. El parámetro INOUT
(CuantosSon) devolverá el resultado al usuario en la
variable que se especifique.

-- Uso de count()
http://mysql.conclase.net/curso/?sqlfun=COUNT

24
15/03/2018

PA: Usando parámetros de entrada y salida INOUT

49

Mostramos la estructura de nuestra VISTA solo


para verificar….

PA: Usando parametros de entrada y


salida INOUT
50

Creamos el PA

25
15/03/2018

PA: Usando parametros de entrada y salida INOUT


51

Ejecutamos el procedimiento y contará los empleados para las


ciudades que le indiquemos

Ciclos y condicionales en procedimientos


52 almacenados de MySQL

26
15/03/2018

Ciclos y condicionales
53

Variables:

Para declarar una variable la definimos


con DEFINE y la inicializamos con SET:

 DEFINE varprueba INT; #definimos la


variable y su tipo
 SET varpruebra = 10; #le damos un valor
concordante con el tipo

Ciclos y condicionales
54

IF THEN ELSE:

El condicional simple IF que tenemos en la


mayoría de los lenguajes de programación,
que puede ser complementado o no con
un ELSE para el caso de que no se cumpla.
La sintaxis es IFcondición THEN (el ELSE si
hace falta) END IF. ver un ejemplo:

27
15/03/2018

Ciclos y condicionales: IF
55

delimiter //
Drop procedure if exists pa_ejemploif;
create procedure pa_ejemploif(in p1 int) /* Parámetro de entrada */
begin
declare miVar int; /* se declara variable local */
set miVar = p1 +1 ; /* se establece la variable */
if miVar = 12 then
insert into tablaejemplo values(12);
else
insert into tablaejemplo values(0);
end if;
end;
//

delimiter ;

Ciclos y condicionales: IF
56

-- COMPARACIÓN DE CADENAS
-- La función strcmp devuelve 0 si las cadenas son iguales, si no devuelve 0 es
que son diferentes.

delimiter //
Drop procedure if exists pa_compara;
create procedure pa_compara(in cadena varchar(50), in cadena2 varchar(50))
begin
if strcmp(cadena, cadena2) = 0 then
select "son iguales!";
else
select "son diferentes!!";
end if;
end;
//
Delimiter ;

28
15/03/2018

Ciclos y condicionales: case


57

delimiter //
Drop procedure if exists pa_ejemplocase;
create procedure pa_ejemplocase (in p1 int)
begin
declare var int ;
set var = p1 +2 ;
case var
when 2 then insert into tablaejemplo values (2);
when 3 then insert into tablaejemplo values (3);
else insert into tablaejemplo values (9);
end case;
end;
//
Delimiter ;

Ciclos y condicionales: case


58

En el procedimiento siguiente pasamos la


variable Sueldo a través de parámetro IN.
Dentro del procedimiento hay instrucción
CASE junto con dos Where y un ELSE que
pondrá a prueba la condición y devolver el
valor de la variable nu_empleados a la que
nosostros especifiquemos.

29
15/03/2018

Ciclos y condicionales: case


59

Creamos el PA ejemplo case en la base de datos hr

4/11/2015 5:59 AM

Ciclos y condicionales: case


60

Número de
empleados cuyo
salario superior a
10000

Número de
empleados cuyo
salario es inferior a
10000

Número de
empleados cuyo
salario es igual a
10000

30
15/03/2018

Ciclos y condicionales: While


61

Drop procedure if exists pa_ejemplowhile;


delimiter //
create procedure pa_ejemplowhile()
begin
declare v int;
set v = 0;
while v < 10 do
insert into tablaejemplo values (v);
set v = v +1 ;
end while;
end;
//
Delimiter ;

Ciclos y condicionales: repeat


62

-- USO DEL REPEAT

Drop procedure if exists pa_ejemplorepeat;


delimiter //
create procedure pa_ejemplorepeat()
begin
declare v int;
set v = 11375;
repeat
insert into tablaejemplo values(v);
set v = v + 1;
until v >= 11381
end repeat;
end;
//
delimiter ;

31
15/03/2018

Práctica del uso de procedimientos


63
almacenados

Objetivo
64

Crear dos tablas relacionadas con


estudiantes y su situación escolar y
desarrollar procedimientos almacenados
que nos permitan insertar, actualizar,
eliminar y consultar datos de los
estudiantes

32
15/03/2018

Creamos la BD
65

-- Creamos la BD escolar

drop database if exists bdescolar;


create schema bdescolar;
use bdescolar;

CREATE TABLE student (


id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
score DOUBLE NOT NULL,
PRIMARY KEY(id) );

CREATE TABLE student_status (


ss_id INT NOT NULL AUTO_INCREMENT,
student_id INT NOT NULL,
status enum('pass','fail'),
PRIMARY KEY(ss_id) );

Insertamos registros
66

4/11/2015 5:59 AM

33
15/03/2018

Procedimiento Almacenado para


recuperar todos los estudiantes
67

4/11/2015 5:59 AM

Procedimiento almacenado para eliminar un registro

68

34
15/03/2018

PA para contar el número de estudiantes


usando SELECT .. INTO

69

PA para consultar a los estudiantes que tiene una calificación


entre un rango de valores especificado

70

35
15/03/2018

PA para actualizar un registro y desplegar la


nueva información

71

Referencias de consulta o relacionadas


72

 CREATE PROCEDURE and CREATE


FUNCTION Syntax
 SHOW PROCEDURE STATUS
 LINQ,OQL and Native SQL
 Defining Stored Programs y uso del
delimiter
 Procedimientos almacenados extendidos

36
15/03/2018

73

15/03/2018

37

S-ar putea să vă placă și