procedimientos almacenados
DESCRIPTION
Esta es mi presentación sobre los stored procedures - Bases de Datos Avanzadas, ITLATRANSCRIPT
Instituto Tecnológico de Las Américas
StoredProcedures (SP)
Bases de Datos Avanzadas
Prof. Quinta Ana Pérez
Luis José Rodríguez (2009-0529)
Qué son?
Son un conjunto de procedimientos almacenadosfísicamente en una base de datos (de ahí su nombre).Estos pueden ser llamados por una aplicaciónexterna, un trigger u otro storedprocedure.
Implementación
La implementación de un SP varía de un SGBD a otro.La mayoría lo soportan de alguna forma.Dependiendo del SGBD, los SP pueden serimplementados por varios lenguajes deprogramación, tales como SQL, Java, C y C++.
ImplementaciónLa creciente adopción de los SP llevó a la introducción deelementos procedurales en el propio estándar SQL. La mayoríade los sistemas de bases de datos ofrecen extensionespropietarias, extendiendo así las funcionalidades de SQL.
Usos
En algunos sistemas se usan para controlar el manejo delas transacciones.
Los SP pueden ser invocados por un trigger. Por ejemplo,un SP puede ser disparado por un INSERT en una tablaespecífica, o un UPDATE en un campo, y el código del SP seejecutaría automáticamente.
También pueden ser usados para el control de gestión deoperaciones, y ejecutar procedimientos almacenadosdentro de una transacción de tal manera que lastransacciones sean efectivamente transparentes paraellos.
VentajasEl servidor de la base de datos tiene acceso directo a los datos necesarios para manipular y sólo necesita enviar el resultado final al usuario.
Los procedimientos almacenados pueden permitir que la lógica delnegocio se encuentre como un API en la base de datos, que puedensimplificar la gestión de datos y reducir la necesidad de codificar la lógicaen el resto de los programas cliente. Esto puede reducir la probabilidad deque los datos sean corrompidos por el uso de programas clientesdefectuosos o erróneos.De este modo, el motor de base de datos puedeasegurar la integridad de los datos y la consistencia, con la ayuda deprocedimientos almacenados.
Aumentan el rendimiento. Una vez creados, son compilados y almacenados en el catálogo de la base de datos. Corren más rápido que comandos SQL enviados desde aplicaciones externas, ya que estos no están compilados.
Ventajas
Reducen el tráfico entre las aplicaciones y el servidor de basesde datos porque en vez de enviar varios comandos SQL sincompilar, la aplicación sólo tiene que enviar el nombre del SP yobtener el resultado de su ejecución.
Sonreusables y transparentes a cualquier aplicación que loquiera usar. Los SP exponen la interfaz de la base de datos atodas las aplicaciones, por lo que los desarrolladores no tienenque programar funciones que ya están soportadas en losmismos.
Son seguros. Los DBA pueden dar permiso a x aplicación paraque pueda acceder a y SP en el catálogo de la base de datos, sintener que darle permiso de acceso a la tabla.
Desventajas
Los Stored procedures son “definidos una vez, usados muchas”. Si senecesita modificarlo, su definición tiene que ser reemplazadatotalmente.
Cualquier cambio instantáneamente afecta todas las otras piezas desoftware, reportes, etc. (dentro o fuera del DBMS) que directa oindirectamente se refieran a este. No es siempre posible determinarcon exactitud qué magnitud tendrá este cambio, ni que cambiospueden hacerse para corregir lo antes mencionado sin afectar otracosa.
Por varias razones, muchas organizaciones limitan estrictamentequiénes pueden hacer consultas a la base de datos. Los programadoresy otros usuarios no tienen más opción que implementar solucionesineficientes a sus problemas usando los SP que estén disponibles… sinimportar o no que estos sean apropiados para la tarea.
Desventajas
Hacen que la base de datos sea más pesada tanto para lamemoria como para el procesador. En vez de estar concentradoen almacenar y devolver datos, uno puede estarle pidiendo alSGBD que realice varias operaciones lógicas, la cual no es sufunción.
Sólo contienen SQL declarativo, así que es muy dificultosoescribir procedimientos complejos para negocios como en otroslenguajes de programación en la capa de aplicación tales comoJava, C#,C++…
Algunos SGBD modernos (notablemente Microsoft SQL Server2000 en adelante) no ofrecen ninguna ventaja de desempeñousando SP: son compilados y almacenados en caché de la mismaforma dynamic SQL.
SQL Server
CREATE PROC [ EDURE ] [ owner. ] procedure_name [ ; number ]
[ { @parameter data_type }[ VARYING ] [ = default ] [
OUTPUT ] ] [ ,...n ]
[ WITH { RECOMPILE | ENCRYPTION |
RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ]
CREATE PROCEDUREautos
@velocidadint, @marcavarchar(50)
BEGIN
IF velocidad < 120 THEN
INSERT INTO familiares VALUES (velocidad, marca);
ELSE INSERT INTO deportivos VALUES (velocidad, marca);
END IF;
END;
MySQLCREATE [DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name([proc_parameter[,...]]) [characteristic ...] routine_body CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name([func_parameter[,...]]) RETURNS type[characteristic ...] routine_bodyproc_parameter: [ IN | OUT | INOUT ] param_nametypefunc_parameter: param_nametypetype: Any valid MySQL data typecharacteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement
CREATE PROCEDURE autos(IN velocidad int,IN marca varchar(50))
BEGIN
IF velocidad < 120 then
INSERT INTO familiares VALUES(velocidad,marca);
ELSE INSERT INTO deportivos VALUES(velocidad,marca);
END IF;
END;
OracleCREATE OR REPLACE PROCEDURE autos
IS
velocidad NUMBER(3), marca VARCHAR(50)
BEGIN
IF velocidad < 120 THEN
INSERT INTO familiares VALUES (velocidad, marca);
ELSE INSERT INTO deportivos VALUES (velocidad, marca);
END IF;
END;