【问题标题】:Mail procedure to handle CLOB data in PLSQL在 PLSQL 中处理 CLOB 数据的邮件过程
【发布时间】:2017-12-04 14:56:07
【问题描述】:

我有一个用于发送邮件的发送邮件程序。我将编写程序以从 sql 中获取值并将值传递给 send_mail 程序以接收邮件,但是当我尝试发送 1000 条记录时,它给了我数字或值错误。可以帮助我重写我的 send_mail 程序以发送 CLOB,这样大小就不会成为限制。 下面给出的是我的程序。

PROCEDURE send_mail (SUBJECT IN CLOB,MAIL_HEADER IN CLOB)
IS
      l_connection   utl_smtp.connection;
      p_smtp_hostname varchar2(200) := 'localhost';
      p_smtp_portnum varchar2(200) := '25';
      p_from varchar2(200) := 'from@mail.com';
      p_to   VARCHAR2(400) := 'to@mail.com';
   l_temp CLOB;
   p_env VARCHAR2(3000) := '';

BEGIN
   l_connection := utl_smtp.open_connection( p_smtp_hostname, p_smtp_portnum   );
   utl_smtp.helo( l_connection, p_smtp_hostname );
   utl_smtp.mail( l_connection, p_from );
   utl_smtp.rcpt(l_connection, p_to );
   utl_smtp.open_data(l_connection);
   l_temp := 'MIME-Version: 2.0' ||  chr(13) || chr(10);
   l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
   l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
   l_temp := l_temp || 'Subject: '|| SUBJECT || p_env || chr(13) || chr(10);
   l_temp := l_temp || 'Reply-To: ' ||  p_to || chr(13) || chr(10);
   l_temp := l_temp || 'Content-type: text/html;' ||
   chr(13) || chr(10) || chr(13) || chr(10);
   utl_smtp.write_data(l_connection, l_temp);
   utl_smtp.write_data(l_connection, MAIL_HEADER);
   utl_smtp.close_data(l_connection);
   utl_smtp.quit( l_connection );
 EXCEPTION
 WHEN OTHERS THEN
   RAISE;
 END send_mail;

【问题讨论】:

    标签: sql package procedure


    【解决方案1】:

    即使您将 l_temp 声明为 CLOB,这仍然会限制您输入 32767 个字符。

    这是sys.utl_smtp 包中的实际声明。所以你有你的字符限制,远少于CLOB

    PROCEDURE WRITE_DATA(
        C     IN OUT NOCOPY CONNECTION,
        DATA  IN            VARCHAR2 CHARACTER SET ANY_CS
    );
    

    您可以尝试的是,将您的 CLOB 分解为 VARCHAR 变量块并多次调用 write_data

    这个函数可以用来分割CLOB - DBMS_LOB.SUBSTR

    【讨论】:

    • 我是 PLSQL 的新手。你能告诉我我应该在哪里实现这个吗?
    • 当我尝试从第一个过程调用我的 sen_mail 过程时,我仍然收到数字或值错误
    • @jabbars 你能用你写的新代码更新你的问题吗
    • @jabbars - 您可能有的另一个选择是将数据写入文件并作为附件发送
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多