Trigger en SQL Oracle
Publicado por Kursakez (2 intervenciones) el 08/01/2015 14:12:58
Buenas tardes, soy nuevo en el foro. Mi problema es que tengo que comprobar que no se pueda eliminar un cliente con un impago en sus pedidos. He de decir que está restringido un impago por cliente, es decir, que no se pueda asignar más de un pedido a un cliente si este cliente tiene un pedido asignado sin pagar.
Bueno lo que yo quiero comprobar en mi Trigger es que el cliente que elimino no tenga un impago. No sé muy bien como implementar esto, porque el cliente podría tener más de un pedido asignado. Dejo el código:
CREATE OR REPLACE TRIGGER checkPago
BEFORE DELETE ON CLIENTES
FOR EACH ROW
DECLARE
pagReal PEDIDOS.PAGO_REALIZADO%TYPE;
excepcionImpago exception;
BEGIN
SELECT PAGO_REALIZADO INTO pagReal FROM CLIENTES NATURAL JOIN PEDIDOS;
IF(pagReal='F')THEN
RAISE excepcionImpago;
END IF;
EXCEPTION
WHEN excepcionImpago THEN
DBMS_OUTPUT.PUT_LINE('No se puede eliminar este cliente porque tiene impagos en sus pedidos');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Se ha producido otra excepción');
END;
/
Creo que al poner ese código no me va a realizar bien lo que quiero porque, ¿como sé que se comprueban todos los pagos realizados?
Bueno lo que yo quiero comprobar en mi Trigger es que el cliente que elimino no tenga un impago. No sé muy bien como implementar esto, porque el cliente podría tener más de un pedido asignado. Dejo el código:
CREATE OR REPLACE TRIGGER checkPago
BEFORE DELETE ON CLIENTES
FOR EACH ROW
DECLARE
pagReal PEDIDOS.PAGO_REALIZADO%TYPE;
excepcionImpago exception;
BEGIN
SELECT PAGO_REALIZADO INTO pagReal FROM CLIENTES NATURAL JOIN PEDIDOS;
IF(pagReal='F')THEN
RAISE excepcionImpago;
END IF;
EXCEPTION
WHEN excepcionImpago THEN
DBMS_OUTPUT.PUT_LINE('No se puede eliminar este cliente porque tiene impagos en sus pedidos');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Se ha producido otra excepción');
END;
/
Creo que al poner ese código no me va a realizar bien lo que quiero porque, ¿como sé que se comprueban todos los pagos realizados?
Valora esta pregunta


0