Oracle
 sql >> Database >  >> RDS >> Oracle

SQL Server / Oracle:tabelle temporanee private

Come hai scoperto, le tabelle temporanee di SQL Server e Oracle sono fondamentalmente diverse.

In Oracle le tabelle temporanee globali sono oggetti permanenti che memorizzano dati temporanei specifici della sessione (o della transazione).

In SQL Server le tabelle temporanee sono oggetti temporanei che archiviano dati temporanei, con #temp_tables che archivia i dati locali in una sessione e ##temp_tables che archivia i dati globali. (Non ho mai avuto bisogno di tabelle temporanee globali di SQL Server e non so quale problema risolvono.) Se la #temp_table è stata creata in una procedura memorizzata, verrà eliminata all'uscita della procedura memorizzata. Altrimenti verrà eliminato alla chiusura della sessione.

E no, non c'è davvero un modo per fare in modo che SQL Server imiti Oracle. È possibile utilizzare una tabella normale con una colonna aggiuntiva che memorizza un ID di sessione. Ma non otterresti i vantaggi delle tabelle temporanee rispetto a una minore registrazione. Dovresti eliminare manualmente i dati temporanei. E occupati della pulizia dalle sessioni che si sono chiuse prematuramente.

MODIFICA: Un'altra differenza tra Oracle e SQL Server è che SQL Server consente di eseguire il wrapping di DDL in una transazione con altre istruzioni. Quindi, se devi utilizzare una tabella temporanea come parte di una transazione più ampia, create table #table_name... l'istruzione non eseguirà il commit implicito della transazione corrente come un create table istruzione sarebbe in Oracle.