[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL DBA(73) - dump函式SQL函式
- PHP 自己實現var_dump函式PHP函式
- [20200211]zsh的bug.txt
- [20231225]Descending Bug.txt
- [20220124]group by bug.txt
- main函式的入口函式AI函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Sql 中的 left 函式、right 函式SQL函式
- 閉包函式(匿名函式)的理解函式
- Rust中的into函式和from函式Rust函式
- 函式: 函式是怎麼使用的?函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- JavaScript中的compose函式和pipe函式JavaScript函式
- 函式外與函式內的變數函式變數
- ton函式函式hash的兩種形式函式
- strcpy函式和memcpy函式的區別函式memcpy
- 類的建構函式和解構函式函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 【譯】函式式的React函式React
- JavaScript的迭代函式與迭代函式的實現JavaScript函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 【不在混淆的C】指標函式、函式指標、回撥函式指標函式
- (譯) 函式式 JS #2: 函式!函式JS
- 建構函式與普通函式的區別函式
- 箭頭函式與普通函式的區別函式
- # 普通函式和箭頭函式的區別函式
- PHP 函式庫 1 - 函式庫的分類PHP函式
- 平凡的函式 線性篩積性函式函式
- 函式的祕密之 函式返回值函式
- [20200120]12c Group by Elimination bug.txt
- 核函式 多項式核函式 高斯核函式(常用)函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter