sql >> Databasteknik >  >> RDS >> Oracle

SQL Server / Oracle:Privata temporära tabeller

Som du har upptäckt är temporära tabeller i SQL Server och Oracle fundamentalt olika.

I Oracle är globala temporära tabeller permanenta objekt som lagrar tillfälliga sessionsspecifika (eller transaktionsspecifika) data.

I SQL Server är temporära tabeller temporära objekt som lagrar temporär data, med #temp_tables som lagrar data som är lokal för en session och ##temp_tables som lagrar data som är global. (Jag har aldrig haft behov av SQL Server globala temp-tabeller och vet inte vilket problem de löser.) Om #temp_table skapades i en lagrad procedur kommer den att tas bort när den lagrade proceduren avslutas. Annars kommer den att tas bort när sessionen stänger.

Och nej, det finns verkligen inget sätt att få SQL Server att efterlikna Oracle. Du kan använda en normal tabell med en extra kolumn som lagrar ett sessions-ID. Men du skulle inte få fördelarna med temporära tabeller med avseende på mindre loggning. Du måste manuellt radera temporära data. Och ta itu med att städa upp från sessioner som avslutas i förtid.

EDIT: En annan skillnad mellan Oracle och SQL Server är att SQL Server tillåter DDL att slås in i en transaktion med andra uttalanden. Så om du behöver använda en tillfällig tabell som en del av en större transaktion, create table #table_name... uttalandet kommer inte implicit att utföra den aktuella transaktionen som en create table uttalande skulle i Oracle.



  1. Hur man skriver SQL-fråga för att ta reda på summan av de högsta 4 kolumnerna av 5 kolumner?

  2. Hur lagrar man en butiks öppettider i en SQL-databas?

  3. Konfigurerar UTL_MAIL-paketförutsättningar

  4. Hur kan jag låsa en InnoDB-tabell för att förhindra uppdateringar medan den tabellen kopieras?