clase del 23 de octubre Vistas, transacciones, stored procedures, triggers create view fabricas as select p.descripcion, f.razon_social from producto p, fabricante f where p.codigo_fabricante = f.codigo_fabricante select * from fabrica drop view fabrica select p.descripcion, f.razon_social into aux_fabrica from producto p, fabricante f where p.codigo_fabricante = f.codigo_fabricante select * from aux_fabrica select * from producto update producto set codigo_fabricante = 2 where codigo_producto = 1001 select * from precio_venta into aux_pv select * from pv begin transaction update pv set precio = 15 select * from pv rollback transaction select * from articulo create procedure nuevo_producto (@descripcion varchar(50), @codigo_fabricante int, @precio_costo money) as begin transaction /* insertar nuevo articulo */ insert into producto (descripcion, precio_costo, codigo_fabricante) values (@descripcion, @precio, @codigo_fabricante) if @@error <> 0 begin rollback transaction raiserror 24001 'Fallo la transaccion' return end commit transaction return -- ejecutar el SP exec nuevo_producto @descripcion = 'Mesa cuadrada', @codigo_fabricante = 2, @precio_costo = 10 exec nuevo_producto @descripcion = 'Mesa redonda', @codigo_fabricante = 36, @precio_costo = 15 select * from producto drop procedure nuevo_producto alter table oficina add limite_inf money alter table oficina add limite_sup money alter table empleado add salario money update oficina set limite_inf = 1000, limite_sup = 5000 drop trigger verifica_salario CREATE TRIGGER verifica_salario on empleado FOR INSERT, UPDATE AS DECLARE @min money, @max money, @emp int, @oficina int, @salario money SELECT @min = o.limite_inf, @max = o.limite_sup, @emp = i.codigo_empleado, @oficina = i.codigo_oficina, @salario = i.salario FROM empleado e INNER JOIN inserted i ON e.codigo_empleado = i.codigo_empleado JOIN oficina o ON o.codigo_oficina = i.codigo_oficina PRINT @EMP PRINT @OFICINA IF ((@salario < @min) or (@salario > @max)) BEGIN RAISERROR ('El salario no corresponde al nivel de la oficina', 16, 1, CAST(@MIN AS VARCHAR(10)) ROLLBACK TRANSACTION END