dbms_random在Oracle 10.2.0.4下的bug
Test Case:
+++++++++++++++++++++++++++++++++
CREATE TABLE TestCode
(
ID VARCHAR2(5),
VAL NUMBER(1)
);
select * from (
select rownum id, decode(sign(dbms_random.value-0.9),-1,0,1) val
from dual connect by rownum<=100
)
where val>0;
insert into testcode select * from (
select rownum id, decode(sign(dbms_random.value-0.9),-1,0,1) val
from dual connect by rownum<=100
)
where val>0;
select * from testcode;
+++++++++++++++++++++++++++++++++
執行一下,偶這裡的情況是:
SQL> select * from (
2 select rownum id, decode(sign(dbms_random.value-0.9),-1,0,1) val
3 from dual connect by rownum<=100
4 )
5 where val>0;
ID VAL
---------- ----------
30 1
40 1
54 1
75 1
91 1
SQL> /
ID VAL
---------- ----------
1 1
3 1
5 1
13 1
22 1
24 1
29 1
37 1
38 1
54 1
60 1
ID VAL
---------- ----------
62 1
93 1
96 1
已選擇14行。
插入到表中
SQL> insert into testcode select * from (
2 select rownum id, decode(sign(dbms_random.value-0.9),-1,0,1) val
3 from dual connect by rownum<=100
4 )
5 where val>0;
已建立6行。
查詢一下看看
SQL> select * from testcode;
ID VAL
----- ----------
18 0
21 0
22 0
33 0
60 0
94 0
已選擇6行。
VAL值有問題,插入到表中的資料,VAL值應該都是1才對
似乎問題和呼叫dbms_random有關
請看下面的測試例子
SQL> select * from (select rownum+100 id, decode(sign(12-rownum),-1,1,0) val fro
m dual connect by rownum<20) where val>0;
ID VAL
---------- ----------
113 1
114 1
115 1
116 1
117 1
118 1
119 1
已選擇7行。
SQL> insert into testcode select * from (select rownum+100 id, decode(sign(12-r
ownum),-1,1,0) val from dual connect by rownum<20) where val>0;
已建立7行。
SQL> select * from testcode;
ID VAL
----- ----------
18 0
21 0
22 0
33 0
60 0
94 0
113 1
114 1
115 1
116 1
117 1
ID VAL
----- ----------
118 1
119 1
已選擇13行。
但使用CTAS的方式就不會出現這樣的問題
論壇帖子:http://www.itpub.net/viewthread.php?tid=1059418
原因應如帖中nyfor回覆的那樣
“我覺得應該是 Oracle 最佳化器的BUG,對SQL的執行計劃做了在某種極端條件下不等價的變換.
”
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-462522/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- awrsqrpt.sql 在oracle 版本10.2.0.4(for windows)的bugSQLOracleWindows
- ORACLE 10.2.0.4 RAC BUG IN HPOracle
- Oracle10.2.0.4 bug list and patchOracle
- 10.2.0.4 Bug Fixes by CategoryGo
- oracle 10.2.0.4 patch的下載地址列表Oracle
- oracle 9207在AIX下安裝的bugOracleAI
- 遭遇ora-600 [qkacon:FJswrwo], [3] oracle 10.2.0.4 bugJSOracle
- Oracle系統包dbms_randomOraclerandom
- oracle隨機數 — dbms_randomOracle隨機random
- oracle系統包——dbms_random用法Oraclerandom
- Windows 下 oracle 10g升級到10.2.0.4的方法WindowsOracle 10g
- windows 下oracle從10.2.0.1升級到10.2.0.4WindowsOracle
- dbms_randomrandom
- oracle 10.2.0.4 的emca配置錯誤Oracle
- Oracle 9201下connect by的bugOracle
- linux下oracle RAC10.2.0.1升級到10.2.0.4LinuxOracle
- 【DBMS_RANDOM】使用 DBMS_RANDOM包生成隨機字串random隨機字串
- upgrade oracle 10.2.0.4 for aixOracleAI
- DBMS_RANDOM使用random
- 在oracle 10.2.0.4上配置字符集掃描工具Csscan(一)OracleCSS
- 在wamp下安裝bugfree
- linux平臺下oracle從10.2.0.1升級到10.2.0.4LinuxOracle
- _smu_debug_mode在AUM下的應用
- oracle 10.2.0.4 EM的一個bug(EM對於用rman刪除歸檔日誌後不敏感)Oracle
- oracle 10g clusterware 在redhat as 5上的bugOracle 10gRedhat
- oracle 10g clusterware 在redhat as 5上的bugOracle 10gRedhat
- 在oracle 10.2.0.4上使用字符集掃描工具Csscan(二)OracleCSS
- oracle在linux平臺從10.2.0.1升級到10.2.0.4方法OracleLinux
- oracle rac 10.2.0.1 升級到 oracle 10.2.0.4Oracle
- 在 docker 環境下 xdebug 斷點Docker斷點
- 【DBMS_RANDOM】從 DBMS_RANDOM建立指令碼獲得隨機資訊的生成方法random指令碼隨機
- ORA-00600 [qkacon:FJswrwo] on aix 5.3 10.2.0.4 bugJSAI
- 在rhel5上oracle 10.2.0.4 上dbca silent刪除資料庫Oracle資料庫
- Linux下Oracle10.2.0.1升級到oracle10.2.0.4詳細操作記錄LinuxOracle
- Oracle groupby的bugOracle
- oracle10.2.0.4 dbvault 安裝篇Oracle
- Oracle 10.2.0.1 升級到 10.2.0.4Oracle
- 靜默升級oracle到10.2.0.4Oracle