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 和优先级 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 查询,例如select 1 from alloc where alloc_id =:alloc;-- 它是一个示例查询,但它始终包含绑定变量: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 的记录,我获取第一条记录并运行excep_base_sql带有alloc_id11 的记录,如果返回行,那么我将excep_attribute使用临时表中的 A 更新 A,XYZ然后跳过优先级为 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

我要推荐两件事。

1) 在进行批量插入时,插入作为选择或创建表作为选择始终是最有效的。

2)“听起来”就像您正在尝试将行转换为列。我会推荐 Oracle 的数据透视功能。此处描述了枢轴功能: Oracle Base Pivot

于 2012-05-13T15:36:12.903 回答