Microsoft T-SQL 到 Oracle SQL 的翻译
Posted
技术标签:
【中文标题】Microsoft T-SQL 到 Oracle SQL 的翻译【英文标题】:Microsoft T-SQL to Oracle SQL translation 【发布时间】:2010-09-07 16:38:11 【问题描述】:我已经使用 T-SQL 多年,但我刚刚搬到一个需要编写一些 Oracle 东西的组织,可能只是简单的 CRUD 操作,至少在我站稳脚跟之前。我不会将数据库从一个迁移到另一个,只是从应用程序开发的角度与现有的 Oracle 数据库进行交互。是否有工具或实用程序可以轻松地将 T-SQL 转换为 Oracle SQL,关键字映射器就是我正在寻找的东西。
附:我对 RTFM 太懒了,而且它不会成为我角色的重要组成部分,所以我只想让我加快速度。
【问题讨论】:
oracle.com/technetwork/database/migration/… 【参考方案1】:来回映射它们并非易事,所以我怀疑是否有一种工具可以自动完成。但是这个链接可能会对你有所帮助:http://vyaskn.tripod.com/oracle_sql_server_differences_equivalents.htm
【讨论】:
这不是微不足道的,但 Oracle Workbench 将占用大部分 T-SQL 并对其进行转换 不便宜(995 美元),但这可以做到:swissql.com/products/sql-translator/sql-converter.html【参考方案2】:纯 T-SQL 最重要的区别是:
NVL 替换 ISNULL SYSDATE 替换 GETDATE() 不支持转换 标识列必须替换为序列注意。我假设您不使用已弃用的 SQL Server *= 连接语法
@jodonell:你链接到的表有点过时了,在 9i 支持 CASE 和 ANSI 外连接之类的东西之后,oracle 变得更加符合标准
【讨论】:
【参考方案3】:如果你用 COALESCE 替换你的 ISNULL 和 NVL 废话,它会在 T-SQL 和 PL/SQL 中工作!
【讨论】:
【参考方案4】:与逻辑差异相比,到目前为止列出的语言差异微不足道。任何人都可以查找 NVL。很难查找的是
DDL
在 SQL Server 中,您可以随时随地轻松操作架构。
在 Oracle 中,我们不喜欢在存储过程中使用 DDL,因此您会遇到麻烦。您需要使用 EXECUTE IMMEDIATE 来执行 DDL 功能。
临时表
在 SQL Server 中,当逻辑变得有点困难时,常见的做法是缩短 sql 并将其解析为临时表,然后使用该临时表完成下一步。 MSSS 让这一切变得非常容易。
在 Oracle 中,我们不喜欢这样。通过强制中间结果,您可以完全阻止优化器为您找到快捷方式。但是如果您必须中途停止并保留中间结果,Oracle 希望您提前制作临时表,而不是即时制作。
锁
在 MSSS 中,您担心锁定,您没有可应用于 DML 的无锁提示,您可以通过锁升级来减少锁的数量。
在 Oracle 中,我们不会以这种方式担心这些。
读取已提交
直到最近,MSSS 还没有完全处理已提交读隔离,所以您担心脏读。
Oracle 几十年来一直如此。
等
MSSS 没有位图索引、IOT、表集群、单表哈希集群、强制唯一约束的非唯一索引的概念......
【讨论】:
【参考方案5】:如果您正在进行一次性转换,而不是尝试支持两个版本,则必须查看Oracle Migration Workbench。该工具可与 Oracle 的 SQLDeveloper 一起使用(如果您使用 Oracle,您确实应该拥有它)。这会将模式、数据和一些 T-SQL 转换为 PL/SQL。两者都很好,我发现它完成了大约 80% 的工作。足以使转换大部分程序变得值得,并手动转换剩余的“更难”的未知部分。
【讨论】:
【参考方案6】:不便宜(995 美元),但这个工具很好用:http://www.swissql.com/products/sql-translator/sql-converter.html
【讨论】:
此产品/网站似乎已不存在【参考方案7】:我已经完成了一些 SQL 服务器到 oracle 的迁移。不重写后端代码就无法迁移。两个数据库之间的差异太多,更重要的是程序员的两种思维方式之间的差异。很多经理认为这两个可以互换,我有经理让我从SQL Server复制存储过程并在oracle中编译它们,没有头绪! Toad 是目前市场上支持预言机应用程序的最佳工具。 SQL 开发人员还可以,但与 toad 相比令人失望。我希望甲骨文有一天能赶上他们的产品,但现在还没有。祝您有美好的一天:) 如果您要迁移到 oracle,那可能是有原因的,为了满足该要求,您需要重写后端代码,否则您会遇到很多问题。
【讨论】:
【参考方案8】:我有话要说。
1) 当我在 Oracle 8 上工作时,您不能执行“Select @Result”,而必须使用如下的虚拟表“Select @Result from dual”。不知道这种荒谬是否仍然存在。
2) 在 Oracle 世界中,他们似乎喜欢游标,您最好阅读一下它们,他们一直在使用 AFAICS。
祝你好运,尽情享受,
它与 MS SQL 没有什么不同。谢天谢地,我不必再使用它了,我又回到了 MS 工具的温暖舒适中。
【讨论】:
【参考方案9】:这里有几个人提到了前后转换。我不知道从 MSSQL 转换为 Oracle 的工具,但我使用免费的 MS 工具将 Oracle 数据库转换为 MSSQL,它对我有用,并且转换了一个大型数据库,我可以调用没有任何问题。它类似于 MS 也免费提供的 Access to MSSQL 工具。享受
【讨论】:
【参考方案10】:在 Oracle SQL Developer 中,有一个名为 Translation Scratch Editor 的工具。您可以从“工具”>“迁移”中找到它。
Oracle SQL Developer 可从 Oracle 免费下载,安装简单。
【讨论】:
这是从 TSQL 转换为 PL/SQL,而不是相反。 Oracle Scratchlauncher 从 T 转到 PL。 oracle.com/technetwork/database/migration/… 还有其他工具:ceiton.com/CMS/EN/technologies/sql-compiler.html#Solution 但可能没有灵丹妙药。【参考方案11】:我的印象是,大多数答案都集中在迁移整个数据库上,或者只是指出了 T-SQL 和 PL/SQL 之间的一些差异。我最近遇到了同样的问题。 Oracle 数据库存在,但我需要将整个负载的 T-SQL 脚本转换为 PL/SQL。
我安装了 Oracle SQL Developer 并运行了 Translation Scratch Editor(工具 > 迁移 > Scratch Editor)。
然后,只需输入您的 T-SQL,在下拉列表中选择正确的翻译(它应该默认为“T-SQL 到 PL/SQL”),然后进行转换。
【讨论】:
那你觉得这个翻译靠谱吗? 对我来说,是的。已经有一段时间了,所以我不确定我是否需要做一些小的改动,但最好是查看脚本(或其中的一些)。另外,我很确定我那里没有任何异国情调的东西。但它们是可靠的。 嗨,它会反过来转换吗,即 PLSQL => TSQL ?? @SanjokGurung 我不这么认为,但你应该检查一下,因为那是几年前的事了。【参考方案12】:jOOQ 有一个公开的免费翻译器,可以从这里的网站访问:https://www.jooq.org/translate
它支持 DML、DDL 和一些过程语法元素。如果您想通过命令行在本地运行翻译,可以购买许可证,命令行的工作方式如下:
$ java -cp jooq-3.11.9.jar org.jooq.ParserCLI -t ORACLE -s "SELECT substring('abcde', 2, 3)"
select substr('abcde', 2, 3) from dual;
见:https://www.jooq.org/doc/latest/manual/sql-building/sql-parser/sql-parser-cli
(免责声明,我为供应商工作)
【讨论】:
以上是关于Microsoft T-SQL 到 Oracle SQL 的翻译的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 相当于 Oracle 的收集方法(第一个、最后一个、下一个)?
Microsoft SQL Server 2022 新特性之 T-SQL 语言增强
Microsoft SQL Server 2022 新特性之 T-SQL 语言增强