gpt4 book ai didi

sql - 将 DB2 查询转换为 oracle 查询

转载 作者:行者123 更新时间:2023-12-04 06:18:18 25 4
gpt4 key购买 nike

以前我们使用 DB2 作为数据库,但现在我们正在迁移到 Oracle。现在,在我们的项目中,我们广泛使用了特定于 Db2 的 sql。

有什么方法可以将这些 DB2 特定查询转换为 oracle 支持的查询。

谢谢

最佳答案

你还有很多工作要做!

在 DB2 和 Oracle 之间,一些重要的区别是(只是我能想到的任意列举):

数据类型

  • 数字数据类型:DB2 有更多的标准类型,例如 SMALLINT , INTEGER , DOUBLE等。这些在 Oracle SQL 中不存在(尽管有些存在于 PL/SQL 中)。这对于 DDL 和强制转换以及其他一些用例很重要,例如谓词的正确性
  • 日期数据类型:Oracle 的唯一区别 DATETIMESTAMP事实是TIMESTAMP有微秒。但是DATE也可能包含时间信息。在 DB2 中,DATE没有时间信息,我想。
  • 字符数据类型:阅读 VARCHAR 之间的区别和 VARCHAR2在 Oracle
  • NULL .在 Oracle 中,NULL比在 DB2 中更通用。在 DB2 v9.7 之前,您必须转换 NULL到任何显式类型,例如cast(null as integer) .这在 Oracle 中不是必需的。

  • 系统对象
  • SYSIBM.DUAL简单地变成 DUAL
  • 功能:它们都有点不同。您必须逐案检查。例如,LOCATE变成 INSTR

  • 句法
  • TRUNCATE IMMEDIATE变成 TRUNCATE
  • EXCEPT变成 MINUS
  • DB2的FETCH FIRST n ROWS ONLY : Oracle 中没有这样的子句。您必须使用 ROWNUMROW_NUMBER() OVER()过滤(见此 example)
  • DB2的MERGE语句比 Oracle 的语句更强大,以防您使用它。
  • DB2 支持 INSERT INTO .. (..) VALUES (..), (..), (..) .使用 Oracle,你必须写 INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

  • 先进的
  • 如果您使用存储过程,它们的工作方式会有所不同,尤其是涉及高级数据类型时,但这超出了此处的范围。

  • 在这方面最有效的方法可能是使用某种 SQL 抽象。如果你使用 Java,我建议你用 jOOQ 包裹你的 SQL 语句。 (免责声明:我为 jOOQ 背后的公司工作)。 jOOQ 为上述所有事实提供了 API 级别的抽象。大量 SQL 可以在 DB2 和 Oracle 上执行,无需调整。我们还在开发更独立的翻译产品: https://www.jooq.org/translate

    在更高的抽象层次上, Hibernate (或其他 JPA 实现)可以为您做同样的事情

    关于sql - 将 DB2 查询转换为 oracle 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951713/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com