1. “Año de la consolidación del Mar de Grau”
Escuela Tecnológica Superior.
ETSUNP.
Universidad Nacional de Piura.
Integrantes:
Abad Landacay Amarelis
Fernández Ruesta Fergie Katherine
Hernández Hernández Kathya
Pedemonte Aguirre Celena
Navarro Carmen Raul Alexander
Curso:
Base de Datos II
Docente:
Ing. José Moncada Morales
Tema:
Triggers, Procesos Almacenados, Vistas y Funciones
2. TRIGGER
Un trigger (o disparador) en una Base de datos, es un procedimiento que se ejecuta cuando
se cumple una condición establecida al realizar una operación. Dependiendo de la base de
datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado
(DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar
usuarios, tablas, bases de datos u otros objetos.
Contenido
Usos
Son usados para mejorar la administración de la Base de datos, sin necesidad de contar
con que el usuario ejecute la sentencia de SQL.
Además, pueden generar valores de columnas, previene errores de datos, sincroniza
tablas, modifica valores de una vista, etc.
Permite implementar programas basados en paradigma lógico (sistemas expertos,
deducción).
Componentes principales
La estructura básica de un trigger es:
" Llamada” de activación: es la sentencia que permite "disparar" el código a ejecutar.
" Restricción”: es la condición necesaria para realizar el código. Esta restricción puede ser
de tipo condicional o de tipo nulidad.
" Acción a ejecutar”: es la secuencia de instrucciones a ejecutar una vez que se han
cumplido las condiciones iniciales.
Tipos
Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a
realizar:
" Row Triggers (o Disparadores de fila)”: son aquellas que se ejecutaran n-veces si se llama
n-veces desde la tabla asociada al trigger
" Statement Triggers (o Disparadores de secuencia)”: son aquellos que sin importar la
cantidad de veces que se cumpla con la condición, su ejecución es única.
Pueden ser de sesión y almacenados; pero no son de fiar [cita requerida].
Efectos y características
" No aceptan parámetros o argumentos” (pero podrían almacenar los datos afectados en
tablas temporales).
" No” pueden ejecutar las operaciones COMMIT o ROLLBACK” por que estas son parte de
la sentencia SQL del disparador (únicamente a través de transacciones autónomas)
" Pueden” causar errores de mutaciones en las tablas, si se han escrito de manera
deficiente.
3. COMO CREO UN TRIGGER EN SQL SERVER?
Es sencillo, usaremos el comando CREATE TRIGGER con la siguiente sintaxis:
CREATE TRIGGER nombre_trigger
ON { tabla|vista }
[ WITH ENCRYPTION ]
{ AFTER | INSTEAD OF }{ INSERT, UPDATE, DELETE }
[ NOT FOR REPLICATION ]
AS
Bloque de instrucciones
A continuación veremos la utilidad de cada parte de la definición anterior:
WITH ENCRYPTION:
Encripta el código del Trigger para que no pueda ser interpretado por nadie mas.
AFTER: Indica que el Trigger se ejecutará después de que las operaciones DML se
hayan ejecutado correctamente. Esta clausula no se aplica en las vistas.
INSTEAD OF: Permite ejecutar el Trigger en vez de la operación DML,es decir, SQL
Server ignoradicha operación para ejecutar al Trigger. Ten en cuenta que solo debe
existir un Trigger tipo INSTEAD OF para cada operación DML.
INSERT, UPDATE, DELETE:En este apartado eliges que sentencias DML estará
asociadas a tu Trigger. Puedes realizar la combinación que desees. Ten en cuenta que no
se permite establecer una actualización o eliminación que vaya a ser en cascada.
NOT FOR REPLICATION:
Evita que el Trigger se ejecute cuando una operación de replicación vaya a alterar
nuestra tabla asociada.
Los Triggers INSTEAD OF no son lo mismo que los BEFORE de MySQL. Los primeros
reemplazan una operación DML y los segundos se ejecutan antes de esta, pero no la
reemplazan.
4. EJEMPLO
Crear un trigger que al momento de realizer un venta, disminuya el stock.
CREATE TRIGGER realiza_venta ON dbo.venta
FOR INSERT
AS
BEGIN
DECLARE @producto int, @cantidad int
SET @producto = (SELECT id_produto FROM inserted)
SET @cantidad = (SELECT cantidad FROM inserted)
UPDATE [dbo.producto] set disponible = disponible - @cantidad WHERE
id_produto LIKE @producto
END
PROCESOS ALMACENADOS
Son programas escritos en SQL u en otros lenguajes de programación, que corren sobre el
servidor de bases de datos. Cuando se ejecuta con frecuencia un conjunto de instrucciones
de SQL sobre la base de datos, es conveniente realizar un procedimiento almacenado que
compile a ese conjunto de instrucciones como un solo programa con un nombre, cuando se
necesite ejecutarlo, solamente se llama al programa y se ejecuta. La ventaja comparándolo
con un scriptde SQL es que el PA una vez compilado queda guardado y puede ser utilizado
cuantas veces se requiera sin tener que volver a compilarse ni optimizar la consulta, lo que
lo hace mucho más rápido que si ejecutáramos el script cada vez.
REGISTRAR
6. Vistas
En teoría de bases de datos, una vista es una consulta que se presenta como una tabla
(virtual) a partir de un conjunto de tablas en una base de datos relacional.
Las vistas tienen la misma estructura que una tabla: filas y columnas. La única diferencia
es que sólo se almacena de ellas la definición, no los datos. Los datos que se recuperan
mediante una consulta a una vista se presentarán igual que los de una tabla. De hecho, si
no se sabe que se está trabajando con una vista, nada hace suponer que es así. Al igual
que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos en una
vista. Aunque siempre es posible seleccionar datos de una vista, en algunas condiciones
existen restricciones para realizar el resto de las operaciones sobre vistas.
Una vista se especifica a través de una expresión de consulta (una sentencia SELECT)que
la calcula y que puede realizarse sobre una o más tablas. Sobre un conjunto de tablas
relacionales se puede trabajar con un número cualquiera de vistas.
La mayoría de los SGBD soportan la creación y manipulación de vistas. Las vistas se crean
cuando se necesitan hacer varias sentencias para devolver una tabla final.
Un carácter de escape es un carácter que se coloca delante de un carácter comodín para
indicar que el comodín no debe interpretarse como tal, sino como un carácter normal.
Por ejemplo queremos buscar los nombres compuestos que incluyen un subrayado. En
este caso tenemos que poner el carácter _ como un carácter normal no como un
comodín, así que lo escribiremos así:
SELECT numemp,nombre
FROM empleados
WHERE nombre LIKE '%[_]%';
O bien,
SELECT numemp,nombre
FROM empleados
WHERE nombre LIKE '%!_%' ESCAPE '!';
ejemplo
create database tienda
go
create table cliente(
id_cliente int primary key not null,
nombre varchar (10) not null,
apellidos varchar(20) not null,
telefono varchar (8) not null,
);
7. create table productot(
codigo char(4) not null,
nombrep varchar (10) not null,
fechacreacion date not null,
fechavencimiento date not null,
)
INSERT INTO cliente (id_cliente,nombre, apellidos, telefono)
values('1234 ' ,'enrique ','requena ' , '56784387 ');
INSERT INTO productot(codigo, nombrep,fechacreacion, fechavencimiento)
values('4321 ' ,'ricos ','12/01/2012 ' , '12/12/2013 ');
SELECT *from productot
-- select y vistas --
select telefono ,nombre,id from dbo.cliente
select * from dbo.cliente
select nombre as [ nombre del cliente] telefono as [ telefono del cliente], id as [ id del cliente]
from dbo.cliente
order by [ id del cliente] desc
select * from productot
delete from productot
where nombre = 'f'
CREATE FUNCTION (Transact-SQL)
Otras versiones
Crea una función definida por el usuario en SQL Server y Windows Azure SQL Database.
Una función definida por el usuario es una rutina de Transact-SQL o Common Language
Runtime (CLR) que acepta parámetros, realiza una acción, como un cálculo complejo, y
devuelve el resultado de esa acción como un valor. El valor devuelto puede ser un valor
escalar (único) o una tabla. Utilice esta instrucción para crear una rutina reutilizable que se
pueda utilizar de estas formas:
En instrucciones Transact-SQL como SELECT
En las aplicaciones que llaman a la función
En la definición de otra función definida por el usuario
Para parametrizar una vista o mejorar la funcionalidad de una vista indizada
Para definir una columna en una tabla
Para definir una restricción CHECK en una columna
Para reemplazar un procedimiento almacenado