Está en la página 1de 4

5 disparadores

7 funciones
7 procedimientos

1)Hacer un disparador que NO PERRMITA A UN USUARIO QUE YA TENGA MAS DE 3 QUEJAS SIN
SER RESUELTAS
INGRESAR UNA NUNEVA QUEJA

CREATE OR REPLACE TRIGGER TOTAL_QUEJA


BEFORE
INSERT
ON QUEJA
FOR EACH ROW
DECLARE
TOTAL NUMBER:=0;

BEGIN
SELECT COUNT(*) INTO TOTAL
FROM QUEJA
where :NEW.PERDOCUMENTO = PERDOCUMENTO and ESTADO_QUEJA = 1;

if total > 2 THEN


RAISE_APPLICATION_ERROR(-20506, ' ESTIMADO USUARIO USTED YA ESEDIO EL LIMITED DE
QUEJAS SIN RESOLVER !!
SI TIENE ALGUNA DUDA CONSULTE AL PROVEDOR ELKIN0016@GMAIL.COM');
end if;
END;

2) Realizar un disparador que permita crear una auditoria en la tabla


detalle_prestamo al momento de que suceda
el evento DELETE OR UPDATE que permita guardar en
una tabla llamada auditoria_detalle_pago con el fin de que sirva para futuros
inconvenietes o una investigacion.

datos de la tabla
auditoria_detalle_pago(ID_PAGO,MONTO,VALOR_PAGO,VALOR_RESTANTE,FECHA,USUARIO)

CREATE TABLE AUDITORIA_DETALLE_PAGO(


ID_PAGO NUMBER(38,0),
MONTO_OLD NUMBER(38,0),
MONTO_NEW NUMBER(38,0),
VALOR_PAGO_OLD NUMBER(38,0),
VALOR_PAGO_NEW NUMBER(38,0),
VALOR_RESTANTE_OLD
NUMBER(38,0),
VALOR_RESTANTE_NEW
NUMBER(38,0),
FECHA DATE,
USUARIO VARCHAR(30),
EVENTO VARCHAR(30)
);;
CREATE OR REPLACE TRIGGER AUDITORIA_PAGO
BEFORE
UPDATE OR DELETE
ON DETALLE_PAGO
FOR EACH ROW
BEGIN

IF UPDATING THEN

INSERT INTO AUDITORIA_DETALLE_PAGO


VALUES (

:OLD.ID_PAGO,
:OLD.MONTO,
:NEW.MONTO,
:OLD.VALOR_PAGO,
:NEW.VALOR_PAGO,
:OLD.VALOR_RESTANTE,
:NEW.VALOR_RESTANTE,
SYSDATE,
USER,
'UPDATE'
);

ELSIF DELETING THEN


INSERT INTO AUDITORIA_DETALLE_PAGO
(ID_PAGO,MONTO_OLD,VALOR_PAGO_OLD,VALOR_RESTANTE_OLD,FECHA,
USUARIO,EVENTO)
VALUES (:OLD.ID_PAGO, :OLD.MONTO, :OLD.VALOR_PAGO, :OLD.VALOR_RESTANTE,
SYSDATE, USER,'DELETE');

END IF;

END;

3)crear un disparador que no permita hacer cambios


en la tabla departamento si se esta fuera de el horario de trabajo

create or replace trigger hora_cambios


before
insert or update or delete
on departamento
DECLARE
HORA NUMBER:=TO_CHAR(SYSDATE,'HH24');
begin
IF(HORA>14)OR(HORA<8)
THEN
RAISE_APPLICATION_ERROR(-20506, ' ESTIMADO USUARIO USTED SOLO PUEDE HACER
CAMBIOS EN HORAS DE TRABAJO!!
SI TIENE ALGUNA DUDA CONSULTE AL PROVEDOR ELKIN0016@GMAIL.COM');
END IF;
end;
4)crear un disparador que muestre al momento de registrar un contrato si el
apartamento esta disponible

create or replace trigger DEPARTAMENTO_DISPONIBLE


before
insert
on PAGO
FOR EACH ROW
DECLARE
DISPONIBLE INTEGER:=0;
begin

SELECT COUNT(*) INTO DISPONIBLE FROM DEPARTAMENTO D


WHERE D.DEPTID = :NEW.DEPARTAMENTO_DEPTID AND D.DEPTESTADO='t';

IF (DISPONIBLE > 0)
THEN
RAISE_APPLICATION_ERROR(-20506, ' ESTIMADO USUARIO EL DEPARTAMENTO YA SE
ENCUENTRA UTILIZADO!!
SI TIENE ALGUNA DUDA CONSULTE AL PROVEDOR ELKIN0016@GMAIL.COM');
ELSE
UPDATE DEPARTAMENTO SET DEPTESTADO='t' where DEPTID=:NEW.DEPARTAMENTO_DEPTID;
DBMS_OUTPUT.PUT_LINE('OPERACION EXITOSA');
END IF;
end;

5)crear un disparador que me guarde en lA tabla historial_pago1 cada momento


que se modifique el valor_pago

CREATE TABLE HISTORIAL_PAGO1(


ID_PAGO NUMBER(38,0),
CUOTA_OLD NUMBER(38,0),
PERSONA_PERDOCUMENTO_OLD
NUMBER(38,0),
ESTADO_OLD CHAR(1),
DEPARTAMENTO_DEPTID_OLD
NUMBER(38,0),
VALOR_PAGO_OLD NUMBER(38,0),
VALOR_PAGO_NEW NUMBER(38,0),
FECHA DATE,
USUARIO VARCHAR(30)
);

CREATE OR REPLACE TRIGGER AUDITORIA_CONTRATO


BEFORE
UPDATE OF VALOR_PAGO
ON PAGO
FOR EACH ROW
BEGIN

INSERT INTO HISTORIAL_PAGO1


VALUES (

:OLD.ID_PAGO,
:OLD.CUOTAS,
:OLD.PERSONA_PERDOCUMENTO,
:OLD.ESTADO,
:OLD.DEPARTAMENTO_DEPTID,
:OLD.VALOR_PAGO,
:NEW.VALOR_PAGO,
SYSDATE,
USER
);

END;

insert into PAGO values()

También podría gustarte