当前位置:   article > 正文

Oracle和DB2的区别:_db2dialect和db2区别

db2dialect和db2区别

最近公司原来项目使用DB2,现在要求兼容Oracle,故此作此章,虽然千篇一律,但个人谨以此为记:

配置文件修改:

1、spring-jdbc.xml
    【<property name="dialectClass" value="com.joyintech.tams.framework.paginator.dialect.DB2Dialect"></property>=><property name="dialectClass" value="com.joyintech.tams.framework.paginator.dialect.OracleDialect"></property>2、jdbc_develop.properties
   DB2:
   jdbc.driver=com.ibm.db2.jcc.DB2Driver
   jdbc.url=jdbc:db2://192.168.70.29:60006/GFDB:currentSchema=TISDB;
   jdbc.validationQuery=SELECT 1 FROM SYSIBM.SYSDUMMY1

   Oracle:
   jdbc.driver=oracle.jdbc.driver.OracleDriver
   jdbc.url=jdbc:oracle:thin:@//192.168.70.191:1521/ORCL
   jdbc.validationQuery=SELECT 1 FROM DUAL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

数据类型转换函数
在这里插入图片描述

a.子查询别名 ( as能否使用 )

ORACLE 中支持:select * from(select 1 from dual) 或者 select * from(select 1 from dual) t

DB2    中支持:select * from(select 1 from sys.userId) t 或者 select * from(select 1 from sys.userId) as t

两者兼容  写法:select * from(子查询) t

Oracle中遇到列名为Oracle关键字的,需要用双引号括起来
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

b.创建索引时 ( replace字段 )
oracle支持,DB2不支持 create or replace语句在DB2下是非法的

不可以用 CREATE OR REPLACE SEQUENCE a1,要用 CREATE SEQUENCE a1
  • 1

c.DATE数据类型的区别:
ORACLE中DATE类型是带有时分秒的,但DB2下DATE只是年月日,如’2007-04-28’,且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型。sql传值的时候,DB中是日期类型的,如果画面中只有年月日(yyyy-MM-dd),在操作数据库的时候,传值时候要注意:
①用String传值
②用Date传值(需要将Date型变量中的时分秒格式化)

select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff') from dual;
select to_date(to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff'),'yyyy-mm-dd hh24:mi:ss:ff')from dual;
  • 1
  • 2

d.获取系统日期:

ORACLE: Select sysdate from dual;
DB2:    Select current timestamp/date from sysibm.sysdummy1;
  • 1
  • 2

e.Substr用法:

SUBSTR(Str,POS,<LENGTH>) ; --Str需要截取的参数,POS从什么位置截取,LENGTH截取的长度
  • 1

在Oralce中,position是可以取值为0的,但是在DB2中,取值为0的话会报错;
在Oracle中,我们的length长度是可以大于等于char字符串的长度的,但是函数本身的处理是依据你的起始位置position到char字符串结尾位置的长度来处理,并不会跟你所给定的length来确定,相当于是Oracle为我们做了正确性的辨别并处理掉多余的长度。
在DB2中,如果length的长度大于了起始位置到结束位置之间的长度,那么数据库只为我们报错,并不会像Oracle那样执行出我们想得到的结果。
f.函数 rownum等的用法区别:
函数rownum在DB2中是不被支持的;
如果采用JDBC分页的话,注意rownum在DB2中不受支持,比如从masa_area表中取得area_id最小的10条记录,语句分别如下,注意这里的别名 t 书写方法

ORACLE:
select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10

DB2: 
select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10
  • 1
  • 2
  • 3
  • 4
  • 5

本文会有不当之处,欢迎指导,谢谢。。。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号