我有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)和日期分区。
Oracle出现以下错误:
SQL错误:ORA-01652:无法将临时段扩展64英寸 表空间TEMP
答案 0 :(得分:0)
一个选项是扩大临时表空间(但是,无论如何可能还不够),或者首先创建表并部分插入数据,特别是当你说那里有分区时。
顺便问一下,为什么要这样创建表?这很不寻常;一般来说,你应该在SQL中创建表,而不是PL / SQL。
答案 1 :(得分: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万行的临时表。听起来有点怀疑。