You are on page 1of 15

Documento elaborado por:

M.E. Gabriela Aguilar Ortiz


Un stored procedure es una coleccin de
sentencias del Transact-SQL las cuales
organizadas lgicamente resuelven algunas
de las operaciones transaccionales que
requieren los usuarios, estos procedimientos
se almacenan en la base de datos.
Los procedimientos almacenados soportan
el empleo de variables declaradas por el
usuario, sentencias para toma de decisiones
entre otras caractersticas.
PROCEDIMIENTOS ALMACENADOS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Procedimientos del sistema, son los que se encuentran
almacenados en la base de datos master y algunas en las
bases de datos de usuario, estos procedimientos
almacenados brindan informacin acerca de los datos y
caractersticas del servidor.
Procedimientos locales, son los procedimientos
almacenados en una base de datos.
Procedimientos temporales, son procedimientos locales,
dependiendo si se desea que sea un procedimiento global a
todas las conexiones o local a la conexin que lo define.
Procedimientos remotos, son procedimientos almacenados
en servidores distribuidos.
TIPOS DE PROCEDIMIENTOS ALMACENADOS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Aceptar parmetros de entrada y devolver varios
valores en forma de parmetros de salida al lote o al
procedimiento que realiza la llamada.
Contener instrucciones de programacin que realicen
operaciones en la base de datos, incluidas las
llamadas a otros procedimientos.
Devolver un valor de estado que indica si la operacin
se ha realizado correctamente o habido un error (y el
motivo del mismo).
PRINCIPALES CARACTERSTICAS.
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Permiten una ejecucin ms rpida, ya que los
procedimientos son analizados y optimizados en el
momento de su creacin, y es posible utilizar una
versin del procedimiento que se encuentra en la
memoria despus de que se ejecute por primera vez.
Pueden reducir el trfico de red.
Pueden utilizarse como mecanismo de seguridad, ya
que se puede conceder permisos a los usuarios para
ejecutar un procedimiento almacenado, incluso si no
cuentan con permiso para ejecutar directamente las
instrucciones del procedimiento.
PRINCIPALES CARACTERSTICAS.
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Cuando mltiples aplicaciones cliente se escriben en
distintos lenguajes o funcionan en distintas
plataformas, pero necesitan realizar la misma
operacin en la base de datos.
Cuando la seguridad es muy importante. Los bancos,
por ejemplo, usan procedimientos almacenados para
todas las operaciones comunes. Esto proporciona un
entorno seguro y consistente, y los procedimientos
pueden asegurar que cada operacin se loguea
apropiadamente. En tal entorno, las aplicaciones y los
usuarios no obtendran ningn acceso directo a las
tablas de la base de datos, slo pueden ejectuar
algunos procedimientos almacenados.
UTILIDAD DE LOS PROCEDIMIENTOS
ALMACENADOS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Los procedimientos almacenados pueden mejorar el
rendimiento ya que se necesita enviar menos
informacin entre el servidor y el cliente. El
intercambio que hay es que aumenta la carga del
servidor de la base de datos ya que la mayora del
trabajo se realiza en la parte del servidor y no en el
cliente.
UTILIDAD DE LOS PROCEDIMIENTOS
ALMACENADOS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Los procedimientos almacenados y rutinas se crean
con comandos CREATE PROCEDURE y CREATE
FUNCTION .
Una rutina es un procedimiento o una funcin. Un
procedimiento se invoca usando un comando CALL, y
slo puede pasar valores usando variables de salida.
Una funcin puede llamarse desde dentro de un
comando como cualquier otra funcin (esto es,
invocando el nombre de la funcin), y puede retornar
un valor escalar. Las rutinas almacenadas pueden
llamar otras rutinas almacenadas.
SINTAXIS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
Los procedimientos almacenados requieren la
tabla proc en la base de datos mysql. Esta
tabla se crea durante la instalacin de MySQL.
Las funciones almacenadas requieren la tabla
func en la base de datos mysql. Esta tabla se
crea durante la instalacin de MySQL.
PROCEDIMIENTOS ALMACENADOS
Y LA TABLA DE PERMISOS
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
CREATE PROCEDURE sp_name ([parameter[,...]])
[characteristic ...] routine_body
parameter:
[ IN | OUT | INOUT ] param_name type
type: Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body: procedimientos almacenados o comandos
SQL vlidos
PROCEDIMIENTOS
mysql> DELIMITER |
mysql> CREATE PROCEDURE proc1 (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM entidades;
-> END
-> DELIMITER |
Query OK, 0 rows affected (0.37 sec)
mysql> CALL proc1(@a);
-> DELIMITER |
Query OK, 0 rows affected (1.90 sec)
mysql> SELECT @a;
-> DELIMITER |
+------+
| @a |
+------+
| 32 |
+------+
1 row in set (0.00 sec)
mysql> DELIMITER |
mysql> CREATE PROCEDURE hdemo()
-> BEGIN
-> DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2
= 1;
-> SET @x = 1;
-> INSERT INTO entidades (id_entidad) VALUES(00);
-> SET @x = 2;
-> INSERT INTO entidades (id_entidad) VALUES(99);
-> SET @x = 3;
-> END;
-> DELIMITER |
Query OK, 0 rows affected (0.09 sec)
mysql> CALL hdemo();
-> DELIMITER |
mysql> SELECT @X;
+------+
| @X |
+------+
| 3 |
+------+
mysql> DELIMITER |
mysql> CREATE PROCEDURE proc_repite(param1 INT)
-> BEGIN
-> SET @x = 0;
-> REPEAT SET @x = @x + 1:
-> UNTIL @x > param1
-> END REPEAT;
-> END
-> END;
-> DELIMITER |
Query OK, 0 rows affected (0.06 sec)
mysql> CALL proc_repite(1000);
-> DELIMITER |
mysql> SELECT @x;
+------+
| @x |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)
Documento elaborado por:
M.E. Gabriela Aguilar Ortiz
CREATE FUNCTION sp_name ([parameter[,...]])
RETURNS type
[characteristic ...] routine_body
parameter:
[ IN | OUT | INOUT ] param_name type
type: Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA |
MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body: procedimientos almacenados o comandos SQL
vlidos
FUNCIONES
mysql> DELIMITER |
mysql> CREATE FUNCTION funcion_p1(cadena TEXT) RETURNS INT
-> BEGIN
-> IF SUBSTRING(cadena,3,1) = A THEN RETURN 1; ELSE RETURN 0;
-> END IF;
-> END
-> DELIMITER |
Query OK, 0 rows affected (0.05 sec)
mysql> SELECT funcion_p1(XXXAAADDD);
-> DELIMITER |;
+------------------------+
| funcion_p1(XXXAAADDD)|
+------------------------+
| 0 |
+------------------------+
1 row in set (0.00 sec)
mysql> SELECT funcion_p1(XXaAAADDD);
-> DELIMITER |;
+------------------------+
| funcion_p1(XXaAAADDD)|
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)