Vous êtes sur la page 1sur 4

CREATE TABLE test1(a1 INT);

CREATE TABLE test2(a2 INT);

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

);

DELIMITER //

CREATE TRIGGER testref BEFORE INSERT ON test1

FOR EACH ROW B

BEGIN

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

END

Practicas de disparadores.

1. Elaborar un disparador que actualice el precio de venta en la tabla VentasProductos

despus de insertar un registro, tome el precio de la tabla Producto.

La base de datos tiene el siguiente esquema.


create database Tienda

use Tienda

go

create table Ventas(

idVentas tinyint,

fecha datetime,

constraint pk_Ventas primary key (idVentas)

);

create table Productos(

idProductos tinyint,

nombre varchar (30),

precio decimal (6,2),

constraint pk_productos primary key (idProductos)

);

create table ventasProductos(

idVentas tinyint,

idProductos tinyint,

cantidad int,

precio decimal(6,2),

constraint fk_Ventas foreign key (idVentas) references ventas(idVentas),

constraint fk_productos foreign key (idProductos) references productos(idProductos)

);

DATOS

insert into Ventas(idVentas, fecha) values (1,20/07/2010)

insert into Ventas(idVentas, fecha) values (2,21/03/2009)


insert into Ventas(idVentas, fecha) values (3,22/04/2005)

insert into Ventas(idVentas, fecha) values (4,30/01/2010)

insert into Ventas(idVentas, fecha) values (5,04/08/2009)

insert into Ventas(idVentas, fecha) values (6,05/01/2006)

insert into Ventas(idVentas, fecha) values (7,07/11/2008)

insert into Ventas(idVentas, fecha) values (8,12/12/2008)

insert into Ventas(idVentas, fecha) values (9,22/08/2009)

insert into Ventas(idVentas, fecha) values (10,25/02/2008)

insert into Productos(idProductos,nombre,precio) values (1,cerillos,12.5)

insert into Productos(idProductos,nombre,precio) values (2,calcetines,3.4)

insert into Productos(idProductos,nombre,precio) values (3,refresco,6.5)

insert into Productos(idProductos,nombre,precio) values (4,sabritas,5)

insert into Productos(idProductos,nombre,precio) values (5,paleta,2.33)

insert into Productos(idProductos,nombre,precio) values (6,gomitas,4.33)

insert into Productos(idProductos,nombre,precio) values (7,lapiz,5.5)

insert into Productos(idProductos,nombre,precio) values (8,sacapunta,9.80)

insert into Productos(idProductos,nombre,precio) values (9,libretas,12.3)

insert into Productos(idProductos,nombre,precio) values (10,calculadora,10)

insert into Productos(idProductos,nombre,precio) values (11,sal,20)

2. Crear una tabla EMPLEADOS.

CREATE TABLE empleados


(dni char(4) PRIMARY KEY, nomemp varchar2(15), mgr char(4), salario integer
DEFAULT 1000, usuario varchar2(15), fecha date );

ALTER TABLE EMP ADD( FOREIGN KEY (mgr) REFERENCES empleados (DNI) );

Crear un trigger sobre la tabla EMP para que no se permita que un empleado sea jefe
(MGR) de ms de cinco empleados.
3. Crear un trigger para impedir que se aumente el salario de un empleado en ms de un
20%. Es necesario comparar los valores :old.salario y :new.salario cada vez que se
modifica el atributo salario (BEFORE UPDATE).

4. Crear una tabla empleados_baja con la siguiente estructura:

CREATE TABLE empleados_baja


(dni char(4) PRIMARY KEY,
nomemp varchar2(15),
mng char(4),
salario integer);

Crear un trigger que inserte una fila en la tabla empleados_baja cuando se borre una
fila en la tabla empleados.
Los datos que se insertan son los correspondientes al empleado que se da de baja en
la tabla empleados.
El comando que dispara el trigger es AFTER DELETE.

Vous aimerez peut-être aussi