2015-01-01 71 views
0

我有以下過程中,電子郵件程序需要長時間來執行

PROCEDURE SEND_TO_MAILING_LIST 
(P_MAILING_LIST IN VARCHAR2 
,P_SUBJECT IN VARCHAR2 
,P_TEXT IN VARCHAR2 
,P_STATUS OUT NUMBER 
) 
IS 
CURSOR mail_cur IS 
SELECT x.forenames||'.'||x.surname||'@xyz.com' mail_alias 
FROM ABC a, XYZ x 
WHERE a.id = x.id 
AND a.list_name = 'DEF' 
AND  a.id <> 274 
Union All 
SELECT x.forenames||'.'||x.surname||'@abc.com' mail_alias 
FROM ABC a, XYZ x 
WHERE a.id = x.id 
AND x.list_name = 'DEF' 
AND  a.id = 274 
Union All 
SELECT x.other_to_email mail_alias 
FROM ABC a, XYZ x 
AND a.list_name = 'PQR'; 
BEGIN 
p_status := 1; 
FOR rec IN mail_cur LOOP 
     MAILX(rec.mail_alias, 'TESTING PURPOSE','TESTING','TEST'); 
END LOOP; 
EXCEPTION WHEN OTHERS THEN 
p_status := -1; 
END; 

這在執行需要5分鐘,發送電子郵件到想要的人。個別查詢僅導致幾行(小於5)

這種延遲的原因是什麼?

+0

_Without_的LOOP,手續快? –

+0

Oracle!= MySQL,我刪除了無關標籤。 – Barmar

+0

它也需要太多的時間沒有循環。它與內置的mailx proc問題我猜。任何建議來克服這種延遲? –

回答

0

請嘗試像下面

SELECT decode(a.list_name,'DEF',x.forenames||'.'||x.surname||decode(a.id,274,'@abc.com','@xyz.com'), x.other_to_email mail_alias) 
mail_alias 
FROM ABC a, XYZ x 
WHERE a.id = x.id 
AND a.list_name in ('DEF','PQR'); 
相關問題