Oracle
 sql >> Base de données >  >> RDS >> Oracle

Méthode alternative aux tables temporaires globales pour la procédure stockée Oracle

Les tables T-SQL Temp sont essentiellement des structures de mémoire. Ils offrent des avantages dans MSSQL qui sont moins évidents dans Oracle, en raison des différences entre les deux architectures RDBMS. Donc, si vous cherchiez à migrer, vous seriez bien avisé d'adopter une approche plus adaptée à Oracle.

Cependant, vous avez une situation différente, et évidemment garder les deux bases de code synchronisées vous facilitera la vie.

La chose la plus proche des tables temporaires telles que vous souhaitez les utiliser sont les collections PL/SQL ; spécifiquement, les tables imbriquées.

Il existe plusieurs façons de les déclarer. La première consiste à utiliser un modèle SQL - un curseur - et à définir un type de table imbriquée en fonction de celui-ci. La seconde consiste à déclarer un type d'enregistrement, puis à définir une table imbriquée dessus. Dans les deux cas, remplissez la variable de collection avec une opération en masse.

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'utilisation d'un curseur offre l'avantage de refléter automatiquement les changements dans la ou les tables sous-jacentes. Bien que le RECORD offre l'avantage de la stabilité face aux changements dans la ou les tables sous-jacentes. Cela dépend de ce que vous voulez :)

Il y a tout un chapitre dans le manuel de référence PL/SQL. Lisez-le pour en savoir plus .