Este documento describe los procedimientos almacenados (SP) en bases de datos. Explica que los SP son conjuntos de procedimientos almacenados físicamente en la base de datos que pueden ser llamados por aplicaciones externas o triggers. También detalla sus ventajas como el aumento de rendimiento y seguridad, y sus desventajas como la dificultad de modificarlos y limitar el acceso de los usuarios. Además, incluye ejemplos de sintaxis para crear SP en SQL Server, MySQL y Oracle.
Hernandez_Hernandez_Practica web de la sesion 11.pptx
SP usos ventajas
1. Instituto Tecnológico de Las Américas StoredProcedures (SP) Bases de Datos Avanzadas Prof. Quinta Ana Pérez Luis José Rodríguez (2009-0529)
2. Qué son? Son un conjunto de procedimientos almacenados físicamente en una base de datos (de ahí su nombre). Estos pueden ser llamados por una aplicación externa, un trigger u otro storedprocedure.
3. 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 ser implementados por varios lenguajes de programación, tales como SQL, Java, C y C++.
4. Implementación La creciente adopción de los SP llevó a la introducción de elementos procedurales en el propio estándar SQL. La mayoría de los sistemas de bases de datos ofrecen extensiones propietarias, extendiendo así las funcionalidades de SQL.
5. Usos En algunos sistemas se usan para controlar el manejo de las transacciones. Los SP pueden ser invocados por un trigger. Por ejemplo, un SP puede ser disparado por un INSERT en una tabla específica, o un UPDATE en un campo, y el código del SP se ejecutaría automáticamente. También pueden ser usados para el control de gestión de operaciones, y ejecutar procedimientos almacenados dentro de una transacción de tal manera que las transacciones sean efectivamente transparentes para ellos.
6. Ventajas El 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 del negocio se encuentre como un API en la base de datos, que pueden simplificar la gestión de datos y reducir la necesidad de codificar la lógica en el resto de los programas cliente. Esto puede reducir la probabilidad de que los datos sean corrompidos por el uso de programas clientes defectuosos o erróneos.De este modo, el motor de base de datos puede asegurar la integridad de los datos y la consistencia, con la ayuda de procedimientos 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.
7. Ventajas Reducen el tráfico entre las aplicaciones y el servidor de bases de datos porque en vez de enviar varios comandos SQL sin compilar, la aplicación sólo tiene que enviar el nombre del SP y obtener el resultado de su ejecución. Sonreusables y transparentes a cualquier aplicación que lo quiera usar. Los SP exponen la interfaz de la base de datos a todas las aplicaciones, por lo que los desarrolladores no tienen que programar funciones que ya están soportadas en los mismos. Son seguros. Los DBA pueden dar permiso a x aplicación para que pueda acceder a y SP en el catálogo de la base de datos, sin tener que darle permiso de acceso a la tabla.
8. Desventajas Los Stored procedures son “definidos una vez, usados muchas”. Si se necesita modificarlo, su definición tiene que ser reemplazada totalmente. Cualquier cambio instantáneamente afecta todas las otras piezas de software, reportes, etc. (dentro o fuera del DBMS) que directa o indirectamente se refieran a este. No es siempre posible determinar con exactitud qué magnitud tendrá este cambio, ni que cambios pueden hacerse para corregir lo antes mencionado sin afectar otra cosa. Por varias razones, muchas organizaciones limitan estrictamente quiénes pueden hacer consultas a la base de datos. Los programadores y otros usuarios no tienen más opción que implementar soluciones ineficientes a sus problemas usando los SP que estén disponibles… sin importar o no que estos sean apropiados para la tarea.
9. Desventajas Hacen que la base de datos sea más pesada tanto para la memoria como para el procesador. En vez de estar concentrado en almacenar y devolver datos, uno puede estarle pidiendo al SGBD que realice varias operaciones lógicas, la cual no es su función. Sólo contienen SQL declarativo, así que es muy dificultoso escribir procedimientos complejos para negocios como en otros lenguajes de programación en la capa de aplicación tales como Java, C#,C++… Algunos SGBD modernos (notablemente Microsoft SQL Server 2000 en adelante) no ofrecen ninguna ventaja de desempeño usando SP: son compilados y almacenados en caché de la misma forma dynamic SQL.
10. SQL Server 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; 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 ]
11. MySQL CREATE [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;
12. Oracle CREATE 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;