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

Oracle Sql :Procedura che può creare tabelle temporanee al suo interno

Perché in primo luogo vuoi creare una tabella temporanea in una procedura memorizzata?

È relativamente comune creare tabelle temporanee in altri database (SQL Server e MySQL, ad esempio). È molto, molto raro fare la stessa cosa in Oracle. In quasi tutti i casi in cui sei tentato di creare una tabella temporanea in Oracle, esiste un approccio architetturale migliore. C'è un thread sullo stack DBA che discute di alternative alle tabelle temporanee e perché non sono comunemente necessari in Oracle.

A livello di codice, puoi creare oggetti utilizzando SQL dinamico

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

Se crei una tabella temporanea in modo dinamico, tuttavia, ogni riferimento a quella tabella dovrà anche essere tramite SQL dinamico:non sarai in grado di scrivere semplice SELECT dichiarazioni contro il tavolo. E la definizione di una tabella temporanea in Oracle è globale, quindi è visibile a ogni sessione. Se hai due sessioni diverse che tentano di creare la stessa tabella, la seconda sessione riceverà un errore. Se ti aspetti che la tabella abbia una definizione diversa in sessioni diverse, hai ancora più problemi.