No se si me equivoque, pero me da la impresión que podrías estar haciendo un "reproceso" innecesario, quizá por no comprender totalmente el concepto de Integridad Referencial, voy a tratar de explicarlo con un pequeño ejemplo; observa el siguiente scrpit de creación muy básica de 4 tablas típicas para el manejo de pedidos:
create table CLIENTES (
IDCliente INTEGER NOT NULL,
Cliente VARCHAR(20),
/*otros campos*/
primary key (IDCliente),
);
create table PRODUCTOS (
IDProducto INTEGER NOT NULL,
Producto VARCHAR(100),
PrecioVenta NUMERIC(12,2),
/*OTROS CAMPOS*/
primary key (IDProducto)
);
create table PEDIDOS (
IDPedido INTEGER NOT NULL,
IDCliente INTEGER NOT NULL,
Fecha DATE,
primary key (IDPedido),
constraint FK_CLIENTE_PEDIDO
foreign key (IDCliente) references CLIENTES(IDCliente)
on delete no action on update cascade /*PONER CUIDADO AQUÍ*/
);
create table DETALLES (
IDDetalle INTEGER NOT NULL,
IDPedido INTEGER NOT NULL,
IDProducto INTEGER NOT NULL,
Cantidad INTEGER NOT NULL,
Precio NUMERIC(12,2),
primary key (IDDetalle),
constraint FK_PEDIDO_DETALLE
foreign key (IDPedido) references PEDIDOS(IDPedido)
on delete cascade on update cascade, /*PONER CUIDADO AQUÍ*/
constraint FK_PRODUCTO_DETALLE
foreign key (IDProducto) references PRODUCTOS(IDProducto)
on delete no action on update cascade /*PONER CUIDADO AQUÍ*/
);
Las tablas de Clientes y Pedidos no tiene nada de especial, pero en cambio en la tabla PEDIDOS observa las siguientes líneas:
foreign key (IDCliente) references CLIENTES(IDCliente)
on delete no action on update cascade
La declaración está diciendo literalmente esto: "El valor del campo IDCliente tiene que necesariamente existir en una fila de la tabla de CLIENTES, y cuando se trate de borrar en la tabla CLIENTES la fila con dicho valor de IDCliente por favor genere una excepción y detenga ese borrado, en cambio si por algún motivo se actualiza dicho campo en la tabla Clientes por favor actualice en la tabla de DETALLES las filas correspondientes con el mismo valor".
Ahora bien , observa en la tabla de DETALLES, estas líneas:
constraint FK_PEDIDO_DETALLE
foreign key (IDPedido) references PEDIDOS(IDPedido)
on delete cascade on update cascade,
La anterior declaración dice literalmente esto: "El valor para el campo IDPedido debe existir necesariamente en la tabla de PEDIDOS, al borrar en la tabla de PEDIDOS la fila con dicho valor para IDPedido, por favor borre en la tabla de DETALLES todos los detalles que contengan dicho valor de IDPedido, igualmente si se actualiza ese valor en PEDIDOS por favor actualicelos en la tabla de DETALLES.
Con lo descrito anteriormente fácilmente se puede intuir lo que quiere decir la declaración en la relación entre PRODUCTOS y DETALLES.
Ahora bien, como ves, si lo que quieres es borrar las líneas de DETALLES que correspondan a un PEDIDO borrado, no son necesarios TRIGGERS ni procedimientos almacenados, con las declaraciones anteriores a la hora de crear las tablas es suficiente. Este ejemplo lo puedes extrapolar a tus propias necesidades.
Un cordial saludo.