遇到特殊字符时,Oracle APEX的BI报告打印为空白
我使用的是Oracle APEX 5.1版,用户正试图从Oracle APEX打印BI报告。目前,我们正在使用“APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT”(签名4)将APEX页面中的数据打印到BI报告中遇到特殊字符时,Oracle APEX的BI报告打印为空白,oracle,oracle-apex,oracle-apex-5,oracle-apex-5.1,oracle-apex-18.2,Oracle,Oracle Apex,Oracle Apex 5,Oracle Apex 5.1,Oracle Apex 18.2,我使用的是Oracle APEX 5.1版,用户正试图从Oracle APEX打印BI报告。目前,我们正在使用“APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT”(签名4)将APEX页面中的数据打印到BI报告中 APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT (p_file_name => 'myreport',p_content_disposition => 'attachment', p_report_data => l_clob, /
APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT (p_file_name => 'myreport',p_content_disposition => 'attachment', p_report_data => l_clob, /* XML data in clob format */ p_report_layout => l_file_as_clob,p_report_layout_type => 'rtf',
p_document_format => 'rtf');
在程序遇到XML标记中的“&”或“”之前,一切正常。当“XML BI报告”或“APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT”(我提到这两个字符是因为我不知道问题发生在哪里)遇到这些字符时,报告显示为空白。如果手动从XML标记中删除上述字符,BI报告将正常工作并打印出来
复制步骤:
1) 按照下面的示例创建XML数据。请参阅“gmriskmediation”XML标记中的“&”(您可以将此“&”替换为“”,您将得到相同的结果)
3) 现在,如果您按下按钮,BI报告将成功下载,但它将为空。最后,我能够解决此问题。我能够解决字符问题,我所做的只是将“&”替换为“%26”,一切正常,现在我也不必从本机字符集转换字符,这也提高了性能
l_clob := replace(l_clob,'&','%26');
请在下面找到URL以供进一步参考
您可以使用APEX\u UTIL.URL\u ENCODE将“&”转换为“%26” 申报
l_clob CLOB;
l_varchar VARCHAR2(32767);
l_start PLS_INTEGER := 1;
l_buffer PLS_INTEGER := 32767;
开始
结束 只是一个建议,我不知道是否能解决你的问题。。。。如果可以,请尝试转义每个xml元素的内容。不要转义所有xml,只转义每个标记的内容[当我第一次实现解决方案时,生成的xml具有等效的字符实体,例如xml数据具有“&;”,引号在xml中表示为
”
。]“测试。测试及测试;testQuotes工作正常,即使XML在内容中有引号符号,它也适用于撇号'但当我用实际的撇号符号替换它时,它起了作用。我所观察到的是,当它遇到“&“它可以是”或者它无法翻译回它的符号时,我认为这是oracle APEX的问题
l_clob CLOB;
l_varchar VARCHAR2(32767);
l_start PLS_INTEGER := 1;
l_buffer PLS_INTEGER := 32767;
DBMS_LOB.CREATETEMPORARY(l_clob, TRUE);
FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(l_xml_clob) / l_buffer) LOOP
l_varchar := DBMS_LOB.SUBSTR(l_xml_clob, l_buffer, l_start);
l_varchar := APEX_UTIL.URL_ENCODE(l_varchar);
DBMS_LOB.WRITEAPPEND(l_clob, LENGTH(l_varchar), l_varchar);
l_start := l_start + l_buffer;
END LOOP;