Buenas tardes a todos y gracias por su ayuda.
Tengo que realizar la siguiente acción, cuando el usuario inserte un nuevo registro, debo de checar si este existe, en caso de existir solo debo actualizar ciertos campos, de lo contrario inserto el registro.
Entonces para lo anterior ocupe un trigger con la función before insert, el problema es cuando actualiza porque resulta que realiza la actualización pero al mismo tiempo me genera el registro. quise evitar la acción del insert con un raise application error que efectivamente me evita el insert, pero no realiza el update.
este es mi codigo:
Código SQL:
Ver originalCREATE OR REPLACE TRIGGER tr_polizasprueba
BEFORE INSERT ON polizasprueba
REFERENCING NEW AS NEW FOR each ROW
DECLARE
existe INTEGER;
BEGIN
SELECT COUNT(*) INTO existe FROM polizasprueba
WHERE TIPOPOLIZA = :NEW.TIPOPOLIZA AND FOLIO = :NEW.FOLIO AND to_char((FECHA),'yyyy') = to_char((:NEW.FECHA),'yyyy');
IF existe >0 THEN
UPDATE admin.polizasprueba
SET CLASE = :NEW.CLASE,IDDIARIO = :NEW.IDDIARIO,CONCEPTO = :NEW.CONCEPTO,
SISTEMAORIGEN = :NEW.SISTEMAORIGEN,IMPRESA = :NEW.IMPRESA,IDUSUARIO = :NEW.IDUSUARIO,
FECHAALTA = :NEW.FECHAALTA,BALANCEADA = :NEW.BALANCEADA
WHERE TIPOPOLIZA = :NEW.TIPOPOLIZA AND FOLIO = :NEW.FOLIO AND to_char((FECHA),'yyyy') = to_char((:NEW.FECHA),'yyyy');
RAISE_APPLICATION_ERROR(-20000, 'no quiero realizar el insert');
END IF;
END;
De hecho intente conel rollback y me genera el mismo resultado. tienen alguna consejo? gracias.