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

2019-03-25 13:47|来源: 网路

在oracle9i中如何编写sql或者存储过程来知道执行sql或者函数花费的时间?
比如:我有两种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 


select t1.name from tempone t1,tempone t2 where t1.name = t2.name and t1.goodsname != t2.goodsname group by t1.name;  



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

相关问答

更多
  • 函数是有返回值的,存储过程没有。 在BODY中的话,一般函数都是SELECT语句,而存储过程是包括DML语句的。
  • 可以的,例如: create procedure test(vs_para in varchar2) is begin if (length(vs_para)=1) then insert into ** ; elsif (length(vs_para)=2) then delete ** ; else null; end if; end;
  • declare sql_tem Varchar2(4000); a number; b number; i number; begin a := 1; for i in 1 .. 3 loop b := a + 4; sql_tem := 'insert into A2 (ID,NAME) (select ID,NAME from A1 WHERE ROWNUM between :1 and :2)'; EXECUTE IMMEDIATE sql_tem USING a, b; commit; a := a ...
  • 需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。 举例如下: 创建存储过程: create or replace procedure p_test as v_begintime varchar2(20); v_endtime varchar2(20); v_str varchar2(10); begin v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); select 'badkano' into v_str from dual; v_e ...
  • 3。 应该用 select 字段 into plsql变量 from 表名; v_areaRecord dual%ROWTYPE.select * from ods_area要成功执行这个存储过程; 来执行代码; end area;": create or replace procedure area is --变量声明: 1; 执行. 如果存储过程代码无误.通过exec 或 execute 来调用编译后的存储过程,编译存储过程. 存储过程的语法格式为; --调用 exec area,保存到pls ...
  • 有时需要在oracle 存储过程中执行动态SQL 语句 ,例如表名是动态的,或字段是动态的, 或查询命令是动态的,可用下面的方法: set serveroutput ondeclaren number;sql_stmt varchar2(50); t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD'''; t := 't_' || sysdate; sql_stmt := 'select co ...
  • 建议你用 instr函数,v_sql条件改为 where instr(p_jbm,t.jbm)>0试试吧。
  • 你既然是用PLSQL,左边的ALL OBJECTS栏里,你没看到有个procedures 吗,这个就是过程包,你直接点右键就可以新建一个过程.
  • 我相信您仍然可以使用SELECT * FROM OPENQUERY(ORA_SERVER, 'EXECUTE sp;')来完成此操作。 I believe you can still use SELECT * FROM OPENQUERY(ORA_SERVER, 'EXECUTE sp;') to acomplish this.
  • Oracle服务器中的一个过程“TestingProcedure”。 SQL Server中的链接服务器“LinkedServer”。 在SQL Server中调用TestingProcedure示例: EXECUTE ('begin TestingProcedure; end;') AT LinkedServer; Turns out I ended up having to use Microsofts CLR and write my own little C# application in ord ...