|
原帖由 nyfor 于 08-9-22 09:18 发表
insert into testcode
select *
from (select level id,
decode(sign(dbms_random.value - 0.9), -1, 0, 1) val
from dual
connect by rownum 0;
此语句中的 where val > 0 被改写成了 decode(sign(dbms_random.value - 0.9), -1, 0, 1) > 0,
但是这个改写后的条件是以
(select level id,
decode(sign(dbms_random.value - 0.9), -1, 0, 1) val
from dual
connect by rownum 0 筛选.
如果直接将 where val > 0 改写成 decode(sign(dbms_random.value - 0.9), -1, 0, 1) > 0 的话, 那么这个 where 语句将只会执行一次.
难以琢磨, 呵呵...
这就像你说过的
where条件中的表达式,如果与表中的字段无关,那就只会计算1次 |
|