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 original
CREATE 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.