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

Oracle SQL :Procedure, der kan oprette midlertidige tabeller inde i den

Hvorfor vil du i første omgang oprette en midlertidig tabel i en lagret procedure?

Det er relativt almindeligt at oprette midlertidige tabeller i andre databaser (f.eks. SQL Server og MySQL). Det er meget, meget sjældent at gøre det samme i Oracle. I næsten alle tilfælde, hvor du bliver fristet til at oprette et midlertidigt bord i Oracle, er der en bedre arkitektonisk tilgang. Der er en tråd på DBA-stakken, der diskuterer alternativer til midlertidige tabeller og hvorfor de ikke er almindeligt nødvendige i Oracle.

Programmatisk kan du oprette objekter ved hjælp af dynamisk SQL

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

Hvis du opretter en midlertidig tabel dynamisk, skal hver reference til den tabel også være via dynamisk SQL-- du vil ikke være i stand til at skrive simpel SELECT udsagn mod bordet. Og definitionen af ​​en midlertidig tabel i Oracle er global, så den er synlig for hver session. Hvis du har to forskellige sessioner, der begge forsøger at oprette den samme tabel, vil den anden session få en fejl. Hvis du forventer, at tabellen har en anden definition i forskellige sessioner, har du endnu flere problemer.



  1. PHP/MySQL - Inkrementering af variabelnavnet til løkke for data

  2. SYSTIMESTAMP Funktion i Oracle

  3. PostgreSQL - forespørgselssyntaks uden anførselstegn

  4. Tæl forekomst af værdier i en serialiseret attribut (array) i Active Admin dashboard (Rails, Active admin 1.0, Postgresql database, postgres_ext gem)