Oracle
 sql >> Database >  >> RDS >> Oracle

Metodo alternativo alle tabelle temporanee globali per Oracle Stored Procedure

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ù .