1

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

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

4

3 回答 3

2

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

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

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

于 2013-11-07T13:15:33.940 回答
1

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

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

于 2013-11-07T15:54:32.410 回答
0

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

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

于 2013-11-07T10:25:43.363 回答