2013-11-27 283 views
0

我發送電子郵件附件DB DB ORACLE。我形成這個附件,但它非常慢CLOB非常慢

FOR x IN (select * 
from l_sulkk 
where PROJECT_ID = proj_id) 
    LOOP 
     v_clob := 
       v_clob 
      || x.CONTRACT_NUMBER 
      || ';' 
      || TO_CHAR(x.PERSON_ID) 
      || ';' 
      || x.BEHAV_MODEL 
      || ';' 
      || TO_CHAR(x.BEHAV_MODEL#DATE_CALC, 'dd.mm.yyyy hh24:mi:ss') 
      || ';' 
      || TO_CHAR(x.DATE_INSERT, 'dd.mm.yyyy hh24:mi:ss') 
      || ';' 
      || TO_CHAR(x.DONE_DATE, 'dd.mm.yyyy hh24:mi:ss') 
      || ';' 
      || x.ERROR_MSG 
      || ';' 
      || TO_CHAR(x.PHONES_ID) 
      || ';' 
      || x.PHONES_NUM 
      || ';' 
      || TO_CHAR(x.INFORMER_PK) 
      || ';' 
      || TO_CHAR(x.CLIENT_TIME_ZONE) 
      || ';' 
      || x.CITIES_KID_FACT*/ 
      || UTL_TCP.crlf; 

    END LOOP; 

有什麼變體如何優化這個過程?

+0

僅僅因爲你*可以*用某種技術做某事並不意味着你*應該*這看起來像是應用程序/腳本語言的工作 - 我不會使用存儲過程 – Bohemian

+0

問題已經解決了!重新制作請求並刪除了clob。使用線路通過varchar。 – user3043884

+2

用戶說他在其他地方得到了解決方案。 – eaolson

回答

0

您可以使用VARCHAR2緩衝得到的數據塊高達32K,然後用 dbms_lob.writeappend形成CLOB。

另外,你可以做在SQL本身的一些預連接的(只是不使用PL/SQL的功能,如UTL_TCP.crlf那裏。

那的總體思路。 您也可以check this post,得到一些測試結果