mmm Matanga.. lamento no coincidir contigo, la experiencia me ha demostrado que en modelos de tablas muy grandes, establecer foreign key no es una buena idea, se torna imposible querer borrar datos de una sola tabla.
Puede que hoy Lucho, quieras borrar todas, pero mañana vas a querer borrar solo una.
Si me preguntas que haria yo, haria un bloque PL/SQL puede que lo quieras guardar en un procedure o no.
Código:
DECLARE
CURSOR SYN IS
SELECT TABLE_NAME
FROM DBA_TAB_COLS
WHERE COLUMN_NAME = '&COLUMN_NAME'
ORDER BY TABLE_NAME;
SENTENCE VARCHAR2(1000);
BEGIN
FOR SYNA IN SYN LOOP
SENTENCE := 'DELETE FROM '||SYNA.TABLE_NAME||' WHERE &COLUMN_NAME = &VALOR_A_BORRAR;';
DBMS_OUTPUT.PUT_LINE(SENTENCE);
--EXECUTE IMMEDIATE SENTENCE;
END LOOP;
END;
La sentencia de execute esta comentada, puede ver el resultado por la ventana del dbms_output.
Si necesitas un commit, no me acuerdo si te hace falta, se lo pones al finalizar el loop.
las variables COLUMN_NAME y VALOR_A_BORRAR serian DOC_ID y el numero de doc_id que quieres eliminar, respectivamente.
Como ves este script se sirve para otro campo que no sea DOC_ID.
Hoy puedes usar la tabla DBA_TAB_COLS pero puede que traiga mas tablas de las que quieres borrar que tengan el campo DOC_ID.
Entonces puedes usar en vez de esa tabla del diccionario, una tabla tuya que tenga la lista de tablas a borrar, se entiende? incluso puedes poner un campo flag, que te sirva para indicar cual de ese listado de tablas quieres borrar y cuales no.
Espero que te sirva como modelo, me parece una buena solucion.
Suerte con eso !!!!.
Mario.