一個有關"ORA-01722: 無效數字"的小案例解決過程
之前接到朋友電話,詢問一個有關ORA-01722問題,在某個sql語句的where條件中使用"列名=數字"時會觸發該錯誤,但是用"列名='數字'"時確沒問題,此列為字元型別。當時第一反應就是即使在第一種情況下oracle會發生自動隱身轉換,但是也不會報此錯誤啊,於是打算模擬一下該錯誤,在模擬過程中就找到了最終的原因,具體操作步驟如下:
1.建立測試表
SQL> create table t(name varchar2(10));
2.插入資料
SQL> insert into t values('123');
SQL> select * from t;
NAME
----------
123
3.執行正常sql並獲取執行計劃
SQL> select * from t where name='123';
NAME
----------
123
執行計劃
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 7 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 1 | 7 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("NAME"='123')
注意:執行計劃中的fliter為(NAME='123')
4.模擬錯誤並獲取執行計劃
SQL> insert into t values('abc');
SQL> select * from t;
NAME
----------
123
abc
SQL> select * from t where name=123;
ERROR:
ORA-01722: 無效數字
執行計劃
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 7 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 1 | 7 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(TO_NUMBER("NAME")=123)
特別注意:執行計劃中的filter為TO_NUMBER(NAME)=123,這裡oracle發生了隱身轉換,但是name列中因為有'abc'這種字元值,
所以to_number('abc')這個操作觸發了ORA-01722的錯誤。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-1063052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分享一個 JSON 相關小需求的解決過程與思路JSON
- 遊戲,一個有樂趣的、解決問題的過程遊戲
- 記一次bug解決過程(數字轉化成中文)
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- 有關於儲存過程的一個笑話儲存過程
- 一次webapck4 配置檔案無效的解決歷程Web
- 一個lua問題解決過程
- 記錄一個前端bug的解決過程前端
- 微信小程式 解決 數字粗細不一 的bug微信小程式
- vue命令無效的解決方法Vue
- SQL物件名無效的解決SQL物件
- 用wrap加密一個package異常的解決過程加密Package
- lombok 註解無效 已解決Lombok
- 建立儲存過程編譯無效物件儲存過程編譯物件
- Java技巧-解決JAVA_HOME變數無效問題Java變數
- 物理方法解決數學問題(五):一個與橢圓有關的性質
- 解決XML下無效字元的問題XML字元
- 儲存過程被鎖無法編譯的解決儲存過程編譯
- 驅動沒有數字簽名的解決方案
- Bootstrap一個小案例boot
- 一種中文數字轉阿拉伯數字的解決方案
- 一個小問題的解決方案
- Golang協程無法固定goroutine的最大數目解決Golang
- 記錄一個拷貝檔案到GlusterFS卡住的解決過程
- a:active在ios上無效解決方法iOS
- 有無後效性
- js中new關鍵字的使用過程JS
- 一個小專案(爬蟲)的誕生全過程爬蟲
- 關於 AppCrawler 執行過程中的幾個小問題APP
- sourceTree這是一個無效的倉庫
- tail +數字 無法開啟錯誤解決(ubutu)AI
- 儲存過程效能低的解決方法之一儲存過程
- 一次線上問題的排查解決過程
- 一次sqlldr匯入慢的解決過程SQL
- 一道小學數學題的解決
- poi匯出的excel的數字小數位過多?Excel
- 關於 OkHttp 依賴衝突問題的解決過程HTTP
- 關於inline-block在IE8下無效的解決方法inlineBloC