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

Alternativ metode til globale midlertidige tabeller for Oracle Stored Procedure

T-SQL Temp-tabeller er i det væsentlige hukommelsesstrukturer. De giver fordele i MSSQL, som er mindre indlysende i Oracle på grund af forskelle i de to RDBMS-arkitekturer. Så hvis du var på udkig efter at migrere, ville du være klogt i at tage en tilgang, der er mere tilpasset Oracle.

Du har dog en anden situation, og det vil naturligvis gøre dit liv lettere at holde de to kodebaser synkroniseret.

Det tætteste på midlertidige tabeller, som du vil bruge dem, er PL/SQL-samlinger; specifikt indlejrede tabeller.

Der er et par måder at erklære disse på. Den første er at bruge en SQL-skabelon - en markør - og definere en indlejret tabeltype baseret på den. Den anden er at erklære en posttype og derefter definere en indlejret tabel på den. I begge tilfælde skal du udfylde samlingsvariablen med en masseoperation.

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

Brug af en markør giver fordelen ved automatisk at afspejle ændringer i den eller de underliggende tabeller. Selvom RECORD giver fordelen ved stabilitet i lyset af ændringer i de underliggende tabeller. Det kommer bare an på, hvad du vil have :)

Der er et helt kapitel i PL/SQL-referencemanualen. Læs den for at finde ud af mere .




  1. Hvordan undslipper jeg reserverede ord, der bruges som kolonnenavne? MySQL/Opret tabel

  2. Viser et JSON-datasæt som en tabel med Node.js og Express

  3. Fælles tabeludtryk i MySQL

  4. c# Har problemer med mysql:Forkert strengværdikode 1366 for kolonne i række 1