Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/12/2007, 11:22
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Re: delete varias tablas oracle

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.

Última edición por MarioHeredia; 27/12/2007 a las 11:30 Razón: Me falto mas detalle en la redaccion final. SLdos