T-SQL Temp-tabellen zijn in wezen geheugenstructuren. Ze bieden voordelen in MSSQL die minder duidelijk zijn in Oracle, vanwege verschillen in de twee RDBMS-architecturen. Dus als u wilt migreren, doet u er goed aan een aanpak te kiezen die beter bij Oracle past.
U hebt echter een andere situatie en het is duidelijk dat het gesynchroniseerd houden van de twee codebases uw leven gemakkelijker zal maken.
Het dichtst bij tijdelijke tabellen zoals u ze wilt gebruiken, zijn PL/SQL-verzamelingen; specifiek geneste tabellen.
Er zijn een aantal manieren om deze te declareren. De eerste is om een SQL-sjabloon te gebruiken - een cursor - en op basis daarvan een genest tabeltype te definiëren. De tweede is om een recordtype te declareren en vervolgens een geneste tabel daarop te definiëren. Vul in beide gevallen de verzamelingsvariabele in met een bulkbewerking.
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;
/
Het gebruik van een cursor biedt het voordeel dat wijzigingen in de onderliggende tabel(len) automatisch worden weergegeven. Hoewel de RECORD het voordeel biedt van stabiliteit bij veranderingen in de onderliggende tabel(len). Het hangt er gewoon van af wat je wilt :)
Er is een heel hoofdstuk in de PL/SQL-referentiehandleiding. Lees het voor meer informatie .