`
xiangqian0505
  • 浏览: 321634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实践Oracle与DB2区别及问题解决

阅读更多

项目进入开发阶段的时候,为了方便,一直使用 Oracle 数据库进行开发, 所以很多 sql 语句都是在 oracle 能正常创建的,后期由于项目中嵌入了 IBM 的产品及其他因素,所以不得不使用 db2 数据库,切换数据库过程中的区别还是有点大,如:创建表、视图、存储过程、 Ibatis 支持等等、、、,下面就总结一下我从 Oracle 数据库切换到 DB2 数据库碰到的一些问题及如何解决。

1.          创建表字段类型的区别


 

 

 

 

Oracle

 

 

DB2/400

 

 

Oracle 数据类型

 

 

注意事项

 

 

DB2 UDB 数据类型

 

 

注意事项

 

 

DATE

 

 

DATE
TIME
TIMESTAMP l

 

 

如果只使用 MM/DD/YYY, 那么使用 DATE 类型。
l
如果只使用 HH:MM:SS, 那么使用 TIME 类型。
l
如果要使用日期和时间,则使用时间戳类型( TIMESTAMP
l
可以使用 Oracle 中的 TO_CHAR() 函数来取 DATE 的字串来分别与 DB2/400 DATE TIME 相匹配。

 

 

VARCHAR2(n)

 

 

n<=4000

 

 

CHAR(n)
VARCHAR(n) l

 

 

n<=32766, 则使用 DB2/400 中的 CHAR 类型、 VARCHAR

 

 

LONG

 

 

n<=2GB

 

 

VARCHAR(n) DL@bitsCN_com 网管软件下载
CLOB(n) l

 

 

n<=32K, 则使用 DB2/400 中的 CHAR 类型、 VARCHAR
l
32K=< n <=2GB ,则使用 CLOB

 

 

ROW&
LONG ROW

 

 

n<=255

 

 

CHAR(n) FOR BIT DATA
VARCHAR(n) FOR BIT DATA
BLOB(n) l

 

 

n<=32K, 则使用 CHAR(n) FOR BIT DATA
VARCHAR(n) FOR BIT DATA
l
n<=2GB, 则使用 BLOB(n)

 

 

BLOB

 

 

n<=4GB

 

 

BLOB(n)

 

 

n<=2GB, 则使用 BLOB(n)

 

 

CLOB

 

 

n<=4GB

 

 

CLOB(n)

 

 

n<=2GB, 则使用 CLOB(n)

 

 

NCLOB

 

 

n<=4GB

 

 

DBCLOB(n)

 

 

n<=2GB, 则使用 DBCLOB(n/2)

 

 

NUMBER

 

 

SMALLINT/INTEGER/BIGINT

DECIMAL(p,s)/NUMBER(p,s)

Float(n)/ REAL/DOUBLE l

 

 

Oracle 中定义 NUMBER(p) NUMBER(p,s), 则使用 SAMLLINT/INTEGER/BIGINT
l
Oracle 中定义 NUMBER(p,s), 则使用 DECIMAL(p,s)
l
Oracle 中定义 NUMBER, 则使用 FLOAT(n)/REAL/DOUBLE bbs.bitsCN.com

 

 

 

 

 

创建表区别基本上就这些了,创建表时根据区别修改一下字段类型基本上不会大的问题。

 

 

 

1.          创建视图区别

创建视图的时候不能使用 OR REPLACE ,不能这样使用排序语句

 

 

CREATE

    VIEW VIEW_SSC  AS

    SELECT DATE_TIME FROM JBPM4_TASK TB ORDER BY TB. DATE DESC

2.          创建存储过程区别

 

 

 

a)          参数类型和参数名称的位置不同
db2
CREATE PROCEDURE PRO1 (IN OrgID int)
oracle
CREATE PROCEDURE PRO1 (OrgID IN int)

b)          同时作为输入输出参数的写法不同
db2
CREATE PROCEDURE PRO1 (INOUT OrgID int) INOUT 连着写

oracle
CREATE PROCEDURE PRO1 (OrgID IN OUT int) IN OUT 中间空格隔开,而且必须 IN OUT 之前

c)          没有输入或输出参数时
db2
CREATE PROCEDURE PRO1 ()
oracle
CREATE PROCEDURE PRO1 不能有空的括号

d)          赋值语句写法不一样
db2: set var =..
oracle: var := ..

e)          异常处理不一样

 

 

 

f)           CREATE PROCEDURE

db2 :

CREATE PROCEDURE SSCDBUSER.INDI_DEL_PRO


 

( IN IDPARA VARCHAR ( 32 ), OUT RETURNPARA INTEGER )


 

LANGUAGE SQL


 

DYNAMIC RESULT SETS 1


 

DETERMINISTIC


 

BEGIN


 

  DECLARE COUNTID INTEGER ;


 

  DECLARE APPLYNOD VARCHAR ( 20 );


 

  DECLARE CATEGORYD VARCHAR ( 4 );


 

  SELECT COUNT ( ID ) INTO COUNTID FROM VIEW_SSC_INDIVIDUALFORMLIST WHERE ID = IDPARA;


 

  SET RETURNPARA = COUNTID;


 

  SELECT APPLY_NO, CATEGORY INTO APPLYNOD, CATEGORYD FROM VIEW_SSC_INDIVIDUALFORMLIST WHERE ID = IDPARA;


 

  IF CATEGORYD= '1001' THEN


 

        DELETE FROM SSC_EVECT_LOAN_INFO WHERE ID = IDPARA;


 

  ELSEIF CATEGORYD= '1002' THEN


 

        DELETE FROM SSC_DAILY_LOAN_INFO WHERE ID = IDPARA;


 

        DELETE FROM SSC_DAILY_LOAN_DETAIL_INFO WHERE ID = APPLYNOD;


 

  ELSEIF CATEGORYD= '1003' THEN


 

        DELETE FROM SSC_EVECT_EXPENSE_INFO WHERE ID = IDPARA;


 

        DELETE FROM SSC_EVECT_EXPENSE_DETAIL_INFO WHERE ID = APPLYNOD;


 

  ELSEIF CATEGORYD= '1004' THEN


 

        DELETE FROM SSC_DAILY_EXPENSE_INFO WHERE ID = IDPARA;


 

        DELETE FROM SSC_DAILY_EXPENSE_DETAIL_INFO WHERE ID = APPLYNOD;


 

  END IF ;


 

END


 

 

 

 

oracle :

 

 

 

CREATE OR REPLACE PROCEDURE "INDI_DEL_PRO" ( IDPARA IN VIEW_SSC_INDIVIDUALFORMLIST.ID% TYPE , RETURNPARA OUT NUMBER )


 

AS


 

APPLYNO VIEW_SSC_INDIVIDUALFORMLIST.APPLY_NO% TYPE ;


 

CATEGORY VIEW_SSC_INDIVIDUALFORMLIST.CATEGORY% TYPE ;


 

BEGIN


 

  SELECT COUNT (*) INTO RETURNPARA FROM VIEW_SSC_INDIVIDUALFORMLIST WHERE ID= IDPARA;


 

  SELECT APPLY_NO, CATEGORY INTO APPLYNO, CATEGORY FROM VIEW_SSC_INDIVIDUALFORMLIST WHERE ID= IDPARA;


 

  IF     CATEGORY= '1001' THEN


 

        DELETE FROM SSC_EVECT_LOAN_INFO WHERE ID= IDPARA;


 

  ELSIF CATEGORY= '1002' THEN


 

        DELETE FROM SSC_DAILY_LOAN_INFO WHERE ID= IDPARA;


 

        DELETE FROM SSC_DAILY_LOAN_DETAIL_INFO WHERE ID= APPLYNO;


 

  ELSIF CATEGORY= '1003' THEN


 

        DELETE FROM SSC_EVECT_EXPENSE_INFO WHERE ID= IDPARA;


 

        DELETE FROM SSC_EVECT_EXPENSE_DETAIL_INFO WHERE ID= APPLYNO;


 

  ELSIF CATEGORY= '1004' THEN


 

        DELETE FROM SSC_DAILY_EXPENSE_INFO WHERE ID= IDPARA;


 

        DELETE FROM SSC_DAILY_EXPENSE_DETAIL_INFO WHERE ID= APPLYNO;


 

  END IF ;


 

END ;

3.          如果工程是有用到 Ibatis 那么 Ibatis sql 语句写法也有些区别

a)          Ibatis 支持 oracle 数据库 sql 中可以带 * 号查询, db2 不能使用 select * from tablename ;这是最主要的。

b)          Ibatis 支持 oracle 空值插入、更新,但是如果是 db2 映射值传空的话要必须要加上对应的字段类型

如: # remark:VARCHAR#

                                remark 是属性值, VARCHAR 是数据库中对应的字段类型。

 

 

 

 

 

总结了一下,方便以后查阅,同时也希望对看到这篇博客的朋友一些帮助,因为最近在解决这些问题时也花了不少时间。

1
1
分享到:
评论

相关推荐

    Oracle和DB2的那些事

    #### 二、Oracle与DB2的主要区别 1. **数据类型支持**: - Oracle提供了丰富的数据类型,包括BFILE、RAW等,而DB2则引入了XML数据类型的支持,使得存储和检索XML文档更为便捷。 2. **性能优化工具**: - Oracle...

    Oracle与DB2技术比较.doc

    Oracle和DB2是两大主流的关系型数据库管理系统,广泛应用于企业级的数据存储和处理。这篇文档对比了IBM DB2 Universal Database (UDB) V7.2和Oracle 9i的技术特性,帮助读者理解两者在2001年时的差异。 首先,IBM ...

    DB2 to Oracle 迁移培训

    - 迁移过程中的常见问题及解决方法。 ##### 6. **数据并发控制** - **重点**: 讨论 DB2 在处理高并发事务时的优势。 - **内容**: - 并发控制的基本原理。 - DB2 的锁定机制与隔离级别。 - 如何优化并发环境下...

    建立db2、 oracle联合数据库图文教程

    - 记录配置过程中遇到的问题及解决方案,便于后续排查和优化。 #### 总结 通过上述步骤,我们能够成功建立db2与oracle之间的联合数据库。这一过程不仅增强了数据的互通性,还为数据管理和分析提供了更多可能性。...

    oracle db2 sql server

    标题“Oracle、DB2、SQL Server”提示我们讨论的是三个主要的关系型数据库管理系统(RDBMS):Oracle、IBM DB2以及Microsoft SQL Server。这些数据库系统在IT领域中广泛用于数据存储、管理和处理,尤其在企业级应用...

    oracle和db2等数据库自学文档

    了解如何使用日志和跟踪来定位和解决问题,以及如何使用内置的诊断工具,如Oracle的SQL*Plus或DB2的db2pd,对于快速解决故障至关重要。 总之,Oracle和DB2数据库的学习是一个全面的过程,涵盖理论知识、编程语言、...

    dba,oracle,db2,infor

    Oracle、DB2和Infor都是知名的数据库管理系统,它们在企业级应用中广泛使用,尤其在处理大量数据和高并发场景下表现出色。本压缩包文件包含了关于这些数据库的经典教材和培训资源,对于想要深入理解和提升DBA技能的...

    wxh dB2对比oracle

    DB2也拥有类似的工具,如DB2 Recovery Expert,但Oracle的工具在业界更为广泛使用,用户社区也更活跃,这意味着用户可以更容易地找到解决方案和最佳实践。 #### 三、平台支持与跨平台能力 Oracle和DB2都支持多种...

    数据库性能调优.原理与技术PDF教程,从零让你学习oracle,DB2,SQL SERVER等

    本教程涵盖了Oracle、DB2和SQL Server这三种主流的关系型数据库管理系统,旨在帮助读者从零开始掌握数据库性能优化的技术和原理。 Oracle数据库是全球广泛使用的大型企业级数据库系统,以其强大的功能和高度的可...

    《DB2中国》特刊电子杂志

    - **《leo:我与她(DB2)》**: 描述了作者与DB2之间的深厚情感以及如何通过DB2解决实际工作中的问题。 - **其他文章**: 还包括了多位作者关于DB2使用经历的文章,如《David:结缘》、《fcming915:我一步步的脚印...

    sqlmonitor监控oracle,mysql,db2正在执行的sql

    SQLMONITOR是一款强大的数据库监控工具,它专门设计用于实时监控Oracle、MySQL和DB2数据库中正在执行的SQL语句。这个工具对于数据库管理员和开发人员来说极其重要,因为它可以帮助他们诊断性能问题,优化查询,以及...

    db2中文学习资料(V97)

    4. 兼容性:3.2 - DB2 Oracle 兼容特性.pdf介绍了DB2如何在保持自身特色的同时,提供与Oracle数据库兼容的功能,便于迁移和集成。 5. 开发工具:3.9 - ProC, PHP, .Net, ODBC+JDBC.pdf讲解了不同开发语言(如ProC、...

    ibm db2电信行业数据挖掘红皮书

    6. Oracle对比:虽然本红皮书主要讨论IBM DB2,但提及Oracle表明它可能会对比两种数据库系统的优缺点,包括性能、易用性、成本和生态系统等方面,帮助读者选择最适合电信业务的数据库解决方案。 7. 数据安全与隐私...

    Oracle GoldenGate V11.1.1.1.2 for Oracle 11g on Linux x86-64.zip

    首先,OGG_WinUnix_Rel_Notes_11.1.1.1.2.pdf文档很可能是Oracle GoldenGate在Windows和Unix平台上的发行说明,其中详细介绍了此版本的新特性、增强功能、已知问题以及解决方法。在阅读这份文档时,用户可以了解如何...

    [IBM DB2 9.7 高级管理指南] (IBM DB2 9.7)

    - **Adrian Neagu**:拥有超过十年的数据库管理经验,主要涉及IBM DB2及Oracle数据库。自2002年起开始接触IBM DB2,并获得了多项专业认证,包括IBM DB2 Certified Administrator(版本8.1.2和9)、Oracle Database ...

    IBM DB2 认证教程

    ### IBM DB2 认证教程知识点解析 #### 一、概述 IBM DB2是一款由IBM公司开发的关系型...通过对这些知识点的学习,不仅可以帮助考生顺利通过认证考试,还能在实际工作中更好地运用DB2解决各种复杂的数据管理挑战。

Global site tag (gtag.js) - Google Analytics