sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL :Procedur som kan skapa tillfälliga tabeller inuti den

Varför vill du skapa en tillfällig tabell i en lagrad procedur?

Det är relativt vanligt att skapa tillfälliga tabeller i andra databaser (exempelvis SQL Server och MySQL). Det är väldigt, väldigt sällsynt att göra samma sak i Oracle. I nästan varje fall där du är frestad att skapa ett tillfälligt bord i Oracle, finns det ett bättre arkitektoniskt tillvägagångssätt. Det finns en tråd på DBA-stacken som diskuterar alternativ till tillfälliga tabeller och varför de inte är vanliga i Oracle.

Programmatiskt kan du skapa objekt med dynamisk SQL

CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;

Om du skapar en temporär tabell dynamiskt måste dock varje referens till den tabellen också vara via dynamisk SQL-- du kommer inte att kunna skriva enkel SELECT uttalanden mot bordet. Och definitionen av en tillfällig tabell i Oracle är global så den är synlig för varje session. Om du har två olika sessioner som båda försöker skapa samma tabell, kommer den andra sessionen att få ett felmeddelande. Om du förväntar dig att tabellen ska ha en annan definition i olika sessioner, har du ännu fler problem.



  1. Ändra tabellmotor i MySQL

  2. WSO2 API Manager:chpasswd.sh fungerar inte när du använder extern databas

  3. Hur man inaktiverar alla utländska nyckelbegränsningar i SQL Server-databasen - SQL Server / TSQL självstudie del 77

  4. Olaglig blandning av sammanställningar (latin1_swedish_ci,COERCIBLE) och (utf8_general_ci,IMPLICIT) för operation 'find_in_set'