【UNION】ORA-01790錯誤模擬及分析一例
ORA-01790錯誤提示資訊是“expression must have same datatype as corresponding expression”,如果使用oerr命令檢視,沒有過多的描述資訊。
單純從錯誤資訊的內容其實就可以大概看出問題出處,是由於資料型別不一致引起的報錯。
這裡我透過一個實驗模擬一下這個錯誤,然後給出一個解決方法。
實驗中我們將使用UNION ALL操作來模擬這個錯誤,因為UNION ALL要求多個UNION內容對應欄位的資料型別要嚴格一致。
1.建立三個實驗用表T1、T2和T3
sec@ora10g> create table t1 (x varchar2(10), y varchar2(10));
Table created.
sec@ora10g> create table t2 (x varchar2(10), y varchar2(10));
Table created.
sec@ora10g> create table t3 (x int, y varchar2(10));
Table created.
注意T1和T2表的所有欄位型別均為“VARCHAR2”,T3表的X欄位型別是“INT”。
2.每張表初始化一條記錄
sec@ora10g> insert into t1 values ('1', 'secooler');
1 row created.
sec@ora10g> insert into t2 values ('2','HOU');
1 row created.
sec@ora10g> insert into t3 values (3,'Andy');
1 row created.
sec@ora10g> commit;
Commit complete.
3.先看正確的使用方法
sec@ora10g> select * from t1
2 union all
3 select * from t2;
X Y
---------- ----------
1 secooler
2 HOU
由於T1表和T2表的欄位型別相同,故此處可以得到正確的結果。
4.使用T2和T3表來模擬ORA-01790錯誤
sec@ora10g> select * from t1
2 union all
3 select * from t3;
select * from t1
*
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression
由於是我們設計的場景,此時我們真切的經歷了ORA-01790錯誤發上過程。
原因是顯然的,T1表的X列型別是VARCHAR2,這與T3表X列INT型別不符。
5.規避ORA-01790錯誤的一種方法
針對這個案例,這裡我們採用TO_CHAR函式強制將T3表的X列轉換為字串型別的方法來處理。
sec@ora10g> select * from t1
2 union all
3 select to_char(x),y from t3;
X Y
---------------------------------------- ----------
1 secooler
3 Andy
6.MOS中的參考資訊[ID 19128.1]
OERR: ORA 1790 expression must have same datatype as corresponding expression
Error: ORA 1790
Text: expression must have same datatype as corresponding expression
-------------------------------------------------------------------------------
Cause: A SELECT list item corresponds to a SELECT list item with a different
datatype in another query of the same set expression.
Action: Check that all corresponding SELECT list items have the same datatypes.
Use the TO_NUMBER, TO_CHAR, and TO_DATE functions to do explicit data
conversions.
7.小結
在使用UNION時,需要注意用到的欄位型別要保證一致;
不要放過任何報錯資訊後面隱含的真實原因,處理問題的過程就是自身提高的過程。
Good luck.
secooler
10.02.20
-- The End --
單純從錯誤資訊的內容其實就可以大概看出問題出處,是由於資料型別不一致引起的報錯。
這裡我透過一個實驗模擬一下這個錯誤,然後給出一個解決方法。
實驗中我們將使用UNION ALL操作來模擬這個錯誤,因為UNION ALL要求多個UNION內容對應欄位的資料型別要嚴格一致。
1.建立三個實驗用表T1、T2和T3
sec@ora10g> create table t1 (x varchar2(10), y varchar2(10));
Table created.
sec@ora10g> create table t2 (x varchar2(10), y varchar2(10));
Table created.
sec@ora10g> create table t3 (x int, y varchar2(10));
Table created.
注意T1和T2表的所有欄位型別均為“VARCHAR2”,T3表的X欄位型別是“INT”。
2.每張表初始化一條記錄
sec@ora10g> insert into t1 values ('1', 'secooler');
1 row created.
sec@ora10g> insert into t2 values ('2','HOU');
1 row created.
sec@ora10g> insert into t3 values (3,'Andy');
1 row created.
sec@ora10g> commit;
Commit complete.
3.先看正確的使用方法
sec@ora10g> select * from t1
2 union all
3 select * from t2;
X Y
---------- ----------
1 secooler
2 HOU
由於T1表和T2表的欄位型別相同,故此處可以得到正確的結果。
4.使用T2和T3表來模擬ORA-01790錯誤
sec@ora10g> select * from t1
2 union all
3 select * from t3;
select * from t1
*
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression
由於是我們設計的場景,此時我們真切的經歷了ORA-01790錯誤發上過程。
原因是顯然的,T1表的X列型別是VARCHAR2,這與T3表X列INT型別不符。
5.規避ORA-01790錯誤的一種方法
針對這個案例,這裡我們採用TO_CHAR函式強制將T3表的X列轉換為字串型別的方法來處理。
sec@ora10g> select * from t1
2 union all
3 select to_char(x),y from t3;
X Y
---------------------------------------- ----------
1 secooler
3 Andy
6.MOS中的參考資訊[ID 19128.1]
OERR: ORA 1790 expression must have same datatype as corresponding expression
Error: ORA 1790
Text: expression must have same datatype as corresponding expression
-------------------------------------------------------------------------------
Cause: A SELECT list item corresponds to a SELECT list item with a different
datatype in another query of the same set expression.
Action: Check that all corresponding SELECT list items have the same datatypes.
Use the TO_NUMBER, TO_CHAR, and TO_DATE functions to do explicit data
conversions.
7.小結
在使用UNION時,需要注意用到的欄位型別要保證一致;
不要放過任何報錯資訊後面隱含的真實原因,處理問題的過程就是自身提高的過程。
Good luck.
secooler
10.02.20
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-627340/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-01790 錯誤處理
- Ora-01555錯誤的模擬及處理
- 【CONNECT】ORA-00020錯誤模擬及處理方法
- 【CONNECT】ORA-00020錯誤模擬及處理方法實驗
- 執行期間丟擲NoSuchMethodError模擬及原因分析Error
- MySQL資料庫1236錯誤模擬和解決MySql資料庫
- 【EM】資料表誤刪除故障模擬及恢復
- SQL server 7安裝錯誤一例SQLServer
- PID除錯軟體(C#、模擬、模擬)除錯C#
- inconsistent datatypes: expected - got CLOB錯誤一例Go
- 儲存過程中DDL錯誤一例儲存過程
- 易犯的PHP小錯誤及相應分析PHP
- ORA-00257 錯誤分析及解決方法
- 如何在C#中模擬C++的聯合(Union)?[C#, C++] How To Simulate C++ Union In C#?C#C++
- ORA-03113錯誤解決一例
- RMAN-06133 錯誤解決一例
- ORA-32701錯誤原因分析及處理方法
- ORA-600[kqlnrc_1]錯誤分析及處理
- 解決android studio 模擬器取法啟動聲音的錯誤Android
- MySQL 5.6 GTID常見錯誤解決一例MySql
- opatch java.lang.OutOfMemoryError:Java heap space錯誤一例JavaError
- ORA-02063錯誤解決一例
- OGG-00751錯誤處理一例
- ORA-12514: 錯誤解決一例
- thinkphp原始碼分析(四)—錯誤及異常處理篇PHP原始碼
- fjkrws系統錯誤分析及log功能追加報告
- 【LISTENER】Oracle監聽TNS-12545及TNS-00515錯誤處理一例Oracle
- 【故障處理】因授權資訊丟失導致IMP時出現IMP-00041錯誤的模擬與分析
- CST—電磁及EMC模擬工具
- CST — 電磁及EMC模擬工具
- 【EM】鎖等待故障模擬及排查
- modelsim 獨立模擬vivado的IP核及模擬指令碼指令碼
- Storm模擬分析電話日誌ORM
- 阻塞(block)過程模擬與分析!BloC
- net 日誌分析錯誤
- web拼圖錯誤分析Web
- ORA-25138錯誤分析
- 2020年生活模擬遊戲市場狀況及案例分析遊戲