请问有没有办法可以取得UPDATE语句的执行时间和执行行数?就是在PL/SQL里的SQLWINDOW里执行完UPDATE语句后显示的执行时间和执行行数,我想捕获这两个值传入变量。

解决方案 »

  1.   

    update时间:UPDATE语句执行前后,分别记录timestamp,然后做差,但是执行时间;
    update行数:通过SQL%ROWCOUNT获取
    set serveroutput on;
    begin
    update test_yixl set userid = 11;
    if (SQL%ROWCOUNT > 0) then
      dbms_output.put_line(to_char(SQL%ROWCOUNT));
    end if;
    end;
      

  2.   

    1 你可以用sqlplus 命令  set timing on 。不过这个只能给人看看,我不知道能不能获取到。
       但 按照兰兰姐那中思路,lz你写两个触发器(before,after)是一定可以获取的;
    2 通过隐式游标的属性获得相关的测试如下:
    SQL> ed
    已写入 file afiedt.buf  1  CREATE TABLE test AS
      2* SELECT * FROM emp
    SQL> /表已创建。SQL> select * from test;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
        DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ----------
    ----------
          7369 SMITH      CLERK           7902 17-12月-80            800
            20
          7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300
            30
          7521 WARD       SALESMAN        7698 22-2月 -81           1250        500
            30
          7566 JONES      MANAGER         7839 02-4月 -81           2975
            20
          7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400
            30
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850
            30
          7782 CLARK      MANAGER         7839 09-6月 -81           2450
            10
          7839 KING       PRESIDENT            17-11月-81           5000
            10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0
            30
          7900 JAMES      CLERK           7698 03-12月-81            950
            30
          7902 FORD       ANALYST         7566 03-12月-81           3000
            20
          7934 MILLER     CLERK           7782 23-1月 -82           1300
            10已选择12行。SQL> set timing on
    SQL> select * from emp;     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
        DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ----------
    ----------
          7369 SMITH      CLERK           7902 17-12月-80            800
            20
          7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300
            30
          7521 WARD       SALESMAN        7698 22-2月 -81           1250        500
            30
          7566 JONES      MANAGER         7839 02-4月 -81           2975
            20
          7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400
            30
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850
            30
          7782 CLARK      MANAGER         7839 09-6月 -81           2450
            10
          7839 KING       PRESIDENT            17-11月-81           5000
            10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0
            30
          7900 JAMES      CLERK           7698 03-12月-81            950
            30
          7902 FORD       ANALYST         7566 03-12月-81           3000
            20
          7934 MILLER     CLERK           7782 23-1月 -82           1300
            10已选择12行。已用时间:  00: 00: 00.03
    SQL> update test set ename = 'Kingking' where ename ='KING';已更新 1 行。已用时间:  00: 00: 00.04SQL> ed
    已写入 file afiedt.buf  1  begin
      2     UPDATE test SET ename = 'KING' WHERE ename='Kingking';
      3     if(SQL%ROWCOUNT>0) then
      4     dbms_output.put_line(to_char(SQL%rowcount));
      5     END if;
      6* end;
    SQL> /
    1PL/SQL 过程已成功完成。已用时间:  00: 00: 00.00
    SQL>
      

  3.   


    关于第一问,我刚刚发现还有个比较粗糙的函数 dbms_utility.get_time  它可以返回以百分之一秒为单位的当前时间的一个整数值