Вы находитесь на странице: 1из 7

Vistas.

Una vista se define en SQL usando la orden CREATE VIEW. Para definir una vista debemos dar a la vista un nombre y declarar la consulta que calcula la vista. Una vez que establecemos una vista, podemos ejecutar una sentencia SELECT que referencie a esa vista. El sistema asociar la vista SQL con una tabla base y extraer y visualizar, entonces, los datos de la tabla base. Esto significa que una vista no contiene datos duplicados de una tabla base. No tiene absolutamente ningn dato, puesto que no es una tabla real, todo el proceso se realiza con los datos almacenados en la tabla base. Es decir se percibe como una tabla virtual. Las ordenes que se utilizan para la manipulacin de vistas son: CREATE VIEW: Crea una tabla virtual. DROP VIEW : Elimina una vista creada anteriormente. La estructura de una vista es: CREATE VIEW Nombre de la vista AS (Expresin de consulta); Como Ejemplo, consideremos de la tabla llamada CURSO, que contiene los siguientes Nombre del campo NumC NombreC DescC Creditos Costo Depto Descripcin Nmero del curso, nico para identificar cada curso Nombre del curso, tambin es nico Descripcin del curso Crditos, nmero de estos que gana al estudiante al cursarlo Costo del curso. Departamento acadmico que ofrece el curso. DescC Creditos Costo Depto

NumC NombreC

A01 Liderazgo Pblico General 10 100.00 Admn. S01 Inteligencia artificial Para ISC y LI 10 90.00 Sistemas. S02 Circuitos Logicos Sistemas E01 Electro I01 Industrial . Ejemplo 1: Crear una vista (tabla virtual), denominada CursosS, que contenga las filas solo correspondientes a cursos ofrecidos por el departamento Sistemas. La vista deber contener todas las columnas de la tabla CURSO, con la excepcin de la columna Depto. La secuencia, de izquierda a derecha de las columnas, deber ser: NombreC, NumC, Creditos, Costo y DescC.

CREATE VIEW CursosS AS SELECT NombreC, NumC, Creditos, Costo, DescC FROM CURSO WHERE DescC=Sistemas; Observemos que despus del nombre de la vista colocamos la sentencia AS, esto para definir la estructura de la vista, la estructura en si de la vista esta formada por la consulta anteriormente vista utilizando la orden SELECT. Ejemplo 2: Crear una vista denominada CursosCaros, correspondientes a las filas de la tabla CURSO, en donde la tarifa exceda de $150. Las columnas de la vista debern tener los nombres ClaveCurso, NombreCurso y CostoCaro. CREATE VIEW CursosSCaros(ClaveCurso, NombreCurso, CostoCaro) As SELECT NumC, NombreC, Costo FROM Curso WHERE Costo > 150; Observamos que despus del nombre de la vista CursosCaros ponemos los nombres que se nos pidieron tuvieran los campos de la vista(ClaveCurso,...), despus se realiza la consulta correspondiente para generar el resultado deseado.

Visualizar las vistas


Creamos una tabla virtual que contiene los datos de las consultas que deseamos, ahora nos falta visualizar estos datos, para ello utilizamos la sentencia SELECT y realizamos la consulta: SELECT * FROM CursosCaros; De esta consulta podemos observar que mostramos todos los campos que la vista contiene, aunque podemos visualizar solo alguno de ellos, tambin observamos que sustituimos el nombre de la vista por el de la tabla junto a la sentencia FROM, esto es por que una vista es una tabla virtual, pero guarda los datos como cualquier tabla normal. Eliminar una vista------- : DROP VIEW CursosCaros;

TRIGGERS
1.1. DEFINICIN
Los triggers son procedimientos almacenados que se disparan cuando se presenta una accin sobre una tabla, como una insercin, una actualizacin o un borrado de registros. En la definicin del trigger, se especifica que acciones desencadenan la ejecucin del trigger.

1.2. OBJETIVO DE LOS TRIGGERS


Validar inserciones, actualizaciones o modificaciones, pero es bien importante mencionar que tales validaciones por pura esttica y coherencia con el lenguaje SQL, no deberan ser validaciones que se puedan hacer directamente en la definicin de la tabla. Por ejemplo validar que una entrada para un campo sea: SI o NO, es algo que debera hacerse directamente en la definicin de la tabla y no se justifica la creacin de un trigger para llevar a cabo dicha tarea, pero bueno, no falta el diseador de bases de datos que hace este tipo de cosas. (Recordemos que las restricciones a nivel de integridad es mejor realizarlas directamente en la definicin de campos de una tabla)

2.3. MENSAJES EN LA INSERCIN


create database continente use continente create table CONTINENTE( --crea la tabla CONTINENTE id int identity(10,2) primary key, nombre nvarchar(50)); create trigger inserta_continente on CONTINENTE for insert as print 'Insertando en tabla CONTINENTE' insert into CONTINENTE values('AFRICA')
Actualizando CONTINENTE (1 row(s) affected)

Con las siguientes sentencias, cumplimente el ejercicio. insert into CONTINENTE values('AFRICA') insert into CONTINENTE values('EUROPA') insert into CONTINENTE values('HACIA') insert into CONTINENTE values('AMERICA') insert into CONTINENTE values('OCEANIA')

2.4. MENSAJES EN LA ACTUALIZACIN


Queremos que cada vez que se intente realizar una actualizacin se muestre un mensaje. Para lograr esto, es necesario crear un trigger similar al siguiente: create trigger actualiza_continente on CONTINENTE for update as print 'Actualizando CONTINENTE' Ahora intente realizar la actualizacin sobre el continente HACIA tal como se muestra a continuacin: update CONTINENTE set nombre = 'ASIA' where id = 14 Actualizando CONTINENTE (1 row(s) affected) Y con las sentencia SELECT *FROM CONTINENTE que observas?

2.5. MENSAJES EN EL BORRADO DE REGISTROS Queremos que cada vez que se intente eliminar un registro de la tabla CONTINENTE, se despliegue un mensaje que muestre el registro borrado(el cual se encuentra en la tabla deleted), despus se muestre la tabla CONTINENTE en la cual se pueda apreciar que ya se ha realizado el borrado de dicho registro.

create trigger elimina_continente on CONTINENTE for delete as if(select count(*) from CONTINENTE, deleted where CONTINENTE.id = deleted.id) = 0 begin print 'Eliminando el(los) CONTINENTE(S)' select * from deleted print 'La tabla CONTINENTE es:' select * from CONTINENTE -- print 'Se deshizo la eliminacin' --rollback transaction -- select * from CONTINENTE end Antes de realizar el borrado, ejecute la sentencia siguiente, para visualizar el contenido de la tabla continente: SELECT *FROM CONTINENTE Ya observaste?...Listo continuemos. Borremos el registro de identificacion 16

delete from CONTINENTE where id = 16 Que observaste? Ahora, reflexione con SELECT *FROM CONTINENTE. Por ltimo, para se deshaga la operacin de borrado y se vuelva a mostrar la tabla CONTINENTE, verifique que efectivamente se deshizo la operacin. Para ello, elimine el trigger elimina_continente y Ejecute nuevamente el trigger, pero habilitando las instrucciones que estan en verde(Quite los dos --), osea: create trigger elimina_continente on CONTINENTE for delete as if(select count(*) from CONTINENTE, deleted where CONTINENTE.id = deleted.id) = 0 begin print 'Eliminando el(los) CONTINENTE(S)' select * from deleted print 'La tabla CONTINENTE es:' select * from CONTINENTE print 'Se deshizo la eliminacin' rollback transaction select * from CONTINENTE end select * from CONTINENTE Que observas? delete from CONTINENTE where id = 14
Que observaste? Ahora, reflexione con SELECT *FROM CONTINENTE.

Para comprender mejor el ejercicio anteriormente mencionado es importante tener en cuenta que cada vez que se borra un registro, dicho registro se pasa a una tabla temporal denominada deleted, con lo cual en dicha tabla podemos consultar los registros que fueron borrados. Tambin es importante notar que la instruccin: rollback Deshace la(s) accion(es) anteriormente ejecutada(s).

transaction

: TRIGGERS DE INSERCIN
3.1. LA TABLA INSERTED
La tabla inserted es una tabla temporal que se crea cuando se insertan datos. Veamos el siguiente script: create table CONTINENTE( --crea la tabla CONTINENTE id int identity(1,1) primary key, nombre nvarchar(50)); insert into CONTINENTE values('AFRICA') insert into CONTINENTE values('EUROPA') insert into CONTINENTE values('HACIA') insert into CONTINENTE values('AMERICA') insert into CONTINENTE values('OCEANIA') insert into CONTINENTE values('RUSIA') Queremos que cada vez que se vaya a realizar una insercin, se le muestre al usuario los datos que se van a insertar y posteriormente se muestra la tabla CONTINENTE con los datos insertados. Para lograr esto, es necesario crear un trigger de insercin similar al siguiente: create trigger inserta_continente on CONTINENTE for insert as begin print "El(los) dato(s) a insertar:" select * from inserted print "La tabla con datos insertados:" select * from CONTINENTE end insert into CONTINENTE values('AMERICA DEL SUR') Que observaste? que resultados se aprecian? Por favor, saque tus propias conclusiones. Observemos, que para mostrar los datos a insertar, simplemente basta con hacer una consulta sobre la tabla inserted, pues como se ha mencionado en este apartado, dicha tabla, contiene los registros que se van a insertar. Posteriormente al hacer la consulta sobre la tabla CONTINENTE, se muestra dicha tabla con el registro insertado, pues dicha tabla fue actualizada con la sentencia ejecutada por el usuario.

INSERCIN CONDICIONAL Primero borremos la tabla CONTINENTE: drop table CONTINENTE. Ahora ejecutemso las siguientes sentencias create table CONTINENTE( --crea la tabla CONTINENTE id int identity(1,1) primary key, nombre nvarchar(50)); insert into CONTINENTE values('AFRICA') insert into CONTINENTE values('EUROPA') insert into CONTINENTE values('HACIA') insert into CONTINENTE values('AMERICA') insert into CONTINENTE values('OCEANIA') insert into CONTINENTE values('RUSIA') Listo, con el nimo de impedir duplicacin de informacin, realicemos a continuacin, un trigger que impida la insercin de nombres de continentes ya existentes. Un trigger con dichas caractersticas es el siguiente: create trigger inserta_continente on CONTINENTE for insert as if (select count(*) from CONTINENTE, inserted where CONTINENTE.nombre like inserted.nombre)=2 begin print 'Ya existe este continente:' select * from inserted print 'Por tanto los datos no se insertaron:' rollback transaction select * from CONTINENTE end Para comprobar que este trigger realiza el trabajo deseado, sencillamente ejecutemos la siguiente instruccin: insert into CONTINENTE values('AMERICA')

ORDEN DE EJECUCIN CON TRIGGERS


El orden en que se ejecutan las sentencias cuando existen trigger asociados a un tipo de consulta es el siguiente:

o 1) Se crean las tablas temporales, 2) Se ejecuta la consulta, 3) Se


ejecuta el trigger y 4) Se borran las tablas temporales.

Prximo tema: IMPIDIENDO VALORES NO EXISTENTES

Вам также может понравиться