Ich möchte eine temporäre Tabelle in einer Oracle-Datenbank erstellen
etwas wie
Declare table @table (int id)
In SQL Server
Und füllen Sie es dann mit einer select-Anweisung
Ist es möglich?
Vielen Dank
quelle
Ich möchte eine temporäre Tabelle in einer Oracle-Datenbank erstellen
etwas wie
Declare table @table (int id)
In SQL Server
Und füllen Sie es dann mit einer select-Anweisung
Ist es möglich?
Vielen Dank
Ja, Oracle hat temporäre Tabellen. Hier ist ein Link zu einem AskTom- Artikel, der sie beschreibt, und hier ist die offizielle Oracle CREATE TABLE-Dokumentation.
In Oracle sind jedoch nur die Daten in einer temporären Tabelle temporär. Die Tabelle ist ein reguläres Objekt, das für andere Sitzungen sichtbar ist. Es wird empfohlen, häufig temporäre Tabellen in Oracle zu erstellen und zu löschen.
CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;
Oracle 18c fügte private temporäre Tabellen hinzu, bei denen es sich um speicherinterne Objekte für eine Sitzung handelt. Weitere Informationen finden Sie in der Dokumentation . Private temporäre Tabellen können dynamisch erstellt und gelöscht werden.
CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;
Temporäre Tabellen können nützlich sein, werden jedoch in Oracle häufig missbraucht. Sie können häufig vermieden werden, indem mehrere Schritte mithilfe von Inline-Ansichten zu einer einzigen SQL-Anweisung kombiniert werden.
CREATE TABLE AS SELECT
: Wählen Sie aus Remote-Tabellen mit LOB-Spalten aus, da Sie nicht direktSELECT
daraus auswählen können. Ich schreibe eine Prozedur zum Kopieren von Datensätzen aus einer entfernten Datenbank, und dies war meine Lösung: Bringen Sie die Datensätze in eine GTT und kopieren Sie sie dann in die "echte" Tabelle.Nur ein Tipp. Temporäre Tabellen in Oracle unterscheiden sich von SQL Server. Sie erstellen es EINMAL und nur EINMAL, nicht jede Sitzung. Die Zeilen, die Sie einfügen, sind nur für Ihre Sitzung sichtbar und werden automatisch gelöscht (dh
TRUNCATE
nichtDROP
), wenn Sie Ihre Sitzung beenden (oder die Transaktion beenden, je nachdem, welche "ON COMMIT" -Klausel Sie verwenden).quelle
DELETED
, nichtDROP
ped.quelle
ON COMMIT DELETE ROWS
bedeutet, dass sie früher verworfen werden, wenn Sie während einer Sitzung schrittweise Festschreibungen vornehmen.CREATE TABLE table_temp_list_objects AS
SELECT o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';
quelle