[Pgsql-ayuda] trigger solo en algunos campos...

Gunnar Wolf gwolf@gwolf.cx
Thu, 28 Aug 2003 17:38:07 -0500


sandrigo lezcano dijo [Thu, Aug 28, 2003 at 03:33:00PM -0500]:
> mm... me encontre con esto en sybase...
> un trigger after update _pero_ solo en
> algunos campos de la tabla...
> 
> o sea q si no esta dicho campo en la lista
> q le definis en el trigger, en estos campos..
> entonces se realiza el UPDATE sin tener q
> pasar por el trigger....   
> 
> puedo simular algo parecido en PostgreSQL ???

Ummm... No lo veo muy difícil en realidad... No estoy probando, pero
algo así podría ser - Le dejas la verificación a la función:

-----------------------
create or replace function tua_cajas_habilitadas() returns trigger as
'BEGIN
    IF OLD.habilitacion=NEW.habilitacion and OLD.cajero=NEW.cajero and
        OLD.caja=NEW.caja and OLD.fecha_apertura=NEW.fecha_apertura and
        OLD.hora_apertura=NEW.hora_apertura and OLD.fecha_cierre=NEW.fecha_cierre
        and OLD.hora_cierre=NEW.fecha_cierre THEN
        -- No hay nada que revisar
        return NEW;
    END IF;
    -- Y acá va el resto de tu función...
END;' language 'plpgsql';

create trigger tua_cajas_habilitadas after update on
caa.cajas_habilitadas for each row execute procedure tua_cajas_habilitadas;
-----------------------

¿Gusta?

Saludos,

> va el codigo en sybase:
> 
> create trigger 
>    tua_cajas_habilitadas after update 
>    of    
>    habilitacion,cajero,caja,fecha_apertura,
>    hora_apertura,fecha_cierre,hora_cierre 
>    
>    order 1 on caa.cajas_habilitadas 
>    referencing old as old new as new
>    for each row 
> 
>    begin 
>      if exists(select 1 from pagos_clientes 
>        where habilitacion = old.habilitacion) then 
>          raiserror 99999 '<*No se pueden modificar 
>                     habilitaciones con pagos cargados*>'
>       end if;
>       if bitacora('cajas_habilitadas','U',
>              'habilitacion=' || new.habilitacion || ';'
>               || 'caja=' || new.caja || ';' 
>               || 'cajero=' || new.cajero || ';'
>               || 'fecha_apertura=' || new.fecha_apertura || ';'      
>               || 'hora_apertura=' || new.hora_apertura || ';'
>               || 'fecha_cierre=' || new.fecha_cierre || ';'
>               || 'hora_cierre=' || new.hora_cierre || ';'
>               || 'estado=' || new.estado) <> 0 then 
>                    raiserror 99999 '<*Error al crear registro de  
>                        auditoría*>'
>       end if; 
> end
> 
> 
> =====
> --                             ICQ Web-based!!
> ----------------------------------------------
> Sandrigo Lezcano Jara           ICQ: 143590717
> Asuncion, Paraguay           http://go.icq.com
> 
> _________________________________________________________
> Do You Yahoo!?
> Información de Estados Unidos y América Latina, en Yahoo! Noticias.
> Visítanos en http://noticias.espanol.yahoo.com
> _______________________________________________
> Pgsql-ayuda mailing list
> Pgsql-ayuda@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda

-- 
Gunnar Wolf - gwolf@gwolf.cx - (+52-55)5630-9700 ext. 1366
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF