Oracle apex APEX:mysql中的blob数据来自查询并作为CSV输出

Oracle apex APEX:mysql中的blob数据来自查询并作为CSV输出,oracle-apex,apex,apex-code,Oracle Apex,Apex,Apex Code,早上好,伙计们,这件事真的需要你们的帮助。 我有一个表中的查询,我需要使用oracle apex将其作为CSV附件发送到电子邮件中。这就是所有这些的目标——乐于探索不同的选项/sql以获得相同的结果(通过oracle apex) 示例查询:从用户数据库中选择用户、标题、部门,其中dept=:DEPARTMENT 我的查询带回了大量数据(预期) 基于此,我的想法是将此查询变成一个BLOB,并将其保存到另一个表(TBL\u EMAIL\u CONTENT),然后我可以使用APEX\u MAIL.AD

早上好,伙计们,这件事真的需要你们的帮助。 我有一个表中的查询,我需要使用oracle apex将其作为CSV附件发送到电子邮件中。这就是所有这些的目标——乐于探索不同的选项/sql以获得相同的结果(通过oracle apex)

示例查询:
从用户数据库中选择用户、标题、部门,其中dept=:DEPARTMENT

我的查询带回了大量数据(预期) 基于此,我的想法是将此查询变成一个BLOB,并将其保存到另一个表(TBL\u EMAIL\u CONTENT),然后我可以使用APEX\u MAIL.ADD\u附件功能将其放入电子邮件中

  • 我接受查询并创建了一个CLOB,然后使用一个单独的函数将CLOB更改为BLOB
  • clob_to_blob函数如下所示:

        create or replace FUNCTION clob_to_blob(src_clob CLOB) RETURN BLOB IS
            tgt_blob BLOB;
            amount INTEGER := DBMS_LOB.lobmaxsize;
            dest_offset INTEGER := 1;
            src_offset INTEGER  := 1;
            blob_csid INTEGER := nls_charset_id('UTF8');
            lang_context INTEGER := DBMS_LOB.default_lang_ctx;
            warning INTEGER := 0;
        begin
            if src_clob is null then
                return null;
            end if;
    
            DBMS_LOB.CreateTemporary(tgt_blob, true);
            DBMS_LOB.ConvertToBlob(tgt_blob, src_clob, amount, dest_offset, src_offset, blob_csid, lang_context, warning);
            return tgt_blob;
        end clob_to_blob;
    
    然后,我将使用以下方式发送:

    APEX_MAIL.SEND(
        
          p_to        => 'UKSERVERPATCHING@VODAFONE.COM',
          p_from      => 'ukserverpatching@vodafone.com',
           p_bcc      => 'ukserverpatching@vodafone.com',
          p_body      => to_clob(' '),
          p_body_html => l_body,
          p_subj      => l_subj); 
    
    
    
     for c8 in(
         SELECT  CONTENT,FILENAME,MIMETYPE
         FROM    TBL_EMAILCONTENT
         where   EMAIL_ID = 1)
            
        loop 
               APEX_MAIL.ADD_ATTACHMENT(
                p_mail_id    => l_id,
               p_attachment => c8.CONTENT,
                p_filename   => c8.FILENAME,
               p_mime_type  => c8.MIMETYPE);    
            end loop;
    
    不幸的是,这个结果会使CSV无法读取,其中包含乱码字符。到目前为止,我在网上尝试的其他选项似乎遇到了问题,查询结果太长,无法通过varchar值处理

    以前有没有人遇到过这样的问题,或者可以在网上给我指一篇文章,看起来是在做这类事情

    提前谢谢,非常感谢

    APEX_MAIL.SEND(
        
          p_to        => 'UKSERVERPATCHING@VODAFONE.COM',
          p_from      => 'ukserverpatching@vodafone.com',
           p_bcc      => 'ukserverpatching@vodafone.com',
          p_body      => to_clob(' '),
          p_body_html => l_body,
          p_subj      => l_subj); 
    
    
    
     for c8 in(
         SELECT  CONTENT,FILENAME,MIMETYPE
         FROM    TBL_EMAILCONTENT
         where   EMAIL_ID = 1)
            
        loop 
               APEX_MAIL.ADD_ATTACHMENT(
                p_mail_id    => l_id,
               p_attachment => c8.CONTENT,
                p_filename   => c8.FILENAME,
               p_mime_type  => c8.MIMETYPE);    
            end loop;