Sie sind auf Seite 1von 3

EJERCICIO

------------------a--------------------
CREATE SEQUENCE SQ_PERSONA START WITH 6;

CREATE OR REPLACE TRIGGER TGR_PERSONA_ID


BEFORE INSERT ON PERSONA
FOR EACH ROW
BEGIN
:NEW.IDPERSONA:=SQ_PERSONA.NEXTVAL;
END;

--Ejecucion

INSERT INTO PERSONA (PATERNO, MATERNO, NOMBRE, DNI) VALUES ('Andres', 'Huanca',
'Namuche', '981155616');

Select * from persona;

---------------b-----------------------

CREATE SEQUENCE SQ_NOTAS START WITH 104;

CREATE OR REPLACE TRIGGER TGR_NOTAS_ID


BEFORE INSERT ON NOTAS
FOR EACH ROW
BEGIN
:NEW.IDNOTA:=SQ_NOTAS.NEXTVAL;
END;

--Ejecucion

INSERT INTO NOTAS (IDALUMNO, NOTA, NOTA_ANT) VALUES (10,11,02);

Select * from notas;

-------------c----------------------------

CREATE SEQUENCE SQ_AUDITORIA_UNO START WITH 1;

CREATE OR REPLACE TRIGGER TGR_AUDITORIA_UNO_ID


BEFORE INSERT ON AUDITORIA_UNO
FOR EACH ROW
BEGIN
:NEW.IDAUDIT:=SQ_AUDITORIA_UNO.NEXTVAL;
END;

--Ejecucion
INSERT INTO AUDITORIA_UNO (USUARIO, FECHA, IDNOTA, ACCION) VALUES
('Andres',TO_DATE('05/11/2020','DD/MM/YYYY'),2,'AccionX');

Select * from auditoria_uno;


--------------d-----------------------------
CREATE SEQUENCE SQ_AUDITORIA_DOS START WITH 1;

CREATE OR REPLACE TRIGGER TGR_AUDITORIA_DOS_ID


BEFORE INSERT ON AUDITORIA_DOS
FOR EACH ROW
BEGIN
:NEW.IDAUDIT:=SQ_AUDITORIA_DOS.NEXTVAL;
END;

--Ejecucion
INSERT INTO AUDITORIA_DOS (USUARIO, FECHA, IDNOTA, IDALUMNO, NOTA) VALUES
('andres',TO_DATE('05/11/2020','DD/MM/YYYY'),10,2,02);

select * from auditoria_dos;

-----EJERCICIO #2

CREATE OR REPLACE TRIGGER TGR_UPDATE_NOTAS


BEFORE UPDATE ON NOTAS
FOR EACH ROW
BEGIN
:NEW.NOTA_ANT:=:OLD.NOTA;
END;

--------------Ejecucion-------------------------

UPDATE NOTAS
SET NOTA=13
WHERE IDNOTA=103;

SELECT * FROM NOTAS;

-------EJERCICIO #3

CREATE OR REPLACE TRIGGER TGR_LOG_AUDITORIA_UNO


AFTER INSERT OR UPDATE OR DELETE
ON NOTAS
FOR EACH ROW
DECLARE
V_ACTION VARCHAR2(15);
V_IDNOTA NUMBER;
BEGIN

IF INSERTING THEN V_ACTION:='INSERT';


ELSIF UPDATING THEN V_ACTION:='UPDATE';
ELSIF DELETING THEN V_ACTION:='DELETE';
END IF;

IF INSERTING THEN V_IDNOTA:=:NEW.IDNOTA;


ELSIF UPDATING THEN V_IDNOTA:=:OLD.IDNOTA;
ELSIF DELETING THEN V_IDNOTA:=:OLD.IDNOTA;
END IF;
INSERT INTO AUDITORIA_UNO (IDAUDIT, USUARIO, FECHA, IDNOTA, ACCION) VALUES
(SQ_AUDITORIA_UNO.NEXTVAL,'andres', TO_DATE('05/11/2020','DD/MM/YYYY'), V_IDNOTA,
V_ACTION);
END;

--PRUEBA
INSERT INTO NOTAS (IDALUMNO, NOTA, NOTA_ANT) VALUES (2,15,02);

SELECT * FROM AUDITORIA_UNO;

-------EJERCICIO #4

CREATE OR REPLACE TRIGGER TGR_LOG_AUDITORIA_DOS


AFTER INSERT OR DELETE OR UPDATE OF NOTA ON NOTAS
FOR EACH ROW
DECLARE
V_ACCION AUDITORIA_DOS.ACCION%TYPE;
V_REGISTRO AUDITORIA_DOS.REGISTRO%TYPE;
V_IDNOTA AUDITORIA_DOS.IDNOTA%TYPE;
BEGIN

IF INSERTING THEN V_IDNOTA:=:NEW.IDNOTA;


ELSIF UPDATING THEN V_IDNOTA:=:OLD.IDNOTA;
ELSIF DELETING THEN V_IDNOTA:=:OLD.IDNOTA;
END IF;

IF INSERTING THEN V_ACCION:='Insertar'; V_REGISTRO:='Insert into NOTAS values


('||:NEW.IDNOTA||', '||:new.IDALUMNO||', '||:new.NOTA||', '||:new.NOTA_ANT||');';
ELSIF UPDATING THEN V_ACCION:='Actualizar'; V_REGISTRO:='Nota_Antigua =
'||:old.NOTA||' Update NOTAS set NOTA = '''||:new.NOTA||''' where IDNOTA =
'||:old.IDNOTA||';';
ELSIF DELETING THEN V_ACCION:='Eliminar'; V_REGISTRO:='Valores eliminados:
('||:old.IDNOTA ||', '||:old.IDALUMNO ||', '||:old.NOTA||', '||:old.NOTA_ANT
||') Delete from NOTAS where IDNOTA =
'||:old.IDNOTA||';';
END IF;

INSERT INTO AUDITORIA_DOS (IDAUDIT, USUARIO, FECHA, IDNOTA, ACCION, REGISTRO)


VALUES (SQ_AUDITORIA_DOS.NEXTVAL, 'andres', TO_DATE('10/11/2020','DD/MM/YYYY'),
V_IDNOTA ,V_ACCION, V_REGISTRO);
END TGR_LOG_AUDITORIA_DOS;

-------------
--Ejecucion--
-------------
---Insert
INSERT INTO NOTAS (IDALUMNO, NOTA, NOTA_ANT) VALUES (2,11,02);

---Update
UPDATE NOTAS SET NOTA=11 WHERE IDNOTA = 108;

---Delete
DELETE FROM NOTAS WHERE IDNOTA = 109;

Das könnte Ihnen auch gefallen