BEGIN
dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6')); SQL_STR1 := 'SELECT MEASURE_DATE,LATITUDE,LONGITUDE,STRG_EC_IO FROM T_CAD
WHERE ((MEASURE_DATE BETWEEN to_date(''2005-09-30 15:00:00'', ''yyyy-mm-dd hh24:mi:ss'')
AND to_date(''2005-09-30 15:59:59'', ''yyyy-mm-dd hh24:mi:ss''))) AND
((LATITUDE BETWEEN 35.665 AND 35.67 AND LONGITUDE BETWEEN 139.71 AND 139.715))
ORDER BY MEASURE_DATE';
execute IMMEDIATE SQL_STR1; SQL_STR2 := 'select to_char(systimestamp, ''yyyymmdd hh24:mi:ss.ff6'') from dual';
execute IMMEDIATE SQL_STR2;
dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6'));
END--10:49:08--
20080526 10:49:08.732000
--10:49:08--
20080526 10:49:08.732000
根据结果我请问我这SQL难道说执行时间真的连1毫秒都没花费??
dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6')); SQL_STR1 := 'SELECT MEASURE_DATE,LATITUDE,LONGITUDE,STRG_EC_IO FROM T_CAD
WHERE ((MEASURE_DATE BETWEEN to_date(''2005-09-30 15:00:00'', ''yyyy-mm-dd hh24:mi:ss'')
AND to_date(''2005-09-30 15:59:59'', ''yyyy-mm-dd hh24:mi:ss''))) AND
((LATITUDE BETWEEN 35.665 AND 35.67 AND LONGITUDE BETWEEN 139.71 AND 139.715))
ORDER BY MEASURE_DATE';
execute IMMEDIATE SQL_STR1; SQL_STR2 := 'select to_char(systimestamp, ''yyyymmdd hh24:mi:ss.ff6'') from dual';
execute IMMEDIATE SQL_STR2;
dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6'));
END--10:49:08--
20080526 10:49:08.732000
--10:49:08--
20080526 10:49:08.732000
根据结果我请问我这SQL难道说执行时间真的连1毫秒都没花费??
另外,感觉你这种看时间不太准。毕竟不是debug,或许是在内存里一起执行的
STAT #4 id=2 cnt=236 pid=1 pos=1 obj=60567 op='TABLE ACCESS FULL T_CAD (cr=2281 pr=2075 pw=0 time=444627 us)'
我用TRACE 看的执行时间.....和 我写的PLSQL执行时间对比就知道有出入
放内存是ORACLE自带的功能...
SQL> select count(*) from t4; COUNT(*)
----------
100000 1 declare
2 SQL_STR1 varchar2(200);
3 SQL_STR2 varchar2(200);
4 BEGIN
5 dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
6 dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6'));
7 SQL_STR1 := 'select rn from t4 where rn between 100 and 120';
8 execute IMMEDIATE SQL_STR1;
9 SQL_STR2 := 'select to_char(systimestamp, ''yyyymmdd hh24:mi:ss.ff6'') fro
m dual';
10 execute IMMEDIATE SQL_STR2;
11 dbms_output.put_line(to_char(sysdate,'--hh24:mi:ss--'));
12 dbms_output.put_line(to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6'));
13* END;
11:08:41 SQL> /
--11:08:53--
20080526 11:08:53.843000--11:08:53--
20080526 11:08:53.843000
v_sql varchar2(32767);
--cursor cur is select * from person;
begin
v_sql := 'select * from person';
execute immediate v_sql;
end;SQL> /
PL/SQL procedure successfully completed
Executed in 0.016 secondsSQL> /
PL/SQL procedure successfully completed
Executed in 0 secondsSQL> select count(*) from person;
COUNT(*)
----------
4800001
Executed in 1.484 seconds有cursor 那句是 0.016无cursor 那句是 0.000结论:PL/SQL 解释这种无左值查询时可能偷了什么懒 或者做了什么处理 比如多线,抛弃(猜测,不知道如何证明,期待高手现身)。