Sei sulla pagina 1di 7

Procedimientos almacenados

Un procedimiento almacenado es un segmento de declaraciones SQL declarativas


almacenadas dentro del catlogo de bases de datos. Un procedimiento
almacenado puede ser invocado por los factores desencadenantes, otros
procedimientos almacenados y aplicaciones como Java, Python, PHP, etc.

Los procedimientos almacenados y funciones son nuevas caractersticas de la


versin 5.0 de MySQL. Un procedimiento almacenado es un conjunto de
comandos SQL que pueden guardarse en el servidor. Una vez que se hace, los
clientes no necesitan relanzar los comandos individuales, teniendo solamente que
referirse ahora al procedimiento almacenado.

Algunas situaciones en que los procedimientos almacenados pueden ser


particularmente tiles:

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 registra apropiadamente. En tal entorno,
las aplicaciones y los usuarios no obtendran ningn acceso directo a las
tablas de la base de datos, slo podran ejecutar algunos procedimientos.

Los procedimientos almacenados pueden mejorar el rendimiento ya que se


necesita enviar menos informacin entre el servidor y el cliente. Adems, son
ptimos para tareas que se ejecutan con una cierta frecuencia, ya que se
recompilan en el servidor la primera vez, y ya no hay que volver a hacerlo.

Cuando se ejecutan consultas individuales, cada una debe ser recopilada y


procesada (Lo cual, requiere ms tiempo). Sin embargo, a pesar del ahorro en
tiempo que se obtienen con los procedimientos almacenados, debemos tener
cuidado con su uso.

Un entorno con un servidor y varios clientes que ejecuten muchos procedimientos


almacenados, aumentar la carga del servidor de la base de datos ya que la
mayora del trabajo se realiza en la parte del mismo y no en el cliente.

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.

Desde MySQL 5.0.1, los procedimientos almacenados o funciones se asocian con


una base de datos. Esto tiene varias implicaciones:

Cuando se invoca la rutina, se realiza implcitamente USE db name (y se


deshace cuando acaba la rutina). Los comandos USE dentro de
procedimientos almacenados no se permiten.

Esto puede usarse para referirse a una rutina que no est en la base de
datos actual. Por ejemplo, para invocar procedimientos almacenados p o
funciones f asociadas a la base de datos test, puede decir CALL test.p() o
test.f().
Cuando se borra una base de datos, todos los procedimientos almacenados
asociados con ella tambin se borran.

MySQL soporta la extensin muy til que permite el uso de comandos regulares
SELECT (esto es, sin usar cursores o variables locales) dentro de los
procedimientos almacenados. El conjunto de resultados de estas consultas se
enva directamente al cliente. Comandos SELECT mltiples generan varios
conjuntos de resultados, as que el cliente debe usar una biblioteca cliente de
MySQL que soporte conjuntos de resultados mltiples.

Ventajas de los procedimientos almacenados de MySQL

Normalmente, los procedimientos almacenados ayudan a aumentar el


rendimiento de las aplicaciones. Una vez creados, los procedimientos
almacenados se compilan y se almacenan en la base de datos. Sin
embargo, MySQL implementa los procedimientos almacenados ligeramente
diferentes. Los procedimientos almacenados de MySQL se compilan bajo
demanda.
Los procedimientos almacenados ayudan a reducir el trfico entre la
aplicacin y el servidor de base de datos porque en lugar de enviar varias
sentencias SQL largas, la aplicacin tiene que enviar slo nombre y
parmetros del procedimiento almacenado.
Los procedimientos almacenados son reutilizables y transparentes para
cualquier aplicacin. Los procedimientos almacenados exponen la interfaz
de la base de datos a todas las aplicaciones para que los desarrolladores
no tengan que desarrollar funciones que ya estn soportadas en
procedimientos almacenados.
Los procedimientos almacenados son seguros. El administrador de bases
de datos puede conceder permisos adecuados a las aplicaciones que
acceden a procedimientos almacenados en la base de datos sin conceder
permisos sobre las tablas de base de datos subyacentes.

Desventajas de los procedimientos almacenados de MySQL

Si utiliza una gran cantidad de procedimientos almacenados, el uso de


memoria de cada conexin que utiliza estos procedimientos almacenados
aumentar sustancialmente. Adems, si sobre utiliza un gran nmero de
operaciones lgicas dentro de procedimientos de almacn, el uso de CPU
tambin aumentar porque el servidor de base de datos no est bien
diseado para operaciones lgicas.
Las construcciones de procedimientos almacenados dificultan el desarrollo
de procedimientos almacenados que tienen una lgica de negocio
complicada.
Es difcil depurar procedimientos almacenados. Slo unos pocos sistemas
de gestin de bases de datos permiten depurar procedimientos
almacenados. Desafortunadamente, MySQL no proporciona facilidades
para depurar procedimientos almacenados.
No es fcil desarrollar y mantener procedimientos almacenados.
Desarrollar y mantener procedimientos almacenados a menudo se requiere
un conjunto de habilidades especializadas que no todos los desarrolladores
de aplicaciones poseen.

Disparadores
A partir de MySQL 5.0.2 se incorpor el soporte bsico para disparadores
(triggers).

Un disparador es un objeto con nombre dentro de una base de datos, el cual se


asocia con una tabla y se activa cuando ocurre en esta un evento en particular.
Por ejemplo, las siguientes sentencias crean una tabla y un disparador para
sentencias INSERT dentro de la tabla. El disparador suma los valores insertados
en una de las columnas de la tabla:

mysql> CREATE TABLE account (acct num INT, amount DECIMAL(10,2)); mysql>
CREATE TRIGGER ins sum BEFORE INSERT ON account -> FOR EACH ROW
SET @sum = @sum + NEW.amount;

Creacin de disparadores

CREATE TRIGGER nombre disp momento disp evento disp ON nombre tabla
FOR EACH ROW sentencia disp
El disparador queda asociado a la tabla nombre tabla. Esta debe ser una tabla
permanente, no puede ser una tabla TEMPORARY ni una vista.

Momento disp es el momento en que el disparador entra en accin. Puede ser


BEFORE (antes) o AFTER (despus), para indicar que el disparador se ejecute
antes o despus que la sentencia que lo activa.

Evento disp indica la clase de sentencia que activa al disparador. Puede ser
INSERT, UPDATE, o DELETE. Por ejemplo, un disparador BEFORE para
sentencias INSERT podra utilizarse para validar los valores a insertar.

No puede haber dos disparadores en una misma tabla que correspondan al mismo
momento y sentencia. Por ejemplo, no se pueden tener dos disparadores
BEFORE UPDATE. Pero s es posible tener los disparadores BEFORE UPDATE y
BEFORE INSERT o BEFORE UPDATE y AFTER UPDATE.

Borrado de disparadores

DROP TRIGGER [nombre esquema.]nombre disp

Elimina un disparador. El nombre de esquema es opcional. Si el esquema se


omite, el disparador se elimina en el esquema actual.

Anteriormente a la versin 5.0.10 de MySQL, se requera el nombre de tabla en


lugar del nombre de esquema. (nom tabla.nom disp).

Nota: cuando se actualice desde una versin anterior de MySQL 5 a MySQL


5.0.10 o superior, se deben eliminar todos los disparadores antes de actualizar y
volver a crearlos despus, o DROP TRIGGER no funcionar luego de la
actualizacin.

La sentencia DROP TRIGGER necesita que se posea el privilegio SUPER, que se


introdujo en MySQL 5.0.2.

Uso de disparadores

El soporte para disparadores se incluy a partir de MySQL 5.0.2. Actualmente, el


soporte para disparadores es bsico, por lo tanto hay ciertas limitaciones en lo que
puede hacerse con ellos. Esta seccin trata sobre el uso de los disparadores y las
limitaciones vigentes.

Un disparador es un objeto de base de datos con nombre que se asocia a una


tabla, y se activa cuando ocurre un evento en particular para la tabla. Algunos

clculos sobre valores involucrados en una actualizacin.

sentencia INSERT, DELETE, o UPDATE sobre dicha tabla. Puede tambin


establecerse que se active antes o despus de la sentencia en cuestin. Por
ejemplo, se puede tener un disparador que se active antes de que un registro sea
borrado, o despus de que sea actualizado.

Tambin hay limitaciones sobre lo que puede aparecer dentro de la sentencia que
el disparador ejecutar al activarse:

El disparador no puede referirse a tablas directamente por su nombre,


incluyendo la misma tabla a la que est asociado. Sin embargo, se pueden

existente que va a borrarse o que va a actualizarse antes de que esto

El disparador no puede invocar procedimientos almacenados utilizando la


sentencia CALL. (Esto si
procedimiento almacenado para eludir la prohibicin de referirse a tablas
por su nombre).

transaccin, tal como START TRANSACTION, COMMIT, o ROLLBACK.


MAPA CONCEPTUAL
Sql Procedural en Mysql

Potrebbero piacerti anche