如何解除DBMS_SQLTUNE.REPORT_SQL_DETAIL生成的HTML报告截断
解决SQL Developer中DBMS_SQLTUNE生成的CLOB报告截断问题
环境信息
- SQL Developer版本:19.1
- Oracle版本:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
执行的查询
select dbms_sqltune.report_sql_detail( sql_id => 'query_id', type => 'ACTIVE', report_level => 'ALL') as report from dual;
问题
执行上述查询后,生成的HTML格式报告以CLOB形式返回,但内容末尾被截断(显示为...),如何解除截断以查看完整HTML代码?
解决方法
方法1:调整SQL Developer的CLOB显示设置
- 打开SQL Developer,依次点击 工具 -> 首选项
- 在左侧导航栏选择 数据库 -> 高级
- 找到 CLOB读取缓冲区大小,将默认值(通常为8192)调大,比如设置为
1048576(1MB)或更大,根据报告实际大小调整 - 点击 确定 保存设置,重新执行查询即可查看完整CLOB内容
方法2:将CLOB内容导出到文件
如果调整设置后仍无法完整显示,可直接将CLOB导出到本地文件:
declare l_clob clob; begin select dbms_sqltune.report_sql_detail( sql_id => 'query_id', type => 'ACTIVE', report_level => 'ALL') into l_clob from dual; dbms_xslprocessor.clob2file(l_clob, 'YOUR_DIRECTORY', 'sql_report.html'); end; /
- 注意:
YOUR_DIRECTORY需要是Oracle已创建的目录对象(可通过CREATE DIRECTORY命令创建,确保账号拥有读写权限) - 执行完成后,HTML报告会被保存到指定目录的
sql_report.html文件中,直接打开即可查看完整内容
方法3:分块查询CLOB内容
如果以上方法都不方便,可通过分块读取CLOB来获取完整内容:
select dbms_lob.substr(report, 4000, 1) as part1, dbms_lob.substr(report, 4000, 4001) as part2, dbms_lob.substr(report, 4000, 8001) as part3 from ( select dbms_sqltune.report_sql_detail( sql_id => 'query_id', type => 'ACTIVE', report_level => 'ALL') as report from dual );
- 根据CLOB实际长度,增加更多
partN字段,每次读取4000字符(VARCHAR2的最大长度限制),之后手动拼接各部分内容即可得到完整HTML代码
内容的提问来源于stack exchange,提问作者Javi Torre
相关产品推荐
相关产品推荐

