Está en la página 1de 5

Practica SQLServer

1. Crear un Trigger que borre en cascada sobre la tabla relacionada cuando borremos una
sala. Mostrar el registro borrado al ejecutar el Trigger.

Copia y pega el siguiente codigo

CREATE TRIGGER BORRARSALA


ON SALA
FOR DELETE
AS
DELETE FROM PLANTILLA FROM SALA, DELETED
WHERE SALA.SALA_COD = DELETED.SALA_COD
SELECT * FROM DELETED

Ahora Elimina la que tiene como Sala_cod=1

Visualiza los resultados.

2. Crear un Trigger que se active cuando Actualicemos alguna sala del hospital, modificando
sus tablas relacionadas. Mostrar el registro Actualizado.
Copia y pega el siguiente código
CREATE TRIGGER MODIFICARSALA
ON SALA
FOR UPDATE
AS
UPDATE PLANTILLA
SET SALA_COD = INSERTED.SALA_COD
FROM PLANTILLA, INSERTED, DELETED
WHERE PLANTILLA.SALA_COD = DELETED.SALA_COD
SELECT * FROM INSERTED

Ahora actualiza algún registro y visualiza los resultados.

3. Crear un Trigger que se active al eliminar un registro en la tabla hospital y modifique las
tablas correspondientes.

Copia y pega el código


CREATE TRIGGER BORRARHOSPITAL ON HOSPITAL
FOR DELETE
AS
DELETE FROM PLANTILLA FROM PLANTILLA,DELETED WHERE
PLANTILLA.HOSPITAL_COD = DELETED.HOSPITAL_COD
DELETE FROM SALA FROM SALA,DELETED WHERE
SALA.HOSPITAL_COD = DELETED.HOSPITAL_COD
DELETE FROM DOCTOR FROM DOCTOR,DELETED WHERE
DOCTOR.HOSPITAL_COD = DELETED.HOSPITAL_COD

Ahora elimina una código de hospital y visualiza los resultados.


Ejercicios:

1. Crear un Trigger para controlar la inserción de empleados, cuando insertemos un


empleado se copiarán datos sobre la inserción en una tabla llamada Bitacora_BD. Los
datos que se copiarán son el Número de empleado, El usuario que está realizando la
operación, la fecha y el tipo de operación.

Practica II
1. Crear la base de datos llamada pedios
2. Crear las siguientes tablas

create table clientes (

id_cliente integer not null Primary key,

nombre varchar(10) not null,

calle varchar(10),

ciudad varchar(10)

);

create table empleados (

id_empleado integer not null primary key,

nombre varchar(10) not null,

calle varchar(10),

ciudad varchar(10)

);

create table productos (

id_producto integer not null primary key,

nombre varchar(10) not null,

existencias integer,

precio integer not null

);
create table pedidos (

id_pedido integer not null primary key,

id_cliente integer, -- se permiten valores nulos para probar el full outer join

id_empleado integer ,

fecha_Pedido date not null,

foreign key (id_cliente) references clientes (id_cliente),

foreign key (id_empleado) references empleados (id_empleado)

);

create table detalles_pedido (

id_detalle_pedido serial not null primary key,

id_pedido integer not null,

id_producto integer not null,

cantidad integer not null,

unique (id_pedido,id_producto),

foreign key (id_pedido) references pedidos(id_pedido),

foreign key (id_producto) references productos(id_producto)

);

create table detalles_pedido_old (

id_pedido integer not null,

id_producto integer not null,

cantidad integer not null,

primary key (id_pedido,id_producto),

foreign key (id_pedido) references pedidos(id_pedido),

foreign key (id_producto) references productos(id_producto)

);
3. Introducir los siguientes registros
INSERT INTO clientes (id_cliente,nombre,calle,ciudad) VALUES
(1,'ALBERTO','ZUDO','GIJON'),
(2,'PACO','JONES','AVILES'),
(3,'PILI','BIDINOSA','MIERES'),
(4,'PEPE','LOTAS','MIERES'),
(5,'RAMON','ERIA','GIJON');

copy empleados (id_empleado,nombre,calle,ciudad) from stdin csv;


"301","EFREN","ETICO","GIJON"
"302","JESUS","PENSO","AVILES"
"303","MARIA","BAJA","MIERES"
"304","ISA","LADA","MIERES"
"305","LUIS","AMAN","MIERES"
"306","BELEN","CERIA","MIERES"

COPY productos (id_producto,nombre,existencias,precio ) from stdin;


201 PATATAS 20 40
202 PERAS 100 110
203 MANZANAS 330 90
204 PLATANOS 1 120
205 NARANJAS 1 130

INSERT INTO pedidos (id_pedido,id_cliente,id_empleado,fecha_pedido)


VALUES (101,1,303,'1-SEP-2006');
INSERT INTO pedidos (id_pedido,id_cliente,id_empleado,fecha_pedido)
VALUES (102,1,303,'2-SEP-2006');
INSERT INTO pedidos (id_pedido,id_cliente,id_empleado,fecha_pedido)
VALUES (103,2,301,'1-SEP-2006');
INSERT INTO pedidos (id_pedido,id_cliente,id_empleado,fecha_pedido)
VALUES (104,4,301,'1-SEP-2006');
INSERT INTO pedidos (id_pedido,id_cliente,id_empleado,fecha_pedido)
VALUES (105,3,302,'1-SEP-2006');
-- Para el siguiente pedido no se conoce el empleado
INSERT INTO pedidos (id_pedido,id_cliente,fecha_pedido)
VALUES (106,3,'1-OCT-2006');

INSERT INTO detalles_pedido (id_pedido,id_producto,cantidad) VALUES (101,201,15),


(101,202,105),
(101,203,170),
(102,201,100),
(102,203,40),
(103,204,31),
(103,201,21),
(104,201,111),
(104,204,15),
(105,201,11);
4. Ejercicios:
a. Crear un Trigger para actualizar el num_produtos cuando se inserta un producto
en detalles_pedido.
b. El siguiente trigger impide que sentencias DROP TABLE y ALTER TABLE a nivel de
Base de Datos
CREATE TRIGGER TR_Seguridad
ON DATABASE FOR DROP_TABLE, ALTER_TABLE
AS
BEGIN
RAISERROR ('No está permitido borrar ni modificar tablas !' , 16, 1)
ROLLBACK TRANSACTION

END

También podría gustarte