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