oracle – 在plsql中的过程中测量sql语句的时间
发布时间:2021-05-15 06:30:44 所属栏目:百科 来源:网络整理
导读:我必须编写一个过程来保存表中任何sql语句的执行时间. 该过程通过exec measureqltime调用(‘sql statement as string’); 我的想法是这样的: --declarations timestart NUMBER; BEGIN dbms_output.enable; timestart:=dbms_utility.get_time(); EXECUTE I
|
我必须编写一个过程来保存表中任何sql语句的执行时间. 该过程通过exec measureqltime调用(‘sql statement as string’); 我的想法是这样的: --declarations
timestart NUMBER;
BEGIN
dbms_output.enable;
timestart:=dbms_utility.get_time();
EXECUTE IMMEDIATE sql
COMMIT;
dbms_output.put_line(dbms_utility.get_time()-timestart);
-- save time
但它对我来说对SELECT * …子句不起作用. (我认为sql需要一个INTO订单) 有没有办法在程序中执行任何sql-atatements? 如果您的SQL语句是SELECT,则需要从游标中获取以对其执行时间进行有意义的度量.如果不从游标中获取,则只测量“解析”和“执行”阶段所花费的时间,而大部分工作通常在SELECT语句的“获取”阶段完成. 如果您不知道实际语句将具有的列数,则无法使用EXECUTE IMMEDIATE或OPEN游标FOR’string’进行提取.如果SELECT的列数/类型未知,则必须使用动态SQL包 这是一个例子: SQL> CREATE OR REPLACE PROCEDURE demo(p_sql IN VARCHAR2) AS
2 l_cursor INTEGER;
3 l_dummy NUMBER;
4 timestart NUMBER;
5 BEGIN
6 dbms_output.enable;
7 timestart := dbms_utility.get_time();
8 l_cursor := dbms_sql.open_cursor;
9 dbms_sql.parse(l_cursor,p_sql,dbms_sql.native);
10 l_dummy := dbms_sql.execute(l_cursor);
11 LOOP
12 EXIT WHEN dbms_sql.fetch_rows(l_cursor) <= 0;
13 END LOOP;
14 dbms_sql.close_cursor(l_cursor);
15 dbms_output.put_line(dbms_utility.get_time() - timestart);
16 END;
17 /
Procedure created.
SQL> exec demo('SELECT * FROM dual CONNECT BY LEVEL <= 1e6');
744
PL/SQL procedure successfully completed.
请注意,这将测量获取SELECT的最后一行所需的时间. (编辑:新余站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

