T-SQL Temp таблиците са по същество структури на паметта. Те предоставят предимства в MSSQL, които са по-малко очевидни в Oracle, поради разликите в двете RDBMS архитектури. Така че, ако искате да мигрирате, би било добре да приемете подход, който е по-подходящ за Oracle.
Вие обаче имате различна ситуация и очевидно синхронизирането на двете кодови бази ще улесни живота ви.
Най-близкото нещо до временните таблици, както искате да ги използвате, са PL/SQL колекциите; конкретно, вложени таблици.
Има няколко начина да ги декларирате. Първият е да използвате SQL шаблон - курсор - и да дефинирате тип вложена таблица въз основа на него. Второто е да декларирате тип запис и след това да дефинирате вложена таблица върху него. И в двата случая попълнете променливата за събиране с групова операция.
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;
/
Използването на курсор предлага предимството на автоматично отразяване на промените в основната(ите) таблица(и). Въпреки че RECORD предоставя предимството на стабилност при промени в основната(ите) таблица(и). Зависи какво искаш :)
Има цяла глава в справочното ръководство за PL/SQL. Прочетете го, за да научите повече .