加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 在plsql中的进程中丈量sql语句的时刻

发布时间:2021-05-15 03:19:06 所属栏目:站长百科 来源:网络整理
导读:我必需编写一个进程来生涯表中任何sql语句的执行时刻. 该进程通过exec measureqltime挪用(‘sql statement as string’); 我的设法是这样的: --declarations timestart NUMBER; BEGIN dbms_output.enable; timestart:=dbms_utility.get_time(); EXECUTE IMM

我必需编写一个进程来生涯表中任何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包DBMS_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的最后一行所需的时刻.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读