在oracle9i中如何编写sql或者存储过程来知道执行sql或者函数花费的时间?

在oracle9i中如何编写sql或者存储过程来知道执行sql或者函数花费的时间?
比如:我有两种sql的写法
[quote]
[code="sql"]
SELECT temp.name

FROM (

SELECT count(DISTINCT tempone.goodsname) as nums,

tempone.name

FROM tempone

GROUP BY tempone.name

) temp

WHERE temp.nums > 1
[/code]

[code="sql"]
select t1.name from tempone t1,tempone t2 where t1.name = t2.name and t1.goodsname != t2.goodsname group by t1.name;

[/code]
[/quote]

我想通过一定的方式 执行如上的两种sql语句来比较执行效益.我已经用存储过程执行了插入了20w条记录。
现在就要问各位有什么方式可以来比较其执行效益的。
而且执行先前的sql后会有数据缓存,对后面的操作时间也会有影响,我该怎么办呢??
有个经验的同学给个好的解决方案,没有说下解决这个问题的思路也可以
先谢谢各位了...
[b]问题补充:[/b]
只有依靠工具了吗》pl/sql不能像java一样可以来通过执行前的系统时间减去执行完成的时间得到整个运行时间吗? 或者其他别的方法?
[b]问题补充:[/b]
谢谢你的 回答
可以看下这个帖子 http://www.iteye.com/topic/289339
方法二 就是我要问的~ 但方法还没完善~
我希望能有个函数可以输出执行SqL消耗的时间

1.可以用很多工具查看explain plan, 比如楼上说的。

  1. 通过PL/SQL查看执行计划:

方法一. Set AutoTrace on;
然后当执行你的sql语句的时候,执行计划自动显示出来。
不想看执行计划了,set autoTrace off;
方法二.执行语句: explain plan for [你的sql语句]
比如: explain plan for select * from table1
然后 执行:select * from table(DBMS_XPLAN.DISPLAY)就可以看到它的执行计划了。

方法三: 类似方法二,前一句sql不变,第二句改为下面sql同样可以显示执行计划(原理一样):
select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));

1 正确的做法是:找一个恰当的工具,例如toad, sql-dev或者9i的client,分析两个sql的执行计划。
2 上面的语句,肯定1要好于2。另外最好使用having子句
[code="sql"]
SELECT count(DISTINCT tempone.goodsname) as nums,

tempone.name

FROM tempone

GROUP BY tempone.name

having count(DISTINCT tempone.goodsname) > 1
[/code]

这有什么不可以的,你直接使用sysdate获取当前日期,然后可以用变量保存,使用DBMS_OUT.put_line输出到控制台,不过似乎只能精确到秒。

查看执行时间:

set timing on;