下面的代码有一个长期运行的问题,请帮助纠正这个问题。先谢谢你了。
Declare
l_status varchar2(10);
Begin
Insert into @table_name (ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD)
Select ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD
from {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}});
Commit;
For i in ( Select mfu_source.Customer_Surrogate_ID CUST_SROGT_ID, Agg.TRD_REF_NUM TRD_REF_NUM, mfu_source.Enterprise_Customer_ID ENTRP_CUST_ID_NUM
from {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}}) AGG,
{{sourceTableLatest('mfu_table')}} partition ({{getSourcePartitionNameLatest('mfu_table')}}) mfu_source
Where (mfu_source.TA_LINK_ID=AGG.TRD_REF_NUM or mfu_source.TRANSACTION_ID=AGG.TRD_REF_NUM)
and trim(AGG.ENTRP_CUST_ID_NUM) is null)
Loop
Update @table_name set ENTRP_CUST_ID_NUM= i.ENTRP_CUST_ID_NUM where TRD_REF_NUM=i.TRD_REF_NUM;
Commit;
End Loop;
END;
上面的代码需要长时间运行的问题,需要纠正的问题简单易行。
2条答案
按热度按时间j9per5c41#
你不需要一个循环,你可以用一个UPDATE语句来运行它。除此之外,您应该切换到现代的(嗯,它已经存在了20多年)ANSI连接语法。
slwdgvem2#
您可以使用单个
MERGE
语句(而不是循环中的多个语句):