日期:2014-05-17  浏览次数:20725 次

请教一个关于UPDATE执行结果的问题
请问有没有办法可以取得UPDATE语句的执行时间和执行行数?

就是在PL/SQL里的SQLWINDOW里执行完UPDATE语句后显示的执行时间和执行行数,我想捕获这两个值传入变量。



------解决方案--------------------
探讨
请问有没有办法可以取得UPDATE语句的执行时间和执行行数?

------解决方案--------------------
1 你可以用sqlplus 命令 set timing on 。不过这个只能给人看看,我不知道能不能获取到。
但 按照兰兰姐那中思路,lz你写两个触发器(before,after)是一定可以获取的;
2 通过隐式游标的属性获得

相关的测试如下:
SQL code
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.04

SQL> 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> /
1

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.00
SQL>

------解决方案--------------------
探讨

1 你可以用sqlplus 命令 set timing on 。不过这个只能给人看看,我不知道能不能获取到。
但 按照兰兰姐那中思路,lz你写两个触发器(before,after)是一定可以获取的;
2 通过隐式游标的属性获得

相关的测试如下:
SQL code
SQL> ed
已写入 file afiedt.buf

1 CREATE TABLE test AS
……