Tabele T-SQL Temp są zasadniczo strukturami pamięci. Zapewniają korzyści w MSSQL, które są mniej oczywiste w Oracle, ze względu na różnice w dwóch architekturach RDBMS. Więc jeśli chcesz przeprowadzić migrację, dobrze byłoby zastosować podejście bardziej dopasowane do Oracle.
Jednak masz inną sytuację i oczywiście synchronizacja dwóch baz kodu ułatwi ci życie.
Najbliższe tabelom tymczasowym są kolekcje PL/SQL; w szczególności tabele zagnieżdżone.
Istnieje kilka sposobów na ich zadeklarowanie. Pierwszym z nich jest użycie szablonu SQL – kursora – i zdefiniowanie na jego podstawie typu zagnieżdżonej tabeli. Drugim jest zadeklarowanie typu rekordu, a następnie zdefiniowanie na nim zagnieżdżonej tabeli. W obu przypadkach wypełnij zmienną kolekcji operacją zbiorczą.
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;
/
Korzystanie z kursora ma tę zaletę, że automatycznie odzwierciedla zmiany w tabeli lub tabelach źródłowych. Chociaż RECORD zapewnia przewagę stabilności w obliczu zmian w tabeli(ach) poniżej. To zależy od tego, czego chcesz :)
W podręczniku PL/SQL znajduje się cały rozdział. Przeczytaj go, aby dowiedzieć się więcej .