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
:来自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
:它包含一个像select 1 from alloc where alloc_id =:alloc;
这样的SQL查询 - 一个示例查询,但它始终包含bind 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
t_type
buy
按优先顺序按升序排序。
5.因此,获取acc_excep_id
:1,2
的记录,我获取第一条记录并运行excep_base_sql
alloc_id
11,如果返回行,那么我将更新
临时表中excep_attribute
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
的临时表中。
任何人都可以帮我解决这个问题
答案 0 :(得分:0)
我要推荐两件事。
1)在执行批量插入时,作为select的select或create table的插入始终是最有效的。
2)它“听起来”就像你试图将行转换为列。我会推荐Oracle的支点功能。此处描述了数据透视功能:Oracle Base Pivot