Batch + Oracle,禁用响应但仍然获得执行时间

时间:2017-07-30 09:53:19

标签: sql oracle batch-file time

我有一个批处理文件通过sqlplus为我运行一些sql。 命令如下:

sqlplus user/password@sid @file.sql param1 param2 ... >> LOG.txt

通过浏览互联网,我发现通过将这些行添加到sql文件中可以节省时间:

SET TIMING ON
...sql operation...
SET TIMING OFF

这给了我一个非常好的日志文件结果,因为现在它看起来像这样:

SQL*PLUS INFORMATION
COPYRIGHT
INFORMATION ABOUT THE CONNECTION
OLD/NEW STATEMENT
RESULTS
ROWS SELECTED
EXECUTION TIME
DISCONNECT MESSAGE

我确实喜欢这个的输出,但结果很多。我经常想测试长查询的执行时间,但是通过结果实际上是浪费带宽。它还使我的日志文件变得庞大而且不切实际,我宁愿使用包含所有其他信息的小日志。

我尝试添加其他标题,例如:

TERMOUT
SPOOL

但是第一个删除所有输出,包括时间和旧/新语句,第二个只是将结果复制到另一个文件而不更改我的日志文件。

我想把我的请求包装在一个PLSQL块中,但是我再也不能使用TIME头了吗?

无论如何,如果你们知道可以解决我的问题的标题/其他组件,请随时分享!

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

一种方法是在脚本中使用SQLPLUS绑定变量来存储开始时间并计算查询的执行时间:

var start_time varchar2;

exec :start_time := to_char( current_timestamp, 'yyyy-mm-dd hh24:mi:ss.SSSSS');

/* Long runing query */
BEGIN
 DBMS_LOCK.sleep(5);
END;
/

SELECT current_timestamp - to_timestamp( :start_time, 'yyyy-mm-dd hh24:mi:ss.SSSSS' ) 
       As total_ececution_time
from dual;

结果是:

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


TOTAL_ECECUTION_TIM
-------------------
+00 00:00:05.471000