lunes, 3 de noviembre de 2014

Una de Triggers


Crear un trigger sobre la tabla productos, para que antes de insertar un
producto, comprueba que el precio unitario del producto insertado no sea
ni negativo ni superior a 1000.  (use sentencia condicional)

delimiter $$
create trigger precio_Venta before insert  on Productos
for each row
begin
if new.PrecioVenta <0  then
set new.PrecioVenta=0;
elseif new.PrecioVenta >1000 then
set new.PrecioVenta=1000;
end if;
end; $$


Controlar que cuando se inserte un nuevo producto, la cantidad en stock
sea siempre 10, independientemente del valor introducido en la inserción.

delimiter $$
create trigger ejercicio_7 before insert
on productos for each row
begin
set
new.CantidadEnStock=10;
end; $$





Controlar que cuando en la tabla Pedidos se cambie el valor del campo
Estado a ‘Entregado’, la fecha de Entrega sea mayor o igual que la fecha
del pedido. En caso de no serlo obligar a que sea igual. (use sentencia
condicional).
Delimiter $$
create trigger ejercicio_8 before update
on pedidos for each row
begin
if new.Estado="Entregado" then
if new.FechaEntrega < new.FechaEntrega then
set new.FechaEntrega=new.FechaPedido;
end if;
end if;
end; $$
Añadir una columna ‘TotalLinea’ a la tabla DetallePedidos:
ALTER TABLE `jardineria`.`detallepedidos`
ADD COLUMN `totalLinea` DECIMAL(10,2) NULL DEFAULT 0 AFTER
`NumeroLinea`;
Debe controlar que cada vez que se haga cualquier operación en la tabla
DetallePedidos (INSERT, UPDATE, DELETE), y sólo cuando cambien los
valores de las columnas Cantidad y PrecioUnidad se actualice el campo
nuevo TotalLinea y sea igual a Cantidad * PrecioUnidad.
Update
delimiter $$
create trigger ejercicio_10 before update
on detallepedidos for each row
begin

if new.Cantidad<>old.Cantidad ||
new.PrecioUnidad<>old.PrecioUnidad then
set new.totallinea=new.Cantidad * new.PrecioUnidad;

end if    end; $$
Insert
delimiter $$
create trigger ejercicio_10_insertar before insert
on detallepedidos for each row
begin
if new.Cantidad>0 ||
new.PrecioUnidad>0 then
set new.totallinea=new.Cantidad * new.PrecioUnidad;
end if;
end; $$
delete


Se desea almacenar en una tabla la deuda que tiene cada cliente con la
empresa. Tenga en cuenta las siguientes consideraciones:
a. La tabla Pagos almacena los pagos YA realizados.
b. Los pedidos en estado Entregado son los que se tienen en
cuenta cuando quiere calcularse la deuda contraída.

create TABLE Deuda
 ( CodigoCliente int(11) not null,pendiente_de_pago decimal(10.2),
Primary Key (CodigoCliente));

alter TABLE Deuda
add constraint deuda1
foreign key (CodigoCliente)
references clientes(CodigoCliente)
on delete restrict
on update cascade;

delimiter $$

create trigger ejercicio_11 after update on pedidos
for each row

begin
declare importe decimal (10.2);

if new.Estado="Entregado" then

select sum(Cantidad * PrecioUnidad)
into importe
from detallepedidos
where CodigoPedido=new.CodigoPedido;

update deuda

set pendiente_de_pago=pendiente_de_pago + importe

where CodigoCliente=new.CodigoCliente;

end if;

end; $$