sql >> Base de Datos >  >> RDS >> Oracle

SQL Server / Oracle:tablas temporales privadas

Como ha descubierto, las tablas temporales de SQL Server y Oracle son fundamentalmente diferentes.

En Oracle, las tablas temporales globales son objetos permanentes que almacenan datos temporales específicos de la sesión (o específicos de la transacción).

En SQL Server, las tablas temporales son objetos temporales que almacenan datos temporales, con #temp_tables almacenando datos que son locales para una sesión y ##temp_tables almacenando datos que son globales. (Nunca he necesitado tablas temporales globales de SQL Server y no sé qué problema resuelven). Si #temp_table se creó en un procedimiento almacenado, se descartará cuando finalice el procedimiento almacenado. De lo contrario, se eliminará cuando se cierre la sesión.

Y no, realmente no hay forma de hacer que SQL Server imite a Oracle. Podría usar una tabla normal con una columna adicional que almacene una ID de sesión. Pero no obtendría las ventajas de las tablas temporales con respecto a un menor registro. Tendría que eliminar manualmente los datos temporales. Y lidia con la limpieza de las sesiones que terminan prematuramente.

EDITAR: Otra diferencia entre Oracle y SQL Server es que SQL Server permite que DDL se incluya en una transacción con otras declaraciones. Entonces, si necesita usar una tabla temporal como parte de una transacción más grande, create table #table_name... declaración no confirmará implícitamente la transacción actual como un create table declaración sería en Oracle.