Ich kenne die Aussage:
create table xyz_new as select * from xyz;
Welche kopiert die Struktur und die Daten, aber was ist, wenn ich nur die Struktur will?
sql
oracle
copy
database-table
Andrew
quelle
quelle
Antworten:
Verwenden Sie einfach eine where-Klausel, die keine Zeilen auswählt:
Einschränkungen
Die folgenden Dinge werden nicht in die neue Tabelle kopiert:
Dies behandelt auch keine Partitionen
quelle
Ich habe die Methode verwendet, die Sie häufig akzeptiert haben, aber wie jemand darauf hingewiesen hat, werden keine Einschränkungen dupliziert (außer NOT NULL, glaube ich).
Eine fortgeschrittenere Methode, wenn Sie die vollständige Struktur duplizieren möchten, ist:
Dadurch erhalten Sie den vollständigen Text für die Erstellungsanweisung, den Sie nach Belieben zum Erstellen der neuen Tabelle ändern können. Sie müssten natürlich die Namen der Tabelle und alle Einschränkungen ändern.
(Sie können dies auch in älteren Versionen mit EXP / IMP tun, aber jetzt ist es viel einfacher.)
Zum Hinzufügen bearbeitet Wenn sich die gesuchte Tabelle in einem anderen Schema befindet:
quelle
My_table_name
ist die vorhandene Tabelle. Aber wie bekomme ich den Namen meiner neuen Tabelle erstellt?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
In der Zwischenzeit lassen Sie mich bitte wissen, was LONG hier macht.Wählen Sie mit SQL Developer die Tabelle aus und klicken Sie auf die Registerkarte DDL
Mit diesem Code können Sie eine neue Tabelle ohne Daten erstellen, wenn Sie sie in einem SQL-Arbeitsblatt ausführen
sqldeveloper ist eine kostenlose App von Oracle.
Wenn die Tabelle Sequenzen oder Trigger enthält, generiert die ddl diese manchmal auch für Sie. Sie müssen nur vorsichtig sein, in welcher Reihenfolge Sie sie vornehmen, und wissen, wann Sie die Auslöser ein- oder ausschalten müssen.
quelle
SQL
Um zu vermeiden, immer wieder zu iterieren und nichts einzufügen, basierend auf der Bedingung, dass 1 = 2 ist
quelle
quelle
Sie können dies tun,
Create table New_table as select * from Old_table where 1=2 ;
aber seien Sie vorsichtig. Die Tabelle, die Sie erstellen, enthält keinen Index, Pk usw. wie die old_tablequelle
Erstellen Sie eine neue, leere Tabelle mit dem Schema einer anderen. Fügen Sie einfach eine WHERE-Klausel hinzu, die bewirkt, dass die Abfrage keine Daten zurückgibt:
quelle
Sie können auch eine
Schneiden Sie dann die Tabelle ab
abc_new
. Hoffe, dies wird Ihre Anforderung ausreichen.quelle
Schreiben Sie einfach eine Abfrage wie:
Wo
new_table
ist der Name der neuen Tabelle, die Sie erstellen möchten, undold_table
ist der Name der vorhandenen Tabelle, deren Struktur Sie kopieren möchten. Dadurch wird nur die Struktur kopiert.quelle
WHERE 1 = 0
oder ähnliche falsche Bedingungen funktionieren, aber ich mag nicht, wie sie aussehen. Der geringfügig sauberere Code für Oracle 12c + IMHO istCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Es gelten dieselben Einschränkungen: Nur Spaltendefinitionen und ihre Nullfähigkeit werden in eine neue Tabelle kopiert.
quelle
Auf andere Weise können Sie ddl der Tabellenerstellung über den unten aufgeführten Befehl abrufen und die Erstellung ausführen.
TYPE
istTABLE
,PROCEDURE
usw.Mit diesem Befehl können Sie einen Großteil von ddl von Datenbankobjekten abrufen.
quelle
GET_DDL
Groß- und Kleinschreibung unterschieden wird.Source_table ist die Tabelle, deren Struktur Sie kopieren möchten.
quelle
Mit pl / sql developer können Sie entweder im SQL-Arbeitsbereich oder im Objekt-Explorer mit der rechten Maustaste auf den Tabellennamen klicken, dann auf "Ansicht" und dann auf "View SQL" klicken, wodurch das SQL-Skript generiert wird, um die Tabelle zusammen mit allen Einschränkungen zu erstellen , Indizes, Partitionen usw ..
Als nächstes führen Sie das Skript mit dem neuen Tabellennamen aus
quelle
Kopie ohne Tabellendaten
Kopie mit Tabellendaten
quelle
- Dadurch wird eine Tabelle erstellt und alle Daten kopiert.
- Dies hat dieselbe Tabellenstruktur, aber alle kopierten Daten werden gelöscht.
Wenn Sie die durch die Antwort angegebenen Einschränkungen überwinden möchten: Wie kann ich eine Kopie einer Oracle-Tabelle erstellen, ohne die Daten zu kopieren?
quelle
Die obige Aufgabe kann in zwei einfachen Schritten erledigt werden.
SCHRITT 1:
Das
query
obige erstellt ein Duplikat einer Tabelle (auch mit Inhalt).Um die Struktur zu erhalten, löschen Sie den Inhalt der Tabelle mit.
SCHRITT 2:
Hoffe das löst dein Problem. Und danke an die früheren Beiträge. Hat mir viel Einblick gegeben.
quelle
truncate
Version. Sie weisen nicht nur Speicherbereiche für alle Daten zu, sondern geben sie auch nicht durch Löschen frei, sodass Sie möglicherweise Speicherplatz verschwenden, es sei denn, die Tabelle wächst auf die alte Größe. Und Sie generieren Rückgängig / Wiederherstellen sowohl beim Einfügen als auch beim Löschen. Jims Antwort vermeidet das alles ganz einfach.