Эффективный подход к заполнению временной таблицы

Default_accounts
========================
p_type        varchar2
t_type        varchar2
A         varchar2
B         varchar2
C             varchar2
D             varchar2
=========================

p_type а также t_type является первичным ключом таблицы

p_type  t_type  A   B  C  D
============================
apple    sell   Y   N  N  Y
banana   buy    N   N  N  Y
orange   sell   Y   N  N  N
mango    buy    Y   Y  N  Y
papaya   buy    Y   N  N  Y
apple    buy    Y   N  N  Y
banana   sell   Y   Y  Y  Y
============================


 Accounts_Exceptions
=============================
acc_excep_id          number    --sequence (Primary key)
p_type                varchar2
t_type                varchar2
excep_attribute       varchar2  --contains column of default_accounts like A,B,C,D
priority              number
excep_base_sql        varchar2
excep_value           varchar2
===============================

Unique constraint:p_type,t_type,excep_attribute и priority foreign_key: p_type и t_type from Default_accounts

  acc_excep_id   p_type    t_type  excep_attribute priority  excep_base_sql   excep_value
---------------------------------------------------------------------------------------------
     1           apple    buy       A              1         --some--         XYZ
     2           apple    buy       A              2         --some--         PQR
     3           banana   sell      B              1         --some--         GHT
     4           banana   sell      B              2         --some--         GFF
     5           orange   sell      C              1         --some--         DSA    
---------------------------------------------------------------------------------------------

excep_base_sql: он содержит SQL-запрос, как select 1 from alloc where alloc_id =:alloc; - это пример запроса, но он всегда содержит привязку vairable:alloc

  1. Теперь мое требование состоит в том, чтобы у меня был курсор, содержащий записи alloc_id ,p_type,t_type

  2. Я помещаю записи во временную таблицу, имеющую структуру, как показано ниже:

     alloc_id p_type  t_type  A   B    C   D
    ---------------------------------------------
     11       apple   buy    
     22       apple   sell
     33       mango   buy
     12       mango   buy
     13       mango   buy
     24       banana  buy
     54       orange  sell
    

    3. Но, как вы видите, мне нужно заполнить значения A,B,C и D навалом, временная таблица может содержать около millions of record,

    4. Для заполнения значения мне нужно сначала проверить таблицу account_exceptions на наличие каких-либо исключений. Например: я принес 11 apple buy из временной таблицы и увидеть таблицу исключений, В таблице исключений найти записи, имеющие p_type как apple и тt_type как buy порядок по приоритету в порядке возрастания.

    5. Так, записи с acc_excep_id:1,2 я получаю первую запись и запускаю excep_base_sql с alloc_id 11, если строка возвращается, я обновлю excep_attribute А с XYZ во временной таблице, а затем пропустите вторую запись, имеющую приоритет 2, потому что запись с приоритетом один удовлетворяет.

    6. Если нет записи apple buy присутствует в таблице execptions, тогда мне нужно заполнить временную таблицу таблицей default_accounts, поэтому это значение Y,

    7.Таким образом, если исключение не удовлетворяет, выбирается значение по умолчанию default_accounts,

    8. Короче говоря, мне нужно заполнить значение A B C D в таблице temp,

    9. Мне нужен способ эффективного заполнения данных во временной таблице для значения A B C D,

Может ли кто-нибудь помочь мне с этим подходом

1 ответ

Я собираюсь рекомендовать две вещи.

1) Вставка как выбор или создание таблицы как выбор всегда наиболее эффективны при массовой вставке.

2) Звучит так, будто вы пытаетесь преобразовать строки в столбцы. Я бы порекомендовал Oracle Pivot особенность. Сводная функция описана здесь: Oracle Base Pivot

Другие вопросы по тегам