ORACLE 表char欄位混合儲存數字和字母類似資料時按數字的where條件查詢報錯ORA-01722
ORACLE 資料庫,建立有char欄位列的資料表:create table tbl_c (id char(1));
對該表插入字元'1'、數字2,執行查詢:
select * from tbl_c;SQL語句能夠正常執行,
select * from tbl_c where id=1;SQL語句能夠 正常 執行;
表中插入字元'A’,
select * from tbl_c;SQL語句能夠 正常 執行
select * from tbl_c where id=1;SQL語句查詢時報錯 ORA-01722: invalid number
刪除插入的字元資料'A'後,查詢恢復正常;
實驗如下:
1、建立實驗表
SQL> create table tbl_c (id char(1));
Table created.
2、插入實驗 正常 資料
SQL> insert into tbl_c values('1');
1 row created.
SQL> insert into tbl_c values(2);
1 row created.
SQL> commit;
Commit complete.
3、測試查詢
SQL> select * from tbl_c;
I
-
1
2
SQL> select * from tbl_c where id=1;
I
-
1
SQL>
4、插入影響CBO條件查詢解析執行的資料
SQL> insert into tbl_c values('A');
1 row created.
SQL> commit;
Commit complete.
SQL>
5、測試查詢,where條件查詢數字查詢出現異常
SQL> select * from tbl_c where id='A';
I
-
A
SQL> select * from tbl_c where id='2';
I
-
2
SQL>
SQL> select * from tbl_c where id=1;
ERROR:
ORA-01722: invalid number
no rows selected
關於這種現狀,ORACLE MOS文件
Doc ID 1059215.1
有相關說明:
CAUSE
The problem is due to the way Oracle handles datatype conversions.
The statement being executed is made to compare the VARCHAR database field with a numeric literal value.
In this case, the database does an implicit conversion applying the TO_NUMBER function to the first column, in order to be able to perform the comparison between comparable values.
If this column contains non-numeric values and one of them is retrieved and the condition is evaluated, the ORA-1722 error is issued.
SOLUTION
The proposed solution is to avoid the implicit conversion. This may be achieved in two ways:
A) Modify the data to assure no invalid numeric values are stored in the column, either updating invalid column values or modifying the column datatype to enforce the presence of only numeric values. This implies the application remains unchanged.
This solution implies a modification in the database model, or to add restrictions not necessarily applicable to the table column involved.
OR
B) Modify the application to ensure the comparison is done between two VARCHAR values. This may be easily achieved surrounding the variable value with quotes:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2564991/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL查詢某個欄位含有字母數字的值MySql
- MySQL如何查詢某個欄位含有字母數字的值MySql
- 在oracle中,select語句查詢欄位中非純數字值Oracle
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- ORACLE 查詢條件出現關鍵字:&Oracle
- SqlServer儲存過程應用二:分頁查詢資料並動態拼接where條件SQLServer儲存過程
- 如何在Oracle資料庫中查詢表和欄位說明Oracle資料庫
- js中使用正規表示式查詢字母和數字的方法JS
- Spark SQL解析查詢parquet格式Hive表獲取分割槽欄位和查詢條件SparkSQLHive
- 查詢資料庫表及表欄位資料庫
- 儲存過程WHERE條件不生效儲存過程
- 如何查詢BAPI SD_SALESDOCUMENT_CHANGE裡欄位對應的資料庫儲存表API資料庫
- ORACLE查詢欄位中含有空格的資料Oracle
- mysql帶AND關鍵字的多條件查詢MySql
- 同一欄位多個查詢條件時遇到的一個問題
- 查詢條件和條數,先查詢兩條免費的,後面為vip
- SQL Server 查詢資料庫中所有表資料條數SQLServer資料庫
- 根據查詢條件批量修改表資料
- 打家劫舍+數字範圍按位與
- 如何在Spring Data MongoDB 中儲存和查詢動態欄位SpringMongoDB
- 報表查詢條件的 N 種使用方式
- 如何查詢 SAPGUI 螢幕上某個欄位對應的資料庫表儲存的試讀版GUI資料庫
- mysql,where條件查詢等學習筆記MySql筆記
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- 資料的儲存和查詢分離不利查詢效能 - thenewstack
- MySQL:Innodb中數字的儲存方式MySql
- ElasticSearch類似Mysql的not in 和 in 查詢ElasticsearchMySql
- 對十進位制數字的按位輸出,取反,並求其位數
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- SQL Server 查詢表註釋和欄位SQLServer
- 在 SAP MM 物料顯示介面上看到一個欄位,如何查詢哪張資料庫表的哪個欄位進行的儲存資料庫
- MYSQL學習筆記6: DQL條件查詢(where)MySql筆記
- hive將查詢資料插入表中某欄位無資料Hive
- ef8 Contains 查詢條件 報錯 $ 附近錯誤AI
- 資料儲存智慧化,杉巖打造新基建數字底座
- 杉巖資料:海量智慧儲存,打造新基建數字底座
- isAlnum判斷字元是否為字母數字字元(字母和數字都屬於字母數字字元)字元
- 查詢oracle欄位預設值Oracle