我有一个过程,该过程中的一个特定查询生成了大约50GB的临时空间,在执行几次后便导致以下异常:
SQL状态[72000];错误代码[1652]; ORA-01652:无法在表空间TEMP中将临时段扩展128。
DBA指向存储过程中需要重写的以下查询。以下查询中使用的表小于0.1 GB,但查询会生成50GB的临时空间!
SELECT tab1.ORDID ID1, tab2.ORDID ID2
FROM (
SELECT
OT.ORDID,
CONNECT_BY_ROOT OT.UNIQ_ORIG_KEY ORIG_UID
FROM order_tab OT, status_tab ST
WHERE OT.otype IN ('A','B')
AND OT.order_uid IS NULL
AND OT.BATCH_ID = ST.BATCH_ID
AND ST.CT_DATE = :A1
AND ST.BSTATUS = 1
CONNECT BY PRIOR OT.UNIQ_KEY = OT.UNIQ_ORIG_KEY
) tab1 , order_tab tab2
WHERE tab2.ORD_VERID = 1
AND tab1.ORIG_UID = tab2.UNIQ_KEY
ORDER BY ID1;
请有人帮忙有效地重写查询,以减少临时空间利用率。数据库使用Oracle 12c。