Está en la página 1de 10

Implementacin y gestin de base de datos - 2016-02

Gua de ejercicios de laboratorio N 11

Ejercicios (aplique casos de prueba adecuados para sus


programas)
1. Desarrollar un trigger que se active cada vez que se crea, modifica la
definicin o elimina una tabla y registre en una tabla los siguientes datos:
Fecha y hora
Nombre de usuario que ejecut la operacin
Objeto creado, modificado o eliminado
Dueo del objeto
Tipo de objeto

Coloque la lgica para grabar los datos en la tabla de registro en un


procedimiento almacenado.
Solucin
--- Crear la tabla
Create table ddl_table
(Fecha_hora date,
usuario varchar2(100),
Objeto_name varchar2(100),
Owner varchar2(100),
Tipo_objeto varchar2(100),
evento varchar2(100)
);

--- Crear Trigger


CREATE OR REPLACE TRIGGER schema_trigger
BEFORE DDL ON HR.SCHEMA
DECLARE
oper ddl_table.usuario%TYPE;
BEGIN
INSERT INTO ddl_table (Fecha_hora, usuario, Objeto_name, Owner,
Tipo_objeto, evento )
SELECT SYSDATE, USER, ora_dict_obj_name, ora_dict_obj_owner,
ora_dict_obj_type, ora_sysevent
FROM DUAL;
END schema_trigger;

--- Prueba crear tabla


create table daf_table
(
col1 number(2)
);

select * from ddl_table

2. Crear una tabla denominada REGISTRO_PERSONAS, con el siguiente diseo:


Columna
COD_PERSONA
NOM_PERSON
A
FEC_NACIMIEN
TO

Tipo de datos
NUMBER(6)
VARCHAR2(30)

Descripcin
Cdigo de la persona (Primary key)
Nombre de la persona

DATE

Fecha de nacimiento

FEC_REGISTRO

DATE

EDAD

NUMBER(4)

SUELDO
APORTACION

NUMBER(7,2)
NUMBER(7,2)

Fecha en que se registr la fila


(SYSDATE)
Edad en aos cumplidos a la fecha
de registro
Sueldo mensual
Aportacin, es el 11.5% del sueldo

Desarrollar un trigger que, al insertar o actualizar una fila, calcule la edad y la


aportacin.
Solucin
--- Crear Table
create table personass
(
COD_PERSONA NUMBER(6),
NOM_PERSONA VARCHAR2(30),
FEC_NACIMIENTO
DATE,
FEC_REGISTRO DATE,
EDAD
NUMBER(4),
SUELDO NUMBER(7,2),
APORTACION
NUMBER(7,2)
);

--- Crear trigger


CREATE OR REPLACE TRIGGER tr_02
before INSERT OR UPDATE of fec_nacimiento ON PERSONASS
for each row
declare
vedad personass.edad%type:=0;
vapor PERSONAss.aportacion%type;
BEGIN
if inserting then

select round((to_number(to_char(sysdate,'yyyy')) to_number(to_char(:new.fec_nacimiento,'yyyy'))),0) into :new.edad from dual;


:new.sueldo:= 11.5 * :new.sueldo / 100;
end if;
if updating then
null;
end if;
END

Prueba
INSERT INTO registro_personas
(COD_PERSONA, NOM_PERSONA, FEC_NACIMIENTO, FEC_REGISTRO,
SUELDO)
VALUES
(1, 'JOSE', '15/01/2012', SYSDATE, 2000);

SELECT * FROM registro_personas;

3. Crear dos tablas, con la siguiente estructura:


FACTURA
Columna
NUM_FACTURA
FEC_FACTURA
CLIENTE

Tipo de datos
NUMBER(6)
DATE
VARCHAR2(30)

Descripcin
Nmero de factura (Primary key)
Fecha de la factura
Nombre del cliente

DETALLE_FACTURA
Columna
NUM_FACTURA
COD_PRODUC
TO
CANTIDAD
PRECIO_UNITA
RIO

Tipo de datos
NUMBER(6)

Descripcin
Nmero de factura (Foreign key)

NUMBER(6)

Cdigo del producto

NUMBER(7,2)

Cantidad vendida

NUMBER(7,4)

Precio unitario al que se vendi

SUBTOTAL

NUMBER(12,4)

Subtotal, es igual al precio unitario


por la cantidad

CREATE TABLE FACTURA


(
NUM_FACTURA
NUMBER(6),
FEC_FACTURA
DATE,
CLIENTE
VARCHAR2(30)
);

CREATE TABLE FACTURA_DET


(
NUM_FACTURA
NUMBER(6),
COD_PRODUCTO NUMBER(6),
CANTIDAD NUMBER(7,2),
PRECIO_UNITARIO NUMBER(7,4),
SUBTOTAL NUMBER(12,4)
);

Desarrollar dos triggers:

Un trigger que calcule el subtotal cada vez que se inserte o modifique una
fila en DETALLE_FACTURA.
CREATE OR REPLACE TRIGGER TR_03
BEFORE INSERT OR DELETE OR UPDATE ON FACTURA_DET
FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.SUBTOTAL:=:NEW.CANTIDAD * :NEW.PRECIO_UNITARIO;
END IF;
IF UPDATING THEN
:NEW.SUBTOTAL:=:NEW.CANTIDAD * :NEW.PRECIO_UNITARIO;
END IF;
END;

INSERT INTO factura_det ( NUM_FACTURA, COD_PRODUCTO, CANTIDAD,


PRECIO_UNITARIO)
VALUES (1, 101, 10, 4) ;

SELECT * FROM factura_det;

UPDATE factura_det SET CANTIDAD = 20 WHERE num_factura = 1 AND


cod_producto =101;

Un trigger que elimine las filas correspondientes en DETALLE_FACTURA


cada vez que se elimine una fila en FACTURA (eliminacin en cascada).

4. Desarrollar triggers que permitan registrar en una tabla las fechas y horas de
inicio y fin de las sesiones de usuario:
Nombre de usuario que ejecut la operacin
Fecha y hora de inicio de sesin

Fecha y hora de fin de sesin

También podría gustarte