Buenos días:
Tengo una función que se dispara en un trigger cuya finalidad es; crear un registro en otra tabla o actualizarlo y
devolviendoel id del registro creado/modificado para guardarlo en la tabla desde la que se llama. Intentaré explicarlo
mejor:
tablaA --> Es la que dispara el trigger y en la que quiero guardar el id del registro modificado / creado en la tabla
B.
tablaB --> Digamos que es una tabla resumen de la tablaA y se mantiene desde el trigger de la misma, creando
modificandoy/o borrando los registros.
Finalidad --> Eso, actualizar la tablaB desde la A y guardar en el registro de de la tablaA a que registro de la tablaB
"pertenece".
Cuando hago el insert me devuelve el error del asunto
Control reached end of trigger procedure without RETURN
y me indica la línea correspondiente al INSERT.
¿Acaso no continúa el flujo if (not found) y debería hacer el return NEW tras el insert? ¿y lo mismo en el update del
exception?
Agradezco de antemano vuestro tiempo y ayudas.
Un saludo.
P.D. Estructura de la función.
DECLAREid_tablaB integer; -- Id de la tabla B.
BEGINIF (TG_OP = 'DELETE') THEN -- Descontar valores
ELSIF (TG_OP = 'UPDATE') THEN -- Modificar valores.
ELSIF (TG_OP = 'INSERT') THEN -- Asignar valores
END IF;
-- Update con nuevos valores y retornamos el id para actualizar detalle.UPDATE tablaBSET campo1=valor1,
campo2=valor2WHERE tablaA_id=NEW.tblaB_id RETURNING tablaB_id INTO id_tablaB;
-- Si no existe, hacemos el insert y retornamos el id para actualizar detalle.IF (NOT FOUND) THEN BEGIN -- No
existÌael registro y lo creamos.
--
-- AQUÍ DEVUELVEL EL ERROR.
-- INSERT INTO tablaB ( campo1, campo2) VALUES ( valor1,
valor2 ) RETURNING tablaB_id INTO id_tablaB; EXCEPTION WHEN UNIQUE_VIOLATION THEN
UPDATE tablaB SET campo1=valor1, campo2=valor2 WHERE tablaA_id=NEW.tblaB_id
RETURNING tablaB_id INTO id_tablaB; END;END IF;
-- Borrado de ventas_imp si el resumen del % y factura es 0.DELETE FROM tablaB WHERE tablaA_id=id_tablaA AND
(campo3=0OR campo3 IS NULL);
-- Guardamos el id de la tabla ventas_imp y retornamos el record modificado.NEW.tablaB_id := id_tablaBreturn NEW;
END