10g PLSQL數值型別的溢位
由於版本升級導致PL/SQL中數值溢位的問題。
資料庫升級過程往往會帶來很多未知的因素,比如從10g開始,PL/SQL中隱含利用INTEGER型別代替NUMBER型別進行整數的運算,以便獲得更好的效能。但是這就可能使得9i中執行正常的PL/SQL過程出現數值溢位的錯誤。
看一個最簡單的問題:
SQL> declare
2 v_num number;
3 begin
4 v_num := 65536*65536;
5 end;
6 /
PL/SQL 過程已成功完成。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
9i中正常執行的PL/SQL過程,在10g中就會報錯:
SQL> declare
2 v_num number;
3 begin
4 v_num := 65536*65536;
5 end;
6 /
declare
*
第 1 行出現錯誤:
ORA-01426: 數字溢位
ORA-06512: 在 line 4
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
錯誤原因其實上面已經提到了,要解決這個錯誤也很簡單:
SQL> declare
2 v_num number;
3 begin
4 v_num := 65536*65536.0;
5 end;
6 /
PL/SQL 過程已成功完成。
SQL> declare
2 v_num number(38, 1);
3 begin
4 v_num := 65536*65536.0;
5 end;
6 /
PL/SQL 過程已成功完成。
只要避免Oracle自動利用INTEGER來代替NUMBER型別就可以了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-626670/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 數值型別溢位處理MySql型別
- 檢查型別是否溢位型別
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- varchar or blob:欄位型別的儲存和溢位條件型別
- 整數溢位
- TypeScript 數值型別TypeScript型別
- 【開發篇plsql】plsql資料型別(一) 集合型別SQL資料型別
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- JavaScript - 變數、值、型別JavaScript變數型別
- Python數值型別Python型別
- 【開發篇plsql】plsql物件型別SQL物件型別
- char型別的數值轉換型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-不同的最值大小SQL資料型別
- Js實現Object按照值的某個欄位(數值型別)的大小進行排序JSObject型別排序
- 溢位OF和進位CF區別
- plsql記錄型別SQL型別
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- 【MySQL資料型別1之--數值型別】MySql資料型別
- oracle數值型別漫談Oracle型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- PLSQL中慎用CLOB型別SQL型別
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- oracle 10g函式大全--數值型函式Oracle 10g函式
- php 的函式引數值型別限定PHP函式型別
- php的函式引數值型別限定PHP函式型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- XSD 數值資料型別資料型別
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- 【開發篇plsql】plsql資料型別(二) recordSQL資料型別
- 值型別與引用型別的區別型別
- PLSQL Language Reference-PL/SQL子程式-過載子程式-只是數值資料型別不同的形參SQL資料型別
- C#的型別——值型別與引用型別C#型別
- PLSQL學習——資料型別SQL資料型別
- 記憶體溢位:native溢位 和 上層溢位記憶體溢位
- 咖啡汪日誌———數值計算,精度、舍入、溢位(極客時間)
- mybatis sql String>Double, 型別引數被強轉為數值型別MyBatisSQL型別