Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

delete varias tablas oracle

Estas en el tema de delete varias tablas oracle en el foro de Oracle en Foros del Web. Necesito hacer un delete en varias tablas, me explico bien, tengo varias tablas en las que tengo un campo llamado "doc_id", necesito borrar todas las ...
  #1 (permalink)  
Antiguo 18/12/2007, 15:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 12
Antigüedad: 16 años, 4 meses
Puntos: 0
delete varias tablas oracle

Necesito hacer un delete en varias tablas, me explico bien, tengo varias tablas en las que tengo un campo llamado "doc_id", necesito borrar todas las filas de cada una de las tablas donde el doc_id sea igual a un valor dado, no se como hacer esto en oracle,
Si alguien sabe gracias
  #2 (permalink)  
Antiguo 20/12/2007, 16:19
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: delete varias tablas oracle

Hola,

Se me ocurren dos opciones:

1. Creas una relacion Primary Key/Foreign Key sobre el campo doc_id con la opcion ON DELETE CASCADE sobre las Foreign Keys, y cuando haces un DELETE sobre la tabla padre, Oracle se encarga de eliminar todas la filas de las tablas hijos.

2. Creas un trigger sobre la tabla padre que elimine los registros de las tablas hijo cuando ejecutas un DELETE.

Saludos
  #3 (permalink)  
Antiguo 27/12/2007, 10:08
 
Fecha de Ingreso: octubre-2004
Mensajes: 251
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: delete varias tablas oracle

sabes el nombre de todas las tablas?

delete from tabla1 where tabla1.doc_id='valordado';
delete from tabla2 where tabla2.doc_id='valordado';

etc
__________________
www.lomasnuevo.net
  #4 (permalink)  
Antiguo 27/12/2007, 11:22
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.