Sybase SQL Anywhere - Como realizar un Trigger de Update

 
Vista:

Como realizar un Trigger de Update

Publicado por Claudio (2 intervenciones) el 08/09/2009 16:06:51
Buen dia a todos, algun me puede pasar algun ejempo de como realizar un Trigger de Update

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rspuesta...

Publicado por Leopoldo (83 intervenciones) el 10/09/2009 15:30:07
create trigger %TRIGGER% {after update of COLUMNA}
order ### on TABLA {after, before} {evento}
referencing new as ...old as ... for each {row, statement}
begin
Declare Variables;
....Proceso
end
...
%TRIGGER% = Nombre del trigger...
{after update of COLUMNA} opcional para cuando sucede el update de una columna específica...
Nota: Algunas BD no tienen esta opción...
...
of COLUMNA= opcional... cuando se actualiza la columna determinada se ejecuta el trigger
...
order ### = secuencia de ejecución del trigger... 1, 2, 3...
TABLA= Nombre de la tabla...
...
{after, before} = Cuando??? antes o después del proceso...
{evento} = Insert, Update, Delete
new as ... pseudónimo para el buffer (buffer actualizado)
old as ... pseudónimo para el buffer (buffer original)
for each {row, statement}= Se ejecuta para cada tupla afectada o un solo proceso para toda la ejecución, es decir, si lo haces con statement y el update actualiza dos o mas tuplas el procesos se ejecuta UNA SOLA VEZ...
NOTAS:
Si el proceso falla, todos los datos se conservan en su valor original..., es decir no hubo insert, update o delete.
En PowerDesigner se usan unos acrónimos para nombres de triggers que indican el evento del trigger, para facilitar la identificación de la función del trigger...
TIA_... = Trigger Insert After
TUA_... = Trigger Update After
TDA_... = Trigger Delete After
TIB_... = Trigger Insert Before
TUB_... = Trigger Update Before
TDB_... = Trigger Delete Before

...
Ejemplo...
Trigger que crea la información de Auditoria de modificación de clientes, en este caso sobre la condición de 'activo'
...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
create trigger tua_cliente_condicion after update of ACTIVO
order 1 on CLIENTES
referencing new as nuevo old as anterior for each row
begin
Declare @anterior varchar(20);
Declare @Actual varchar(20);
IF  anterior.ACTIVO = 1 THEN
    set @anterior='Activo';
    set @Actual='Inactivo';
ELSE
    set @anterior='Inactivo';
    set @Actual='Activo';
END IF;
 INSERT INTO AUDITORIA_CLIENTES
         ( AUDITORIA_CLIENTE,  FECHA_HORA_AUDITORIA,   DATO_AUDITORIA,
           USUARIO_AUDITORIA,
           DESCRIPCION_AUDITORIA,   VALOR_ANTERIOR,   VALOR_ACTUAL )
  VALUES ( null,   current timestamp,   nuevo.codigo_cliente,
           current user,
           'Modificación Condición',      @Anterior,      @Actual )  ;
end

...
espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rspuesta...

Publicado por Claudio (2 intervenciones) el 10/09/2009 17:30:14
Leopoldo muchas garcias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rspuesta...

Publicado por Leopoldo Taylhardat (83 intervenciones) el 21/11/2013 21:36:23
Nota...
El valor para el dato " AUDITORIA_CLIENTE" es null porque es una columna de valor "AUTO INCREMENTAL"... en este caso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar