2013-11-27 288 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,得到一些测试结果