Ich verwende Oracle DB, um mehr als 30 Tabellen zu verwalten, wie kann ich alle Daten aus allen Tabellen löschen? Ich möchte nur die Daten löschen, aber nicht die Tabellen fallen lassen.SQL: Löschen Sie alle Daten aus allen verfügbaren Tabellen
Antwort
ein Skript generieren zu kürzen (= entfernen Sie alle Zeilen aus) alle Tabellen:
select 'truncate table ' || table_name || ';' from user_tables
Und dann das Skript ausführen.
Ich habe diese Antwort bearbeitet, tut mir leid, aber die Sache mit all_tables war ziemlich gefährlich. –
sehr saubere Lösung, vielen Dank – Lily
Nur für Neulinge: Beachten Sie, dass 'truncate' nicht transaktional ist, d. H. Es kann nicht zurückgesetzt werden. –
Klonen Sie das Schema und dann die alten Tabellen fallen lassen?
+1: Einfachste Lösung bei weitem –
Oder die "echte DBA" Art und Weise es zu tun: Backup der gesamten DB ohne die d ata, und dann baute die DB (... der Server ... vom Motherboard auf; auf); – BCS
@TomH. Wie ist das einfach? Ich bin kein DBA, und es gibt mir keine Ahnung, welche Befehle auszuführen sind. –
Der potenzielle Nachteil einer Abschneidung ist, dass sie bei referenziellen Integritätsbedingungen fehlschlagen kann. Daher sollten Sie zuerst die Fremdschlüsseleinschränkungen deaktivieren und anschließend die Einschränkungen abschneiden und dann erneut aktivieren. Das 'Plus' beim Klonen des Schemas (exp und imp) ist, dass Sie auch den Tablespace löschen und neu erstellen können (was Sie tun möchten, wenn Sie physischen Speicherplatz nach dem Entfernen aller Daten zurückgewinnen möchten) .
die Frage der Einschränkungen zu begegnen, so etwas wie dies funktionieren soll:
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 Tisch ...disable all constraints 'löst eine ORA-01735: ungültige ALTER TABLE-Option aus, wenn für die Tabelle keine Einschränkung definiert ist, die dazu führen würde, dass das Skript * jede * Tabelle nicht abschneiden kann, wenn mindestens eine Tabelle ohne Einschränkung vorhanden ist. Sie könnten das 'execute sofort 'in einen' begin .. exception'-Block einfügen. –
Es gibt keinen Befehl
'ALTE TABLE XXX DISABLE alle Constraints' ist schlage ich vor, diese;
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;
Diese Lösung ist wahrscheinlich nicht die am meisten gewählt, weil die Menschen nicht alle Antworten hier lesen möchten. –
diese zweizeilige Skript sind die besten
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
Das ist die einfachste Möglichkeit, alle Tabellen in einer Microsoft SQL Server-Datenbank zu kürzen. Selbst wenn Sie vergessen haben, Einschränkungen nach dem Entfernen von Daten wieder zu aktivieren. Aber ... diese Frage betrifft Oracle ... nicht SQL Server. – K4timini
aus allen Tabellen in Oracle alle Daten löschen
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;
Für weitere Informationen: http://www.oracleinformation.com/2014/10/delete-all-the-data-from-all-tables.html
Ich habe diese gespeicherte proc, unter Verwendung der oben genannten Antworten. Dies funktioniert perfekt ohne irgendwelche Fehler oder Ausnahmen.
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;
Eine leichte Abwandlung Antwort Andomar die alle Tabellen für einen bestimmten Benutzer die des aktuellen Benutzers statt nur zu kürzen:
SELECT 'TRUNCATE TABLE ' || owner || '.' || table_name || ';' FROM all_tables WHERE owner = 'user/schema'
Ersetzen Sie die user/schema
Bit oben mit dem Namen des Benutzers/schema (zwischen den Anführungszeichen) Sie sind interessiert.
- 1. Löschen Sie alle Daten aus allen Tabellen in Sugar ORM
- 2. Aus allen Tabellen in SQLite löschen
- 3. Löschen aus mehreren Tabellen SQL
- 4. SQL löschen aus verwandten Tabellen
- 5. Löschen Sie alle Tabellen außer einem?
- 6. Wählen Sie Daten aus Tabellen in SQL
- 7. Löschen ‚gleichwertig‘ Daten aus zwei Tabellen
- 8. So löschen Sie vollständige Datensätze aus allen Tabellen in SQL Server
- 9. Löschen eines Datensatzes aus Tabelle und alle anderen assoziierten Tabellen
- 10. Löschen Sie alle Tabellen aus der SQLite-Datenbank
- 11. Löschen Sie alle verwandten Datensätze aus mehreren Tabellen
- 12. SQL Löschen von Zeilen aus mehreren Tabellen
- 13. Löschen von Daten von abhängigen Tabellen
- 14. Wie Abfrage aus allen Tabellen (gleiche Struktur) anzeigen und alle nach Daten sortieren
- 15. SQL - wählen Daten aus zwei Tabellen
- 16. Sql alle Kombination aus 4-Tabellen erzeugen
- 17. Zeilen aus mehreren Tabellen löschen
- 18. Exportieren Sie alle Tabellen aus SQL Server in separaten Dateien
- 19. Wie lösche ich Daten in allen MS-Access-Tabellen gleichzeitig?
- 20. Löschen von mehreren Tabellen (LINQ zu SQL)
- 21. Wie verhindert man, dass Datenbankbenutzer Daten aus ALLEN Tabellen durch Trigger löschen
- 22. SQL vergleichen Daten aus zwei Tabellen
- 23. SQL-Summe Daten aus mehreren Tabellen
- 24. SQL: Löschen Sie alle verschachtelten Selbstreferenzierung Datensätze
- 25. Löschen Sie alle Daten von GAE-Datenspeicher
- 26. PHP SQL - Wählen Sie Daten effizient aus zwei Tabellen
- 27. So erhalten Sie Daten aus zwei SQL-Tabellen in. NET
- 28. Codeigniter Löschen von Daten mit Joins Tabellen
- 29. Wie zeigen Sie alle Daten aus mehreren Tabellen mit SQL JOIN-Abfrage?
- 30. Löschen aus mehreren Tabellen ASP.NET
Diese Frage scheint nicht am Thema zu sein, weil es auf dba.stackexchange.com gehört – EJP