问题描述
早晨的人们,真的可以在这方面利用您的帮助。 我有一个表查询,我需要使用oracle apex作为CSV附件发送到电子邮件中。这就是所有这些的目标-乐于探索不同的选项/ sql来获得相同的结果(通过oracle apex)
查询示例:select user,title,dept from user_db where dept = :DEPARTMENT
我的查询带回了大量数据(预期) 基于此,我的想法是将该查询放入BLOB并将其保存到其他表( TBL_EMAIL_CONTENT ),然后可以使用 APEX_MAIL.ADD_ATTACHMENT 函数带入电子邮件。
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 (将#修改为@)