Oracle
 sql >> база данни >  >> RDS >> Oracle

Алтернативен метод на глобалните временни таблици за Oracle Stored Procedure

T-SQL Temp таблиците са по същество структури на паметта. Те предоставят предимства в MSSQL, които са по-малко очевидни в Oracle, поради разликите в двете RDBMS архитектури. Така че, ако искате да мигрирате, би било добре да приемете подход, който е по-подходящ за Oracle.

Вие обаче имате различна ситуация и очевидно синхронизирането на двете кодови бази ще улесни живота ви.

Най-близкото нещо до временните таблици, както искате да ги използвате, са PL/SQL колекциите; конкретно, вложени таблици.

Има няколко начина да ги декларирате. Първият е да използвате SQL шаблон - курсор - и да дефинирате тип вложена таблица въз основа на него. Второто е да декларирате тип запис и след това да дефинирате вложена таблица върху него. И в двата случая попълнете променливата за събиране с групова операция.

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

Използването на курсор предлага предимството на автоматично отразяване на промените в основната(ите) таблица(и). Въпреки че RECORD предоставя предимството на стабилност при промени в основната(ите) таблица(и). Зависи какво искаш :)

Има цяла глава в справочното ръководство за PL/SQL. Прочетете го, за да научите повече .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпращане на масив от стойности към процедурата на Oracle за използване в клаузата WHERE IN

  2. ORA-00904:невалиден идентификатор

  3. Защита на базата данни на Oracle – криптиране и декриптиране

  4. Как да анализирате xml от xmltable, когато използвате пространство от имена в xml (Oracle)

  5. Как да добавите коментари към таблица в Oracle SQL Developer?