Está en la página 1de 6

Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426

Bases de Datos II Sección: “A” sábado: 07:00 a 09:00

Disparadores en Oracle

1.1 Cree las tablas correspondientes

CREATE TABLE CERVEZAS (


NOMBRE VARCHAR2(100) NOT NULL ENABLE,
FABRICANTE VARCHAR2(100));

ALTER TABLE CERVEZAS ADD CONSTRAINT "CERVEZA_PK1" PRIMARY KEY


("NOMBRE") ENABLE;

CREATE TABLE PRECIOS (


BAR NUMBER,
CERVEZA VARCHAR2(100),
PRECIO NUMBER(10,2));

ALTER TABLE PRECIOS ADD CONSTRAINT "CERVEZAS_FK1" FOREIGN KEY


("CERVEZA") REFERENCES CERVEZAS ("NOMBRE") ENABLE;

1.2 Inserte datos de prueba:

INSERT INTO CERVEZAS VALUES ('GALLO','CENTROAMERICANA');


INSERT INTO CERVEZAS VALUES ('ICE','CENTROAMERICANA');
INSERT INTO CERVEZAS VALUES ('BRAHVA','BRASIL');

INSERT INTO PRECIOS VALUES ('1','GALLO','8.50');


INSERT INTO PRECIOS VALUES ('2','ICE','5');
Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426
Bases de Datos II Sección: “A” sábado: 07:00 a 09:00

SELECT * FROM CERVEZAS;


SELECT * FROM PRECIOS;

1.3 Cree un disparador que asegure que cualquier cerveza añadida a la lista de
precios figure ya en la lista de cervezas. Para ello, en caso de que la cerveza no
aparezca, añadirá una nueva entrada a la lista dejando el fabricante a NULL.

CREATE OR REPLACE TRIGGER INSERTCERVEZA


BEFORE INSERT ON PRECIOS
FOR EACH ROW
DECLARE
NOMB VARCHAR2(100);
BEGIN
SELECT NOMBRE INTO NOMB FROM CERVEZAS WHERE NOMBRE=:NEW.CERVEZA;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO CERVEZAS VALUES (:NEW.CERVEZA,NULL);
WHEN OTHERS THEN
raise_application_error (-20096,'Error al ingresar registro.');
END INSERTCERVEZA;

Prueba 1.3
Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426
Bases de Datos II Sección: “A” sábado: 07:00 a 09:00

INSERT INTO PRECIOS VALUES ('3','MODELO','10.50');

SELECT * FROM CERVEZAS;


SELECT * FROM PRECIOS;

Dada la siguiente tabla:

CREATE TABLE SUPER_PRECIOS (


BAR NUMBER,
CERVEZA VARCHAR2(100),
PRECIO NUMBER(10,2),
FECHA DATE);

1.4 Defina un disparador para guardar en la tabla correspondiente (SUPER_PRECIOS)


una lista de aquellos bares que suban el precio de alguna de sus cervezas en un
precio superior a 1€, así como la marca de la cerveza, el nuevo precio asignado y la
fecha en la que se realizó la actualización.

CREATE OR REPLACE TRIGGER CAMBPRECIO


AFTER UPDATE ON PRECIOS
FOR EACH ROW
DECLARE
VALOR NUMBER(10,2);
BEGIN
VALOR:=:OLD.PRECIO+1;
IF :NEW.PRECIO>VALOR THEN
INSERT INTO SUPER_PRECIOS
VALUES(:OLD.BAR,:OLD.CERVEZA,:NEW.PRECIO,SYSDATE);
END IF;
END CAMBPRECIO;
Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426
Bases de Datos II Sección: “A” sábado: 07:00 a 09:00

Prueba 1.4

UPDATE PRECIOS SET PRECIO=15 WHERE PRECIO<10;

UPDATE PRECIOS SET PRECIO=25 WHERE PRECIO>10;

UPDATE PRECIOS SET PRECIO=26 WHERE CERVEZA='GALLO';


Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426
Bases de Datos II Sección: “A” sábado: 07:00 a 09:00

1.5 Cree una vista con la siguiente estructura

CREATE TABLE CLIENTES (


NOMBRE VARCHAR2(100) NOT NULL,
BAR NUMBER
);
ALTER TABLE CLIENTES ADD CONSTRAINT "CLIENTE_PK1" PRIMARY KEY
("NOMBRE") ENABLE;
ALTER TABLE CLIENTES ADD CONSTRAINT "CLIENTE_FK1" FOREIGN KEY ("BAR")
REFERENCES PRECIOS ("BAR") ENABLE;

CREATE TABLE GUSTOS (


NOMBRE_CLIENTE VARCHAR2(100),
CERVEZA VARCHAR2(100)
);
ALTER TABLE GUSTOS ADD CONSTRAINT "GUSTOS_FK1" FOREIGN KEY
("NOMBRE_CLIENTE") REFERENCES CLIENTES ("NOMBRE") ENABLE;
ALTER TABLE GUSTOS ADD CONSTRAINT "GUSTOS_FK2" FOREIGN KEY
("CERVEZA") REFERENCES CERVEZAS ("NOMBRE") ENABLE;

INSERT INTO CLIENTES VALUES ('JUAN','1');


INSERT INTO CLIENTES VALUES ('PEDRO','2');

INSERT INTO GUSTOS VALUES ('JUAN','GALLO');


INSERT INTO GUSTOS VALUES ('PEDRO','MODELO');

CREATE VIEW COCKTAIL_PERFECTO AS


SELECT CL.NOMBRE, CL.BAR, G.CERVEZA
Nombre: Jorge Alfredo Monzón Gudiel Carné: 5990-14-426
Bases de Datos II Sección: “A” sábado: 07:00 a 09:00
FROM CLIENTES CL
JOIN GUSTOS G
ON (CL.NOMBRE = G.NOMBRE_CLIENTE);

SELECT * FROM COCKTAIL_PERFECTO;

También podría gustarte