【问题标题】:CLOB IS VERY SLOWCLOB 非常慢
【发布时间】:2013-12-13 20:36:59
【问题描述】:

我在 DB ORACLE 上发送带有附件的电子邮件。我形成了这个附件,但它非常非常慢

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; 

有没有变种如何优化这个过程?

【问题讨论】:

  • 仅仅因为您可以使用特定技术做某事并不意味着您应该。这看起来像是应用程序/脚本语言的工作 - 我不会使用存储过程。
  • 问题已解决!重新提出请求并摆脱了clob。使用带 varchar 的行传递。
  • 用户说他在其他地方找到了解决方案。
  • @user3043884 你应该发布你找到的答案并“接受”它。

标签: database oracle clob


【解决方案1】:

您可以使用 VARCHAR2 缓冲区 获取最大 32k 的数据块,然后使用 dbms_lob.writeappend 组成 CLOB。

此外,您可以在 SQL 本身中进行一些预连接(只是不要在那里使用像 UTL_TCP.crlf 这样的 pl/sql 函数。

这就是一般的想法。 您也可以check this post,获取一些测试结果。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2021-02-12
    • 2017-12-12
    • 2015-06-14
    • 2013-05-14
    • 2021-05-24
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多