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 一欄位 資料存在數字和漢字,只提取數字的sqlOracleSQL
- varchar型別的欄位儲存純數字的排序型別排序
- where語句中多條件查詢欄位NULL與NOT NULL不確定性查詢Null
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- 在oracle中,select語句查詢欄位中非純數字值Oracle
- varchar or blob:欄位型別的儲存和溢位條件型別
- 查mysql欄位中的數字記錄MySql
- php檢查是否是數字和字母PHP
- ORACLE 查詢條件出現關鍵字:&Oracle
- MongoDB之資料查詢(where條件過濾)MongoDB
- js中使用正規表示式查詢字母和數字的方法JS
- SqlServer儲存過程應用二:分頁查詢資料並動態拼接where條件SQLServer儲存過程
- Spark SQL解析查詢parquet格式Hive表獲取分割槽欄位和查詢條件SparkSQLHive
- oracle date資料的條件查詢Oracle
- oracle sql去掉漢字保留數字或字母OracleSQL
- 無合適where條件過濾時儘量選擇order by後的欄位以驅動表進行查詢薦
- MySQL - 一個欄位儲存多個ID時的查詢MySql
- 如何在Oracle資料庫中查詢表和欄位說明Oracle資料庫
- 儲存過程WHERE條件不生效儲存過程
- 如何查詢BAPI SD_SALESDOCUMENT_CHANGE裡欄位對應的資料庫儲存表API資料庫
- JavaScript生成四位數字或者字母隨機數JavaScript隨機
- mysql帶AND關鍵字的多條件查詢MySql
- JS只能輸入數字,數字和字母等的正規表示式JS
- oracle儲存過程procedure_輸入引數varchar2與char報錯Oracle儲存過程
- 查詢條件和條數,先查詢兩條免費的,後面為vip
- SQL Server 查詢資料庫中所有表資料條數SQLServer資料庫
- 同一欄位多個查詢條件時遇到的一個問題
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- 數字時代,如何搞定資訊儲存這件麻煩事?
- 查詢多張表記錄數的儲存過程儲存過程
- 查詢oracle表的資訊(表,欄位,約束,索引)Oracle索引
- 報表查詢條件的 N 種使用方式
- 根據查詢條件批量修改表資料
- SQL SERVER 資料庫查詢表和欄位資訊語句SQLServer資料庫
- Laravel 一條 SQL 如何 count 多個欄位,Laravel 一條 sql 查詢每個分類的數量LaravelSQL
- Oracle查詢資料庫中所有表和分割槽表的記錄數Oracle資料庫