Le tabelle T-SQL Temp sono essenzialmente strutture di memoria. Forniscono vantaggi in MSSQL che sono meno evidenti in Oracle, a causa delle differenze nelle due architetture RDBMS. Quindi, se stai cercando di migrare, ti consigliamo di adottare un approccio più adatto a Oracle.
Tuttavia, hai una situazione diversa e ovviamente mantenere sincronizzate le due basi di codice ti semplificherà la vita.
La cosa più vicina alle tabelle temporanee come vuoi usarle sono le raccolte PL/SQL; in particolare, tabelle nidificate.
Ci sono un paio di modi per dichiararli. Il primo consiste nell'utilizzare un modello SQL, un cursore, e definire un tipo di tabella nidificata basato su di esso. Il secondo è dichiarare un tipo di record e quindi definire una tabella nidificata su di esso. In entrambi i casi, compila la variabile di raccolta con un'operazione in blocco.
declare
-- approach #1 - use a cursor
cursor c1 is
select *
from t23;
type nt1 is table of c1%rowtype;
recs1 nt1;
-- approach #1a - use a cursor with an explicit projection
cursor c1a is
select id, col_d, col_2
from t23;
type nt1a is table of c1a%rowtype;
recs1 nt1a;
-- approach #2 - use a PL/SQL record
type r2 is record (
my_id number
, some_date date
, a_string varchar2(30)
);
type nt2 is table of r2;
recs2 nt2;
begin
select *
bulk collect into recs1
from t23;
select id, col_d, col_2
bulk collect into recs2
from t23;
end;
/
L'utilizzo di un cursore offre il vantaggio di riflettere automaticamente le modifiche nelle tabelle sottostanti. Sebbene il RECORD offra il vantaggio della stabilità di fronte ai cambiamenti nelle tabelle sottostanti. Dipende solo da cosa vuoi :)
C'è un intero capitolo nel manuale di riferimento PL/SQL. Leggilo per saperne di più .