今天在調(diào)試程序中,遇到一個“
ORA-03115: unsupported network datatype or representation
”的錯誤。問題已經(jīng)解決,有一些心得體會。
環(huán)境:
Oracle 8.17
數(shù)據(jù)庫一臺,
Oracle 9i
數(shù)據(jù)庫一臺,兩者間建有一個
DBLink
將相關(guān)的
shema
連接起來。在
Oracle 9i
這一端有一個
Table A,
如下:
Field Name |
Field Type |
…… |
….. |
||
confirm_time |
Timestamp |
|
creation_time |
Date |
|
…… |
情景:
有一個 Java 程序通過 JDBC 連接到 Oracle 8 那一端,現(xiàn)在這個應(yīng)用程序需要通過 DBLink 訪問 Oracle 9i 中的 Table A. 寫下如下的查詢語句:
select nvl(confirm_time, creation_time) from A@.....
該語句在 SQL Plus ( PL/SQL Developer )中執(zhí)行能夠完成并返回正確的結(jié)果,但將該語句放入 PreparedStatement 執(zhí)行是,卻得到錯誤:“ ORA-03115: unsupported network datatype or representation ”
原因分析:
Oracle 8 中還不存在 Timestamp 這樣的數(shù)據(jù)類型,而無論是字段 confirm_time, 還是表達式 nvl(confirm_time, creation_time) 返回的都是 Timestamp 類型,故會得到 ORA-03115 的錯誤。(在 PL/SQL Developer 中為何不出錯就不知道了,呵呵 …. 見笑見笑啦)
解決方法:
在 SQL 語句中將 Timestamp 轉(zhuǎn)化為 Date 類型,如:
select nvl(to_date(to_char(confirm_time, “yyyy-mm-dd hh24:mi:ss”), “yyyy-mm-dd hh24:mi:ss”), creation_time) from A@........