Gererar un trigger que incremente una tabla a partir de datos de otras dos tablas

José Luis Rubio Andrea
02 de Septiembre del 2010
Hola al grupo, soy nuevo en estas lides y espero comprensión en mis planteamientos.

El caso es que ingreso nuevo en una empresa en el que no tengo ni siquiera la opcion de consultar en Metalink y me encuentro que en una BD tengo una Vista Materializada que intenta refrescar cada 15 minutos unas tablas particionadas por meses con unos 40 MILLONES de registros por mes... Como es normal cuando estamos en Enero o Febrero todo va bien pero cuando alcanzas el mes de Agosto los refrescos se eternizan y se supone que los datos expluestos deben de ser actuales.
Estoy planteandome generar una tabla nueva particionada por meses que se alimente de otras dos en las cuales solo reciben INSERT.

Supongamos que una de ellas TABLA1 es la principal (Que solo tiene INSERT) cada vez que reciba un insert recoge una cantidad de datos que unirá con los datos de la TABLA2, mediante una select por ID_LLAMADA, e incrementara un nuevo registro en la TABLA3.

Asi expuesto parece sencillo, pero he intentado generar el trigger y no soy capaz de resolverlo. A continuación pongo como he intentado resolverlo, haber si algun generoso me hecha una manita:

CREATE OR REPLACE TRIGGER trg_tabla3
AFTER INSERT ON tabla1 REFERENCING NEW AS NEW FOR EACH ROW
DECLARE
msg_error VARCHAR2(200);
BEGIN
INSERT INTO tabla3(
LL_ROWID,
LB_ROWID,
ID_LLAMADA,
NA,
NB,
ID_BRAND,
ID_CLIENTE,
FECHA_INICIO,
DURACION,
ID_RUTA,
ID_RUTA_ENTRANTE,
NB_ACCESO,
ESTADO,
ID_PRODUCTO,
ID_SERVICIO_RS,
COSTE_ACCESO,
COSTE_TERMINACION,
ID_FRANJA_RS,
IMPORTE,
ID_COMBINACION,
ID_SERVICIO,
COSTE,
NIVEL,
COSTE_ACCESO_DIVISA,
COSTE_TERMINACION_DIVISA,
COSTE_DIVISA,
IMPORTE_DIVISA )
VALUES (
SELECT tabla2.ROWID ll_rowid,
Tabla1.ROWID lb_rowid,
Tabla2.id_llamada,
tabla2.na,
tabla2.nb,
tabla1.id_brand,
tabla1.id_cliente,
tabla2.fecha_inicio,
tabla2.duracion,
tabla2.id_ruta,
tabla2.id_ruta_entrante,
tabla2.nb_acceso,
tabla2.estado,
tabla2.id_producto,
tabla2.id_servicio_rs,
tabla2.coste_acceso,
tabla2.coste_terminacion,
tabla2.id_franja_rs,
tabla1.importe,
tabla1.id_combinacion,
tabla1.id_servicio,
tabla1.coste,
tabla1.nivel,
tabla2.coste_acceso_divisa,
tabla2.coste_terminacion_divisa,
tabla1.coste_divisa,
tabla1.importe_divisa
FROM tabla2, tabla1
WHERE tabla2.id_llamada = tabla1=id_llamada);
END ;
/

Alguien puede ayudarme? Gracias por anticipado.