1
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 fromDefault_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_sqlselect 1 from alloc where alloc_id =:alloc;サンプルクエリのようなSQLクエリが含まれていますが、常にバインド変数が含まれています: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_typeasappleとt t_typeを持つレコードを検索します。buy

    5.したがって、acc_excep_id:のレコード1,2 がフェッチされ、最初のレコードをフェッチして11で実行します。excep_base_sqlalloc_idが返された場合は、一時テーブルのexcep_attributeAを更新してXYZから、優先度2の2番目のレコードをスキップします。これは、優先度が1のレコードであるためです。満足させる 。

    6. execptionsテーブルにのエントリapple buyが存在しない場合は、一時テーブルにdefault_accountsテーブルを設定する必要があるため、この値はYです。

    7.したがって、例外が満たされない場合は、デフォルト値がから選択されdefault_accountsます。

    8.要するに、私A B C Dはテーブルのの値を入力する必要がありますtemp

    9.値の一時テーブルにデータを効率的に入力する方法が必要ですA B C D

誰かがこのアプローチで私を助けることができますか

4

1 に答える 1

0

2つのことをお勧めします。

1) 選択としての挿入または選択としてのテーブルの作成は、一括挿入を行うときに常に最も効率的です。

2)行を列に変換しようとしているように「聞こえます」。Oracle のピボット機能をお勧めします。ピボット機能については、 Oracle Base Pivotで説明しています。

于 2012-05-13T15:36:12.903 に答える