随笔-8  评论-39  文章-0  trackbacks-0

今天在调试程序中,遇到一个“ ORA-03115: unsupported network datatype or representation ”的错误。问题已经解决,有一些心得体会。

 

环境:

Oracle 8.17 数据库一台, Oracle 9i 数据库一台,两者间建有一个 DBLink 将相关的 shema 连接起来。在 Oracle 9i 这一端有一个 Table A, 如下:

 

Field Name

Field Type

……

…..

confirm_time

Timestamp

 

creation_time

Date

 

……

 

情景:

有一个 Java 程序通过 JDBC 连接到 Oracle 8 那一端,现在这个应用程序需要通过 DBLink 访问 Oracle 9i 中的 Table A. 写下如下的查询语句:

 

select nvl(confirm_time, creation_time) from A@.....

 

该语句在 SQL Plus PL/SQL Developer )中执行能够完成并返回正确的结果,但将该语句放入 PreparedStatement 执行是,却得到错误:“ ORA-03115: unsupported network datatype or representation

 

原因分析:

Oracle 8 中还不存在 Timestamp 这样的数据类型,而无论是字段 confirm_time, 还是表达式 nvl(confirm_time, creation_time) 返回的都是 Timestamp 类型,故会得到 ORA-03115 的错误。(在 PL/SQL Developer 中为何不出错就不知道了,呵呵 …. 见笑见笑啦)

 

解决方法:

SQL 语句中将 Timestamp 转化为 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@........

 

 

 

posted on 2007-02-08 07:37 Jini 阅读(2365) 评论(2)  编辑  收藏 所属分类: 数据库相关

评论:
# re: 在Oracle8中通过DBLink存取Oracle9中Timestamp类型的问题 2007-04-18 16:03 | Freed
费劲了点,cast(timestamp as date)就可以了。  回复  更多评论
  
# re: 在Oracle8中通过DBLink存取Oracle9中Timestamp类型的问题 2007-04-18 16:28 | Jini
@Freed

谢谢!确实简单了。
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: