Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SQL Server/Oracle:tabelas temporárias privadas


Como você descobriu, as tabelas temporárias do SQL Server e Oracle são fundamentalmente diferentes.

No Oracle, as tabelas temporárias globais são objetos permanentes que armazenam dados temporários específicos da sessão (ou específicos da transação).

No SQL Server, tabelas temporárias são objetos temporários que armazenam dados temporários, com #temp_tables armazenando dados locais para uma sessão e ##temp_tables armazenando dados globais. (Nunca precisei de tabelas temporárias globais do SQL Server e não sei qual problema elas resolvem.) Se a #temp_table foi criada em um procedimento armazenado, ela será descartada quando o procedimento armazenado for encerrado. Caso contrário, ele será descartado quando a sessão for encerrada.

E não, realmente não há uma maneira de fazer o SQL Server imitar o Oracle. Você pode usar uma tabela normal com uma coluna extra armazenando um ID de sessão. Mas você não obteria as vantagens das tabelas temporárias em relação a menos logs. Você teria que excluir manualmente os dados temporários. E lide com a limpeza de sessões que pararam prematuramente.

EDITAR: Outra diferença entre o Oracle e o SQL Server é que o SQL Server permite que o DDL seja encapsulado em uma transação com outras instruções. Portanto, se você precisar usar uma tabela temporária como parte de uma transação maior, create table #table_name... A instrução não confirmará implicitamente a transação atual como uma create table declaração seria no Oracle.