Oracle加入两个巨大的表

问题描述 投票:0回答:2

我有Oracle程序,它包含一些EXECUTE IMMEDIATE块。其中之一 - 加入两个大表(约100-200,000,000条记录):

 v_sql:='create table idb.cm_contact_add_char_exp_tmp as  
select ch.* from idb.cm_contact_add_char_exp ch  join
idb.communication_contact_exp_tmp cont on  cont.customer_rk=ch.customer_rk and ch.RESPONSE_TRACK_CD=cont.RESPONSE_TRACK_CD'

execute immediate v_sql;

第一个表(CH)具有索引(CUSTOMER_RK,RESPONSE_TRACK_CD)和日期分区。

SQL_PLAN:enter image description here

Oracle给出以下错误:

SQL错误:ORA-01652:无法在表空间TEMP中将临时段扩展64

sql oracle query-optimization temp
2个回答
0
投票

一种选择是扩大临时表空间(尽管可能不够),或者首先创建表并部分插入数据,特别是当你说那里有分区时。

顺便问一下,为什么要这样创建表?这很不寻常;一般来说,你应该在SQL中创建表,而不是PL / SQL。


0
投票

另一种可能性是首先动态创建表 - 如果这真的是你需要的 - 使用

CREATE TABLE idb.cm_contact_add_char_exp_tmp AS
SELECT ch.*
  FROM idb.cm_contact_add_char_exp ch  
 WHERE 1=0

然后使用批量FORALL操作从源表中插入记录。

我会问为什么你需要看起来像一个包含大约200万行的临时表。听起来有点怀疑我。

© www.soinside.com 2019 - 2024. All rights reserved.