Nombre: Jorge Alfredo Monzón Gudiel Bases de Datos II
“
”
Sección: A
Carné: 5990-14-426 sábado: 07:00 a 09:00
Disparadores en Oracle 1.1 Cree las tablas corr espondi entes CREATE TABLE CERVEZAS ( NOMBRE VARCHAR2(100) NOT NULL ENABLE, FABRICANTE VARCHAR2(100)); ALTER TABLE CERVEZAS CERVEZAS ADD CONSTRAINT CONSTRAINT "CERVEZA_PK1" "CERVEZA_PK1" PRIMARY KEY ("NOMBRE") ENABLE; CREATE TABLE PRECIOS ( BAR NUMBER, CERVEZA VARCHAR2(100), PRECIO NUMBER(10,2)); ALTER TABLE PRECIOS ADD CONSTRAINT CONSTRAINT "CERVEZAS_FK1" "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 Bases de Datos II
“
”
Sección: A
Carné: 5990-14-426 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 li sta dejando el fabri cante 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 Bases de Datos II
“
”
Sección: A
Carné: 5990-14-426 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 dis parador p ara guardar en la tabla c orr espond iente (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 actuali zació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 VALUES(:OLD.BAR,:OLD.CERVEZA,:NEW.PRECIO,SYSDATE); END IF; END CAMBPRECIO;
SUPER_PRECIOS
Nombre: Jorge Alfredo Monzón Gudiel Bases de Datos II
“
”
Sección: A
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';
Carné: 5990-14-426 sábado: 07:00 a 09:00
Nombre: Jorge Alfredo Monzón Gudiel Bases de Datos II
“
”
Sección: A
Carné: 5990-14-426 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 Bases de Datos II
“
”
Sección: A
FROM CLIENTES CL JOIN GUSTOS G ON (CL.NOMBRE = G.NOMBRE_CLIENTE);
SELECT * FROM COCKTAIL_PERFECTO;
Carné: 5990-14-426 sábado: 07:00 a 09:00