如何在SQuirreL SQL中查看Oracle 11的执行计划?
我来帮你一步步排查并解决这两个常见问题:
一、修复内置"Explain Plan"标签为空的问题
SQuirreL的这个功能依赖标准的PLAN_TABLE结构和正确的配置,可能的原因和修复步骤如下:
确保PLAN_TABLE结构符合Oracle标准:
SQuirreL自动创建的PLAN_TABLE可能存在结构偏差,建议用Oracle官方脚本重新创建。在SQuirreL中执行以下命令(替换$ORACLE_HOME为你的Oracle安装路径,若直接在服务器操作则直接运行该脚本):@$ORACLE_HOME/rdbms/admin/utlxplan.sql这个脚本会生成Oracle官方标准的PLAN_TABLE,确保SQuirreL能正确读取执行计划数据。
检查SQuirreL的Explain Plan配置:
- 打开
Session -> Session Properties -> SQL菜单 - 找到"Explain Plan"区域,查看默认的查询语句
- 如果你的PLAN_TABLE属于特定schema,需要把默认的
SELECT * FROM PLAN_TABLE修改为SELECT * FROM YOUR_SCHEMA.PLAN_TABLE(替换YOUR_SCHEMA为你的用户名) - 保存配置后,重新执行目标SQL并点击"Explain Plan"标签
- 打开
确认执行的是可生成计划的SQL:
只有DML语句(SELECT/INSERT/UPDATE/DELETE)能生成执行计划,DDL语句(CREATE/ALTER等)无法生成,请确保你执行的是符合要求的语句。
二、解决EXPLAIN PLAN FOR报ORA-00905错误的问题
这个错误通常是语法格式问题,按以下方式修正:
使用正确的语法格式:
EXPLAIN PLAN FOR必须直接紧跟完整的DML语句,不能有多余符号或错误换行。示例:EXPLAIN PLAN FOR SELECT t.id, t.name FROM your_table t WHERE t.status = 'ACTIVE';确保这两部分作为单个语句执行,不要被SQuirreL的默认语句分隔符(
;)拆分。正确查看执行计划结果:
执行EXPLAIN PLAN FOR后不会直接显示结果,你需要查询计划数据。Oracle 11g更推荐使用DBMS_XPLAN包,执行以下语句即可看到格式化的执行计划:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());这个方法无需依赖PLAN_TABLE,输出格式也更清晰易读。
如果问题仍存在,可以检查你的数据库用户是否拥有SELECT权限访问PLAN_TABLE或DBMS_XPLAN包。
内容的提问来源于stack exchange,提问作者Aaron Digulla

