|  | 
Re: Re: 有什么办法可以在SQLPLUS里不执行SQL 而且直接看到执行计划呢?
| 最初由 rchsh 发布[B]
 
 set autotrace traceonly;
 不在sqlplus中显示select的结果 [/B]
 
 Rem 如何不运行语句查看SQL语句的执行计划
 explain plan  for
 select *  from user_total where username='qwqwq';
 Rem 运行下面的脚本展示上面SQL语句的执行计划
 set markup html preformat on
 Rem
 Rem Use the display table function from the dbms_xplan package to display the last
 Rem explain plan. Force serial option for backward compatibility
 Rem
 select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));
 @$ORACLE_HOME/rdbms/admin/utlxpls.sql;
 
 Rem oracle8i
 
 
 select '| Operation                 |  Name    |  Rows | Bytes|  Cost  | Pstart| Pstop |'  as "Plan Table" from dual
 union all
 select '--------------------------------------------------------------------------------' from dual
 union all
 select * from
 (select /*+ no_merge */
 rpad('| '||substr(lpad(' ',1*(level-1))||operation||
 decode(options, null,'',' '||options), 1, 27), 28, ' ')||'|'||
 rpad(substr(object_name||' ',1, 9), 10, ' ')||'|'||
 lpad(decode(cardinality,null,'  ',
 decode(sign(cardinality-1000), -1, cardinality||' ',
 decode(sign(cardinality-1000000), -1, trunc(cardinality/1000)||'K',
 decode(sign(cardinality-1000000000), -1, trunc(cardinality/1000000)||'M',
 trunc(cardinality/1000000000)||'G')))), 7, ' ') || '|' ||
 lpad(decode(bytes,null,' ',
 decode(sign(bytes-1024), -1, bytes||' ',
 decode(sign(bytes-1048576), -1, trunc(bytes/1024)||'K',
 decode(sign(bytes-1073741824), -1, trunc(bytes/1048576)||'M',
 trunc(bytes/1073741824)||'G')))), 6, ' ') || '|' ||
 lpad(decode(cost,null,' ',
 decode(sign(cost-10000000), -1, cost||' ',
 decode(sign(cost-1000000000), -1, trunc(cost/1000000)||'M',
 trunc(cost/1000000000)||'G'))), 8, ' ') || '|' ||
 lpad(decode(partition_start, 'ROW LOCATION', 'ROWID',
 decode(partition_start, 'KEY', 'KEY', decode(partition_start,
 'KEY(INLIST)', 'KEY(I)', decode(substr(partition_start, 1, 6),
 'NUMBER', substr(substr(partition_start, 8, 10), 1,
 length(substr(partition_start, 8, 10))-1),
 decode(partition_start,null,' ',partition_start)))))||' ', 7, ' ')|| '|' ||
 lpad(decode(partition_stop, 'ROW LOCATION', 'ROW L',
 decode(partition_stop, 'KEY', 'KEY', decode(partition_stop,
 'KEY(INLIST)', 'KEY(I)', decode(substr(partition_stop, 1, 6),
 'NUMBER', substr(substr(partition_stop, 8, 10), 1,
 length(substr(partition_stop, 8, 10))-1),
 decode(partition_stop,null,' ',partition_stop)))))||' ', 7, ' ')||'|' as "Explain plan"
 from plan_table
 start with id=0 and timestamp = (select max(timestamp) from plan_table
 where id=0)
 connect by prior id = parent_id
 and prior nvl(statement_id, ' ') = nvl(statement_id, ' ')
 and prior timestamp <= timestamp
 order by id, position)
 union all
 select '--------------------------------------------------------------------------------' from dual;
 | 
 |