sql >> Database >  >> RDS >> Oracle

Alternatieve methode voor globale tijdelijke tabellen voor Oracle Stored Procedure

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 .




  1. een waarde van een variabele afdrukken in postgresql

  2. Oracle-database:DBMS_ALERT-gebruik met Java-toepassing

  3. datetime2 vs smalldatetime in SQL Server:wat is het verschil?

  4. MYSQL vinden hoe verschillend twee tekstvelden zijn?