2012-04-01 64 views
1
Default_accounts 
======================== 
p_type  varchar2 
t_type  varchar2 
A   varchar2 
B   varchar2 
C    varchar2 
D    varchar2 
========================= 

p_typet_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和優先 foreign_key:P_TYPE和t_type從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一樣的SQL查詢--its一個簡單的查詢,但它始終包含綁定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.But你看,我需要填充散裝A,B,C和d值,臨時表可以CONTA在millions of record左右。

    4.爲了填充我需要首先檢查account_exceptions表的任何異常的值。 例如:我從臨時表中提取11 apple buy並查看異常表,在異常表中查找具有p_typeapplet_typebuy的記錄按優先級順序排列。

    5.So,記錄與acc_excep_id1,2是牽強,我取第一個記錄和excep_base_sqlalloc_id 11運行,如果返回行的話,我會更新 的excep_attribute A和在臨時表XYZ然後跳過第二優先級爲2的記錄,因爲優先級爲1的記錄滿足。

    6.如果在execptions表中沒有apple buy的條目,那麼我需要用default_accounts表填充臨時表,所以這個值是Y

    7.所以,如果沒有異常情況,那麼默認值是default_accounts

    8.總之,我需要在表temp中填入A B C D的值。

    9.我需要一種方法來有效地將數據填充到臨時表中以獲取值A B C D

誰能幫我用這種方法

+0

@Justin洞穴:你可以建議一個更好的方法來填充表 – 2012-04-01 18:28:57

+0

這是你需要定期或只是一次做的事嗎? – 2012-04-02 07:05:41

+0

@ABCade:不常規,一個月一次,我的想法是將該值存儲在臨時表中,然後將該臨時表的光標返回到表xyz中。之後,所有的獲取都是從xyz表 – 2012-04-02 07:39:32

回答

0

我要推薦兩件事情。

1)插入作爲選擇或創建表作爲選擇總是最有效的時候做一個批量插入。

2)它聽起來像你試圖將行轉換爲列。我會推薦Oracle的主要功能。樞軸功能在這裏描述:Oracle Base Pivot