Эффективный подход к заполнению временной таблицы
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
Теперь мое требование состоит в том, чтобы у меня был курсор, содержащий записи
alloc_id ,p_type,t_type
Я помещаю записи во временную таблицу, имеющую структуру, как показано ниже:
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