【问题标题】:Oracle to PostgreSQL query converter Possible?Oracle 到 PostgreSQL 查询转换器 可能吗?
【发布时间】:2013-11-18 22:39:51
【问题描述】:

我正在考虑编写一个转换器,它接受任何 oracle 查询并返回查询的 Postgresql 格式,假设表和列是相同的。

我现在做什么我会及时进行转换,因此我对两者都有基本的了解,并且想要一些容易实现的专家建议吗?

【问题讨论】:

    标签: mysql database oracle postgresql


    【解决方案1】:

    尝试使用“商业”版本的 PostgreSQL - EnterpriseDB。它具有适用于 Oracle 的兼容层。

    如果您要自己编写“convector”:请查看此 github 项目:https://github.com/porcelli/plsql-parser。它是 Oracle SQL 方言的开源解析器。我必须警告您,即使您有 AST 用于 Oracle 查询,将 AST 转换为其他 SQL 方言仍然需要做很多事情。您还需要大量示例查询来进行测试。您可以在此项目的测试文件夹中找到一些示例查询。

    也为 MySQL 实现了类似的项目,但我现在找不到它的主页。

    【讨论】:

    • 您的回答也很有帮助,但我一直在寻找编写此类转换器时可能遇到的障碍。
    • 好吧,如果你正在寻找无障碍:MODEL 子句(如上所述),分析函数,查询因子(又名 CTE),设置运算符,如“INTERSECT”、“MEMBER OF”、PIVOT/UNPIVOT , XMLQUERY 支持。具有疯狂调用约定的各种函数。 CUBE 诸如 GROUP BY ROLLUP() 之类的东西。您可以在此处找到解析器单元测试的示例:github.com/ibre5041/plsql-parser/tree/master/tests.
    【解决方案2】:

    部分解决方案是在 PostgreSQL 中提供 Oracle 中可用的功能。你可以看看http://orafce.projects.pgfoundry.org/

    "这个项目的目标是实现Oracle数据库中的一些函数。一些日期函数(next_day、last_day、trunc、round、...)、字符串函数和一些模块(DBMS_ALERT、DBMS_OUTPUT、UTL_FILE、DBMS_PIPE、. ..) 现已实施。功能已在 Oracle 10g 上验证,模块可用于生产工作。”

    【讨论】:

      【解决方案3】:

      每个查询都不可能。它们各自具有另一个没有的语法和功能——例如,Oracle 中的 MODEL 子句,或 PostgreSQL 的特殊形式的“SELECT DISTINCT ON”。

      大多数情况下,Oracle 具有 PostgreSQL 没有的功能:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm

      【讨论】:

        猜你喜欢
        • 2018-02-28
        • 2023-02-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        相关资源
        最近更新 更多