SQL - Algunos Temas Bases de Datos Laboratorio de SQL Vistas ● Son relaciones pero de las cuales sólo almacenamos su definición, no su conjunto de filas CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ] <view_attribute> ::= { [ ENCRYPTION ] [ SCHEMABINDING ][ VIEW_METADATA ]} Vistas CREATE VIEW [dbo].[titleview] AS select title, au_ord, au_lname, price, ytd_sales, pub_id from authors, titles, titleauthor where authors.au_id = titleauthor.au_id AND titles.title_id = titleauthor.title_id Vistas Materializadas - indizada (SQL-Server) ● Vistas Materializadas (indizada en SQL Server) ○ 1 Índice cluster CREATE VIEW [dbo].[employeeview] WITH SCHEMABINDING AS SELECT dbo.employee.emp_id, dbo.employee.fname, dbo. employee.lname, dbo.jobs.job_desc FROM dbo.employee INNER JOIN dbo.jobs ON dbo.employee.job_id = dbo.jobs.job_id CREATE UNIQUE CLUSTERED INDEX idx_employeeview ON employeeview(emp_id) Triggers - SQL Server ● Código almacenado en la DB que se ejecuta ante ciertos eventos. ○ ○ Evento: activa el trigger Acción: código que se ejecuta si se dispara el trigger CREATE TRIGGER nombre_trigger ON { tabla|vista } [ WITH ENCRYPTION ] { AFTER | INSTEAD OF }{ INSERT, UPDATE, DELETE } [ NOT FOR REPLICATION ] AS Triggers - SQL SERVER Usan dos tablas con la misma estructura que la que desencadenó el trigger: ● ● ● ● ● inserted (Insert y Update) deleted (Delete y Update) Función Update(campo) es verdadera si se actualizó ese campo. Rollback Transaction (anula la transacción completa) Pueden ejecutarse bloques IF o IF ELSE enmarcados en BEGIN y END. triggers - Ejemplo CREATE TABLE emp_audit ( emp_audit_id integer, up_date DATE, new_sal decimal, old_sal decimal); CREATE TRIGGER [dbo].[audit_sal] ON [dbo].[empleados] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE(salario) -- Sólo si se actualiza salario BEGIN INSERT INTO emp_audit(emp_audit_id,up_date, new_sal, old_sal) SELECT i.ecod, getdate(),i.salario, d.salario FROM Inserted i INNER JOIN Deleted d ON i.ecod = d.ecod END END División en SQL División en SQL Stored Procedures ● ● ● ● ● ● ● Es una porción de código, que se almacena en el catálogo de la base de datos y se puede invocar mediante una sentencia SQL. Se ejecuta en el servidor de base de datos. Reduce el número de idas y vueltas entre aplicaciones y el servidor de base de datos. Encapsulan reglas de negocio fuertemente relacionadas con los datos de la BD y sin interacción con el usuario. No es obligatorio que estén escritos en SQL (Java, PL/SQL, PL/pgSQL, Transact SQL) ○ SQLServer 2008: Transact SQL o CLR. Cada RDBMS tiene su propio lenguaje de Stored Procedure, los cuales incluyen sentencias de control, manejo de variables, etc. Los stored Procedures, tienen un nombre, reciben parámetros y pueden devolver resultados. Permite reutilizar código entre diversas aplicaciones. Stored Procedures ● ● ● ● Velocidad de desarrollo más lenta. Requiere habilidades especiales. Es dificultoso manejar versiones y es más complejo depurar. Puede no ser portable entre diferentes sistemas de bases de datos. SQL Server - Stored Procedures SQL Server -Stored Procedures Parámetro de entrada SQL Server -Stored Procedures Parámetro de salida