Estoy usando Oracle DB para mantener más de 30 tablas, ¿cómo puedo eliminar todos los datos de todas las tablas? Solo quiero borrar los datos pero no soltar las tablas.SQL: elimine todos los datos de todas las tablas disponibles
Respuesta
generar una secuencia de comandos para truncar (= Eliminar todas las filas de) todas las tablas:
select 'truncate table ' || table_name || ';' from user_tables
y luego ejecutar la secuencia de comandos.
Edité esta respuesta, lo siento, pero el asunto all_tables fue bastante peligroso. –
solución muy buena, muchas gracias – Lily
Sólo para novatos: tenga en cuenta que 'truncado' no es transaccional, es decir, no se puede deshacer. –
¿Clonar el esquema y luego soltar las tablas antiguas?
+1: solución más sencilla por mucho –
O la forma de "DBA real" de hacerlo: copia de seguridad de la base de datos completa sin la d ata, y luego reconstruyó el DB (... el servidor ... de la placa base en adelante;). – BCS
@TomH. ¿Cómo es esto simple? No soy un DBA, y no tengo idea de qué comandos ejecutar. –
El posible inconveniente con un truncado es que puede fallar en las restricciones de integridad referencial. Por lo tanto, primero debe deshabilitar las restricciones de clave externa, luego truncar y volver a habilitar las restricciones. El 'más' de clonar el esquema (exp e imp) es que también podría descartar y volver a crear el espacio de tablas (lo que puede hacer si desea reclamar un espacio físico en el disco como resultado de eliminar todos los datos) .
Para abordar la cuestión de las limitaciones, algo como esto debería funcionar:
BEGIN
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' DISABLE ALL CONSTRAINTS';
END LOOP;
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE '||T.table_name;
END LOOP;
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' ENABLE ALL CONSTRAINTS';
END LOOP;
END;
'alter table ...deshabilitar todas las restricciones' arroja una opción 'ORA-01735: ALTER TABLE no válida' si no hay ninguna restricción definida para la tabla, lo que provocaría que el script no truncara * cada * tabla si hay al menos una tabla sin restricción. Es posible que desee colocar 'execute immediate' dentro de un bloque' begin .. exception'. –
No hay un comando ALTER TABLE XXX DESACTIVAR todas las restricciones '
propongo esto;
BEGIN
FOR c IN (SELECT table_name, constraint_name FROM user_constraints WHERE constraint_type = 'R')
LOOP
EXECUTE IMMEDIATE ('alter table ' || c.table_name || ' disable constraint ' || c.constraint_name);
END LOOP;
FOR c IN (SELECT table_name FROM user_tables)
LOOP
EXECUTE IMMEDIATE ('truncate table ' || c.table_name);
END LOOP;
FOR c IN (SELECT table_name, constraint_name FROM user_constraints WHERE constraint_type = 'R')
LOOP
EXECUTE IMMEDIATE ('alter table ' || c.table_name || ' enable constraint ' || c.constraint_name);
END LOOP;
END;
esta solución probablemente no sea la más votada porque a las personas no les interesa leer todas las respuestas aquí. –
estos dos script de línea son la mejor
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
Esa es la forma más fácil de truncar todas las tablas en una base de datos de Microsoft SQL Server. Incluso si olvidó volver a habilitar las restricciones después de eliminar los datos. Pero ... esta pregunta es sobre Oracle ... no SQL Server. – K4timini
borrar todos los datos de todas las tablas en el oráculo
DECLARE str VARCHAR2(100); BEGIN FOR i IN (SELECT object_name FROM user_objects WHERE object_type='TABLE' ) LOOP str := 'Truncate table '|| i.object_name; EXECUTE IMMEDIATE str; DBMS_OUTPUT.PUT_LINE('table data deleted :' || i.object_name); END LOOP; END;
Para más información: http://www.oracleinformation.com/2014/10/delete-all-the-data-from-all-tables.html
creé esta almacenado proc, utilizando las respuestas mencionadas anteriormente. Esto funciona perfectamente sin ningún error o excepción.
create or replace PROCEDURE DELETE_ALL_DATA
AS
cursor r1 is select * from user_constraints;
cursor r2 is select * from user_tables;
cursor r3 is select * from user_constraints;
cursor r4 is select * from user_tables;
BEGIN
FOR c1 IN r1
loop
for c2 in r2
loop
begin
if c1.table_name = c2.table_name and c1.status = 'ENABLED' THEN
dbms_utility.exec_ddl_statement('alter table ' || c1.owner || '.' || c1.table_name || ' disable constraint ' || c1.constraint_name);
end if;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
continue;
WHEN OTHERS
THEN
continue;
end;
end loop;
END LOOP;
FOR T in (SELECT table_name FROM user_tables) LOOP
begin
EXECUTE IMMEDIATE 'TRUNCATE TABLE '||T.table_name;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
continue;
WHEN OTHERS
THEN
continue;
end;
END LOOP;
FOR c1 IN r3
loop
for c2 in r4
loop
begin
if c1.table_name = c2.table_name and c1.status = 'DISABLED' THEN
dbms_utility.exec_ddl_statement('alter table ' || c1.owner || '.' || c1.table_name || ' enable constraint ' || c1.constraint_name);
end if;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
continue;
WHEN OTHERS
THEN
continue;
end;
end loop;
END LOOP;
commit;
END DELETE_ALL_DATA;
Una ligera variación en la respuesta de Andomar para truncar todas las tablas para un usuario específico en lugar de sólo aquellos del usuario actual:
SELECT 'TRUNCATE TABLE ' || owner || '.' || table_name || ';' FROM all_tables WHERE owner = 'user/schema'
Reemplazar el bit user/schema
anteriormente con el nombre de usuario/esquema (entre las comillas) usted está interesado en.
- 1. Django: elimine todos los datos de todas las tablas (pero conserve las tablas)
- 2. ¿Cómo borrar todos los datos de todas las tablas en Rails?
- 3. Lista de todas las tablas en la base de datos
- 4. encontrar todas las tablas no referenciadas en los procedimientos almacenados
- 5. Listar todas las tablas en una base de datos
- 6. Obtenga todas las tablas y todas las columnas de una base de datos odbc
- 7. Seleccionar de todas las tablas
- 8. Seleccionar todas las columnas de todas las tablas de SQL Server 2008
- 9. Psql enumera todas las tablas
- 10. Exportar todas las tablas de SQL Server a archivos separados
- 11. Omitir todas las tablas comando
- 12. Obtener todas las columnas de todas las tablas MySQL
- 13. Cómo vaciar todas las filas de todas las tablas en mysql (en sql)
- 14. ¿Cómo puedo listar todas las tablas en una base de datos con Squirrel SQL?
- 15. Establecer IDENTITY_INSERT OFF para todas las tablas
- 16. Consulta SQL al esquema de búsqueda de todas las tablas
- 17. Uso tablediff de comparar todas las tablas
- 18. MySQL OPTIMIZE todas las tablas?
- 19. Cómo mostrar todas las tablas de múltiples bases de datos
- 20. Buscar todas las columnas de un cierto tipo en todas las tablas en una base de datos SQL Server
- 21. Renombrar todas las tablas en la base de datos
- 22. ORMLite restablecer todas las tablas
- 23. Buscar todos los campos en todas las tablas para un valor específico (Oracle)
- 24. Eliminar datos de todas las tablas en MYSQL
- 25. ¿Cómo puedo cambiar los prefijos en todas las tablas de mi base de datos MySQL?
- 26. Oracle - elimine las restricciones de la tabla sin descartar las tablas
- 27. ¿podemos listar todas las tablas en la base de datos msaccess usando sql?
- 28. Reparar todas las tablas de una vez
- 29. Android listar todas las imágenes disponibles
- 30. Obtener todas las posibles monedas disponibles
Esta pregunta parece estar fuera de tema porque pertenece a dba.stackexchange.com – EJP