SQL - ayuda con trigger en oracle

 
Vista:

ayuda con trigger en oracle

Publicado por aranguru (1 intervención) el 02/11/2002 20:06:32
mu buenas. a ver si pueden ayudar con un trigger en oracle.

resulta que tengo una tabla llamada empl y una empldesfer.
en la empldesfer tienen que guardarse todas las tuplas que se borren de empl. pero ahi no termina la cosa. el trigger que me hace eso, tiene que añadir un campo a cada tupla en empldesfer que diga el numero de operacion a que pertenecen.
vamos a ver... puede ser que una operacion determinada solo borre una tupla, entonces cada nueva tupla en empldesfer tendra un numero distinto, pero.... si una sola operacion borra mas de una tupla, todas esas tuplas deberan tener el mismo numero.

pues bien. eso lo controlo con una sequencia que he creado.

en un primer trigger la llamo con currval pa poner a todas la tuplas de la misma operacion el mismo numero, y en un segundo trigger hago un nextval para incrementar la sequencia para la proxima vez que se inserta algo en empldesfer, y este segundo trigger digo que solo se ejecute para cada modificacion y no para cada tupla.

pues bien, eso no es asi, y para cada tupla se le asigna un numero distinto, sean de la misma operacion o no.

a ver si saben ayudarme, aqui les pongo el codigo.

************************************************************

create or replace trigger desfer
after delete on empl
referencing new as new old as old
for each row
declare
num number;

begin
select tri_desfer.currval into num from dual;

if deleting then
insert into empldesfer values (:old.empl_num,:old.empl_nom,:old.empl_ofici,:old.empl_dir,:old.empl_datalt,:old.empl_salari,:old.empl_comissio,null,'inser',null,num);
end if;

end;

/

*********************
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

RE:ayuda con trigger en oracle

Publicado por Sucede (1 intervención) el 04/11/2002 17:14:49
Deja unicamente el trigger que muestras en el mensaje.
Quita el if deleting para evitar código inservible.
A la hora de eliminar el registro de la tabla empl haz esto:
declare
num number;
begin
select tri_desfer.nextval into num from dual;
delete from empl where [la cóndición que sea];
[aquí se ejecutará tu trigger]
end;
/
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