Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL Server / Oracle:Private temporäre Tabellen

Wie Sie festgestellt haben, unterscheiden sich temporäre Tabellen von SQL Server und Oracle grundlegend.

In Oracle sind globale temporäre Tabellen permanente Objekte, die temporäre sitzungsspezifische (oder transaktionsspezifische) Daten speichern.

In SQL Server sind temporäre Tabellen temporäre Objekte, die temporäre Daten speichern, wobei #temp_tables Daten speichert, die für eine Sitzung lokal sind, und ##temp_tables Daten speichert, die global sind. (Ich hatte noch nie Bedarf an globalen temporären SQL Server-Tabellen und weiß nicht, welches Problem sie lösen.) Wenn die #temp_table in einer gespeicherten Prozedur erstellt wurde, wird sie gelöscht, wenn die gespeicherte Prozedur beendet wird. Andernfalls wird es gelöscht, wenn die Sitzung geschlossen wird.

Und nein, es gibt wirklich keine Möglichkeit, SQL Server dazu zu bringen, Oracle nachzuahmen. Sie könnten eine normale Tabelle mit einer zusätzlichen Spalte verwenden, in der eine Sitzungs-ID gespeichert ist. Aber Sie würden nicht die Vorteile von temporären Tabellen in Bezug auf weniger Protokollierung erhalten. Sie müssten die temporären Daten manuell löschen. Und kümmern Sie sich um das Aufräumen von Sitzungen, die vorzeitig beendet wurden.

BEARBEITEN: Ein weiterer Unterschied zwischen Oracle und SQL Server besteht darin, dass SQL Server zulässt, dass DDL mit anderen Anweisungen in eine Transaktion eingeschlossen wird. Wenn Sie also eine temporäre Tabelle als Teil einer größeren Transaktion verwenden müssen, verwenden Sie create table #table_name... -Anweisung wird die aktuelle Transaktion nicht implizit festschreiben, wie eine create table Anweisung würde in Oracle.