先看一下select 1 from dual和select sysdate from dual的区别。
10G:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE10.2.0.1.0Production
TNS for HPUX: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> set serveroutput on
SQL> declare
2i pls_integer;
3b pls_integer;
4e pls_integer;
5c pls_integer;
6d date;
7begin
8select value
9into b
10from v$mystat t, v$statname x
11 where t.STATISTIC# = x.STATISTIC#
12 and x.NAME = 'CPU used by this session';
13
14for i in 1 .. 100000 loop
15select 1 into c from dual;
16end loop;
17
18select value
19into e
20from v$mystat t, v$statname x
21 where t.STATISTIC# = x.STATISTIC#
22 and x.NAME = 'CPU used by this session';
23dbms_output.put_line(e-b);
24end;
25/
236
PL/SQL 过程已成功完成。
SQL> declare
2i pls_integer;
3b pls_integer;
4e pls_integer;
5c pls_integer;
6d date;
7begin
8select value
9into b
10from v$mystat t, v$statname x
11 where t.STATISTIC# = x.STATISTIC#
12 and x.NAME = 'CPU used by this session';
13
14for i in 1 .. 100000 loop
15select sysdate into d from dual;
16end loop;
17
18select value
19into e
20from v$mystat t, v$statname x
21 where t.STATISTIC# = x.STATISTIC#
22 and x.NAME = 'CPU used by this session';
23dbms_output.put_line(e-b);
24end;
25/
276
PL/SQL 过程已成功完成。
11G:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE11.2.0.2.0Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
SQL> set serveroutput on
SQL> declare
2i pls_integer;
3b pls_integer;
4e pls_integer;
5c pls_integer;
6d date;
7begin
8select value
9into b
10from v$mystat t, v$statname x
11 where t.STATISTIC# = x.STATISTIC#
12 and x.NAME = 'CPU used by this session';
13
14for i in 1 .. 100000 loop
15select 1 into c from dual;
16end loop;
17
18select value
19into e
20from v$mystat t, v$statname x
21 where t.STATISTIC# = x.STATISTIC#
22 and x.NAME = 'CPU used by this session';
23dbms_output.put_line(e-b);
24end;
25/
155
PL/SQL 过程已成功完成。
SQL> declare
2i pls_integer;
3b pls_integer;
4e pls_integer;
5c pls_integer;
6d date;
7begin
8select value
9into b
10from v$mystat t, v$statname x
11 where t.STATISTIC# = x.STATISTIC#
12 and x.NAME = 'CPU used by this session';
13
14for i in 1 .. 100000 loop
15select sysdate into d from dual;
16end loop;
17
18select value
19into e
20from v$mystat t, v$statname x
21 where t.STATISTIC# = x.STATISTIC#
22 and x.NAME = 'CPU used by this session';
23dbms_output.put_line(e-b);
24end;
25/
168
PL/SQL 过程已成功完成。
|