2012-04-01 97 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