日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Oracle-ORA-01722 invalid number错误

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle-ORA-01722 invalid number错误 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本來正常的,經過抓包才知道原來是數字型的無意中多了亂碼!

本來是3276的居然多了后面一串?3276PuAnrSeU2zliU+IV/FHlnX2Xgia1au2xX2vMWtw

?

http://www.cnblogs.com/raymond19840709/archive/2008/05/16/1200826.html

1. 代碼里面執行了如下SQL語句:

? select mdn from tablename where mdn=13800000000

?? tablename表里面的mdn字段是varchar2()類型字段,由于Oracle的字段類型隱式轉換功能

?? 上面的SQL語句通常是可行的,查詢的時候oracle解析該條件時,會首先to_number(mdn)

?? 再和where mdn=13812345678進行比較判斷,如果能夠確保mdn字段里面存放的全為數字

?? 那么這個語句是一直不會報錯的(可能存在效率問題),但偏偏有人誤操作在mdn里面加入了

?? 幾個字母133aa000000,如果還是上面的語句,并且表里面沒有13800000000這個用戶的數據,

?? 當查詢掃描到133aa000000時to_number(mdn)報錯ORA-01722 invalid number

2. 因此寫SQL語句的時候最好還是規規矩矩的寫:

??? select mdn from tablename where mdn='13800000000'

?

ORA-01722 invalid number很容易理解,無須多言,一般發生在顯式的to_number()類型轉換的參數錯誤時。

前幾天我也遇到了一個由于直覺作怪而差點被忽略了的ORA-01722錯誤。


http://davidyu720.itpub.net/post/31716/291191http://davidyu720.itpub.net/post/31716/291191

一個查詢 select to_number(c.name) as srvtype, value as typename from sys_code c where c.srvclass=9 --srvclass為字符型
一直工作得很好,但突然一天返回錯誤ORA-01722 invalid number。由于條件srvclass字段是varchar2類型,就想當然地以為是ORACLE的bug(恰巧上周剛確認了ORACLE的一個查詢bug),將條件改寫成c.srvclass='9'后,查詢就又能運行了。

事情雖然過去了,可總覺得有點不對勁。首先ORACLE不可能出現這么簡單的BUG;其次就算是BUG,返回的錯誤提示也不應該是 invalid number。按理說,即使ORACLE不能自動完成類型轉換而要求寫成 srvclass='9',那么對srvclass=9這種寫法的錯誤提示也應該是invalid character。但由于直覺作怪,也就沒有深究


正好有人質疑bug的說法,我就從頭進行檢查,才發現錯誤的根本原因是:ORACLE將where c.srvclass=9解釋為where to_number(c.srvclass)=9
1)以前執行SQL時,ORACLE進行全表掃描,對每行的srvclass都轉換為number型進行比較.以前表中的srvclass的取值只有字符0到9,所以沒有出錯;
2)后來表中加入了新數據,srvclass的取值都是字母串,ORACLE進行全表掃描時,對新行上srvclass的to_number轉換當然就返回ORA-01722 invalid number了。

附:我也拜讀了yangtingkun的關于ORA-01722錯誤的帖子http://yangtingkun.itpub.net/post/468/237197,介紹了一種錯誤情形:將函數調用放到SELECT列表中可以執行,如果放到WHERE條件中就會報錯。

?

總結

以上是生活随笔為你收集整理的Oracle-ORA-01722 invalid number错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。