Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Alternative Methode zu globalen temporären Tabellen für gespeicherte Oracle-Prozeduren

T-SQL Temp-Tabellen sind im Wesentlichen Speicherstrukturen. Sie bieten in MSSQL Vorteile, die in Oracle aufgrund der Unterschiede zwischen den beiden RDBMS-Architekturen weniger offensichtlich sind. Wenn Sie also migrieren möchten, sind Sie gut beraten, einen Ansatz zu wählen, der besser zu Oracle passt.

Sie haben jedoch eine andere Situation, und offensichtlich wird es Ihnen das Leben leichter machen, die beiden Codebasen synchron zu halten.

Was temporären Tabellen am nächsten kommt, wenn Sie sie verwenden möchten, sind PL/SQL-Sammlungen. insbesondere verschachtelte Tabellen.

Es gibt ein paar Möglichkeiten, diese zu deklarieren. Die erste besteht darin, eine SQL-Vorlage – einen Cursor – zu verwenden und darauf basierend einen verschachtelten Tabellentyp zu definieren. Die zweite besteht darin, einen Datensatztyp zu deklarieren und dann eine verschachtelte Tabelle darauf zu definieren. Füllen Sie in jedem Fall die Erfassungsvariable mit einer Massenoperation.

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;
/

Die Verwendung eines Cursors bietet den Vorteil, dass Änderungen in der/den zugrunde liegenden Tabelle(n) automatisch widergespiegelt werden. Obwohl der RECORD den Vorteil der Stabilität angesichts von Änderungen in der/den zugrunde liegenden Tabelle(n) bietet. Es kommt nur darauf an, was du willst :)

Es gibt ein ganzes Kapitel im PL/SQL-Referenzhandbuch. Lesen Sie es, um mehr zu erfahren .