Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/12/2012, 17:39
jgrc
 
Fecha de Ingreso: abril-2005
Mensajes: 124
Antigüedad: 19 años, 8 meses
Puntos: 0
Como evitar el insert del before insert.

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 original
  1. CREATE OR REPLACE TRIGGER tr_polizasprueba
  2. BEFORE INSERT ON polizasprueba
  3. REFERENCING NEW AS NEW FOR each ROW
  4.   DECLARE
  5.   existe INTEGER;
  6. BEGIN
  7.    SELECT COUNT(*) INTO existe FROM polizasprueba
  8.      WHERE TIPOPOLIZA = :NEW.TIPOPOLIZA AND FOLIO = :NEW.FOLIO AND to_char((FECHA),'yyyy') = to_char((:NEW.FECHA),'yyyy');
  9.      IF existe >0 THEN
  10.         UPDATE admin.polizasprueba
  11.         SET CLASE = :NEW.CLASE,IDDIARIO = :NEW.IDDIARIO,CONCEPTO = :NEW.CONCEPTO,
  12.             SISTEMAORIGEN = :NEW.SISTEMAORIGEN,IMPRESA = :NEW.IMPRESA,IDUSUARIO = :NEW.IDUSUARIO,
  13.             FECHAALTA = :NEW.FECHAALTA,BALANCEADA = :NEW.BALANCEADA
  14.         WHERE TIPOPOLIZA = :NEW.TIPOPOLIZA AND FOLIO = :NEW.FOLIO AND to_char((FECHA),'yyyy') = to_char((:NEW.FECHA),'yyyy');
  15.         RAISE_APPLICATION_ERROR(-20000, 'no quiero realizar el insert');
  16.      END IF;
  17. END;

De hecho intente conel rollback y me genera el mismo resultado. tienen alguna consejo? gracias.

Última edición por gnzsoloyo; 18/12/2012 a las 09:24 Razón: Código SQL sin etiquetar. Usar Highlight "SQL".