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

problemas con trigger

Estas en el tema de problemas con trigger en el foro de Oracle en Foros del Web. Hola a todos. tengo un problema con un trigger y es el siguiente: yo tengo una tabla A que tiene un trigger y necesito que ...
  #1 (permalink)  
Antiguo 18/04/2007, 08:07
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
problemas con trigger

Hola a todos.
tengo un problema con un trigger y es el siguiente:
yo tengo una tabla A que tiene un trigger y necesito que ese disparador inserte en dos tablas distintas B y C. Coloco dos sentencias insert (una para cada tabla) en el mismo cuerpo del trigger y todo bien.
El problema es que tengo que tengo que prever que si ya existe esa llave en vez de insert haga un update para cualquiera de las dos, entonces si cada insert dispara una excepcion de tipo dup_val_on_index mando a realizar un update en el que la disparo.
Pero sintacticamente parece que en el cuerpo de un trigger no se puede tener dos captura de excepciones y me da error.
Pongo un ejemplo para ilustrar:

CREATE TRIGGER Esquema.nombre
AFTER INSERT
ON Esquema.A
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
INSERT INTO Esquema.B
(B.b1,
B.b2)
VALUES(:NEW.ID,
:NEW.Valor)
EXCEPTION when dup_val_on_index THEN
UPDATE Esquema.B
SET (B.b2 = B.b2 + :NEW.Valor)
WHERE (B.b1 = :NEW.ID)

INSERT INTO Esquema.C
(C.c1,
C.c2)
VALUES(:NEW.ID,
:NEW.Valor)
EXCEPTION when dup_val_on_index THEN
UPDATE Esquema.C
SET (C.c2 = C.c2 - :NEW.Valor)
WHERE (C.c1 = :NEW.ID)
END;

El error me lo dice en el Exception del segundo insert y les cito el error:
PLS-00103: Encontrado o símbolo "EXCEPTION" quando um dos seguintes símbolos era esperado:

begin case declare end exit for goto if loop mod null pragma
raise return select update when while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
(Line: 113 Col: 6)


Alguna sugerencia?
muchas gracias y saludos a todos.
  #2 (permalink)  
Antiguo 18/04/2007, 10:21
Avatar de MACGREGOR  
Fecha de Ingreso: enero-2005
Mensajes: 89
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: problemas con trigger

Creo que el problema no es que declares dos excepciones en el cuerpo del triguer, sino que declaras la misma excepción 2 veces.

La solución más simple que se me ocurre es que elimines todo lo referente a la inserción o update del "esquema C" de este triguer y crees uno en el "esquema B" que te haga la inserción en c.
  #3 (permalink)  
Antiguo 18/04/2007, 11:04
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Re: problemas con trigger

Hola de nuevo
muchas gracias voy a analizar si me sirve esa solucion, de todas formas creo haber hallado la respuesta al problema, es la siguiente:
se debe poner entre begin...end cada bloque de insert...exception
y ya no da error.

espero le sirva a alguien por si tiene el mismo problema,
saludos a todos
  #4 (permalink)  
Antiguo 18/04/2007, 12:41
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: problemas con trigger

exacto, puedes poner el numero de begin - exception - end; que sean necesarios dentro del cuerpo de cualquier trigguer-procedure-function
__________________
Blogzote.com :-) Mi blog
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 18:26.