18/04/2007, 08:07
|
| | Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años, 7 meses 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. |