[20191002]函式dump的bug.txt
[20191002]函式dump的bug.txt
--//前幾天寫raw轉化oracle number指令碼,在使用函式dump時遇到一些問題,做一個記錄:
--//oracle number 0 編碼 是80,大於80是正數.
1.環境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
2.dump 函式問題.
SCOTT@test01p> select dump(1e-130,16) from dual ;
DUMP(1E-130,16)
-----------------
Typ=2 Len=2: 80,2
SCOTT@test01p> select dump(1e-131,16) from dual ;
DUMP(1E-131,16)
---------------
Typ=2 Len=1: 80 --> 實際上是0.
--//但是如果輸入:
SCOTT@test01p> select dump(to_number('.'||lpad('0',129,'0')||'1'),16) from dual;
DUMP(TO_NUMBER('.
-----------------
Typ=2 Len=2: 80,2
--//正確!!
SCOTT@test01p> select dump(to_number('.'||lpad('0',130,'0')||'1'),16) from dual;
DUMP(TO_NUMBER('.
-----------------
Typ=2 Len=2: 7f,b
SCOTT@test01p> select dump(to_number('.'||lpad('0',131,'0')||'1'),16) from dual;
DUMP(TO_NUMBER('.
-----------------
Typ=2 Len=2: 7f,2
SCOTT@test01p> select dump(to_number('.'||lpad('0',132,'0')||'1'),16) from dual;
DUMP(TO_NUMBER('.
-----------------
Typ=2 Len=2: 7e,b
SCOTT@test01p> select dump(to_number('.'||lpad('0',232,'0')||'1'),16) from dual;
DUMP(TO_NUMBER('.
-----------------
Typ=2 Len=2: 4c,b
--//很明顯dump輸入的數字沒有采用科學計數法並且等於1e-131,1e-132存在bug.顯示7f,2以及7e,b明顯有問題.變成負數並且後面沒有0x66.
--//可以將轉化的編碼是非法的.
--//to_number('.'||lpad('0',132,'0')||'1') = 1e-133
--//oracle 百進位制轉化為 0.10 * 100^(-67) . exp=-67, 尾數編碼是 10 (十進位制)+1 = 0xb .
--//193+(-67) = 126 = 0x7e.
--//或者將講dump函式考慮不夠仔細,在直接輸入的情況下沒有做邊界檢查.oracle number最小的正數字是1e-130.
--//而且可以猜測2種格式的資料oracle是分開處理的.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2658890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DUMP函式函式
- 【函式】DUMP函式
- Oracle的dump函式Oracle函式
- oracle dump 函式Oracle函式
- Oracle dump函式Oracle函式
- Oracle dump函式的用法Oracle函式
- 學習dump函式函式
- DUMP函式結果的意思函式
- PostgreSQL DBA(73) - dump函式SQL函式
- DUMP函式(轉載eygle)函式
- 一個有用的函式-實現dump函式的convert!函式
- Oracle dump函式的與utl_rawOracle函式
- oracle dump函式解析_字符集Oracle函式
- PHP 自己實現var_dump函式PHP函式
- 在其他框架中使用 dump () & dd () 函式框架函式
- SQL--瞭解DUMP函式(轉載)SQL函式
- php中var_dump()函式的詳解說明PHP函式
- 使用oracle utl_raw作為dump的逆函式Oracle函式
- oracle中dump函式及oracle NUMBER型別內部儲存機制Oracle函式型別
- main函式的入口函式AI函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- 9i index bug.txt 之2Index
- 使用bind()函式的產生的函式用作建構函式this的指向函式
- 函式定義、函式的引數、函式的預設引數函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- 函式宣告和函式表示式的區別函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 閉包函式(匿名函式)的理解函式
- 函式: 函式是怎麼使用的?函式
- Rust中的into函式和from函式Rust函式
- closest()函式parent()函式的區別函式
- ascii函式和substr函式的用法ASCII函式
- 函式式 Java 到函式式 Kotlin 的轉換函式JavaKotlin
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter