APEX:查询和输出为CSV的mysql中的Blob数据

问题描述

早晨的人们,真的可以在这方面利用您的帮助。 我有一个查询,我需要使用oracle apex作为CSV附件发送到电子邮件中。这就是所有这些的目标-乐于探索不同的选项/ sql来获得相同的结果(通过oracle apex)

查询示例:select user,title,dept from user_db where dept = :DEPARTMENT

我的查询带回了大量数据(预期) 基于此,我的想法是将该查询放入BLOB并将其保存到其他表( TBL_EMAIL_CONTENT ),然后可以使用 APEX_MAIL.ADD_ATTACHMENT 函数带入电子邮件

  1. 我接受了查询并创建了一个CLOB,然后使用一个单独的函数将CLOB更改为BLOB
declare
        CSV_CONTENT clob;
        l_BLOB    BLOB;
        crlf        varchar2(2) := chr(13) || chr(10); 
        CSVFILENAME varchar2(255);
    begin

            
    CSV_CONTENT := 'User,'||'Title,'||'Dept,'||crlf;        
            
          for c5 in (select user,dept from user_db where dept = :DEPARTMENT)
            LOOP
              CSV_CONTENT := CSV_CONTENT||c5.CONTENT_csv;
              CSVFILENAME := 'Example.csv';
              END LOOP;
            
           L_BLOB := clob_to_blob(CSV_CONTENT);
        
            
        for c6 in (select * from TBL_EMAILCONTENT where EMAIL_ID = 1)
            LOOP
                Update TBL_EMAILCONTENT 
                set 
                filename = CSVFILENAME||'.CSV',CONTENT2 = csv_content,CONTENT = L_BLOB;
            END LOOP;
    END;
    

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值处理。

以前有没有人遇到过这个问题,或者可以将我引到网上一篇看起来可以做这种事情的文章

预先感谢,非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)