Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

trigger. update antes de lanzar un error

Estas en el tema de trigger. update antes de lanzar un error en el foro de Bases de Datos General en Foros del Web. tengo este trigger para evitar que se inserte como amigo a si mismo juan juan o una amistad que ya exista pero alrevez juan pedro ...
  #1 (permalink)  
Antiguo 27/04/2016, 22:55
 
Fecha de Ingreso: enero-2011
Mensajes: 38
Antigüedad: 13 años, 10 meses
Puntos: 0
trigger. update antes de lanzar un error

tengo este trigger para evitar que se inserte como amigo
a si mismo
juan juan
o una amistad que ya exista pero alrevez
juan pedro
pedro juan
pero al momento de esta ultima también se debe cambiar el estado de 0 a 1(confirmacion de amistad). me salta el error pero no se actualiza la fila,
si le quito el lanzamiento si lo hace
create or replace TRIGGER amigot
BEFORE INSERT ON AMIGO
FOR EACH ROW
DECLARE
amigo_error EXCEPTION;
id_amigo INT;
BEGIN
IF :NEW.USUARIO1=:NEW.USUARIO2 THEN
RAISE amigo_error;
END IF;
SELECT ID INTO id_amigo FROM AMIGO WHERE USUARIO1=:NEW.USUARIO2 AND USUARIO2=:NEW.USUARIO1;
IF id_amigo IS NOT NULL THEN
update AMIGO SET ESTADO=1 where ID=id_amigo;
RAISE amigo_error;
END IF;
EXCEPTION
WHEN amigo_error THEN
RAISE_APPLICATION_ERROR (-20201,'amistad invalidad');

END;
  #2 (permalink)  
Antiguo 02/05/2016, 20:42
 
Fecha de Ingreso: septiembre-2006
Mensajes: 10
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: trigger. update antes de lanzar un error

Hola.
Por el código estas usando oracle.

Debe darte error dado que estas modificando la misma tabla que hace referencia al trigger, quita el control de errores porque con el RAISE_APPLICATION_ERROR no te muestra el error real. Debe estar dandote el error de tabla mutante.

Etiquetas: lanzar, select, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:37.