Oracle DB (PL/SQL) 重构工具

标签 oracle refactoring plsql

我想知道是否有任何适用于 Oracle 数据库,尤其是 PL/SQL 的好的重构工具。我正在开发一个项目,其中一半的开发人员使用 c#,另一半在 db 上,其中 pl/sql 中有一个大而复杂的模式和一个大的代码库。我们也使用 sql server,但数据库团队只与 Oracle 合作。

这个代码库正在积极开发中,并且正在逐步重构,但我很惊讶地看到用于 oracle 的重构工具看起来有多糟糕(或者至少与 Eclipse 和 Resharper 相比)。

开发人员正在使用仅具有基本重构支持的 Toad(可能因为它似乎更针对 db admin 然后是开发)。我自己以前使用过 Toad,但一直认为 pl/sql 有更多用于处理代码的功能,但从未研究过。现在据我所知,它提供的唯一重构是提取方法(过程)和变量重命名。我读了一篇比较 sql developer 和 pl/sql developer 的文章,这些似乎对重构没有更好的支持。我快速浏览了 eclipse 数据工具项目,但没有看到自从我上次使用它(几年前)以来他们已经添加了重构支持。

对于 Sql Server,存在 Sql Refactor,当表结构发生变化时,它会传播到存储过程。对我来说,这比让某人手动更新所有存储过程更干净,更不容易出错。我过去在一个项目中使用过这些工具的旧版本,它们看起来还不错,但有点慢,但那是几年前的事了,它仍然可以使用。

对于 Oracle 来说,类似的东西已经对我们的开发团队有很大的帮助,所以如果它们确实存在的话,我会很感激一些关于 Oracle 的良好重构工具的指针。
谢谢,
摩擦

最佳答案

碰巧的是,TOAD 中的“D”代表的是开发人员而不是 DBA。事实上,许多 DBA 都讨厌 TOAD 和其他此类工具。

你运气不好。据我所知,没有用于重构 PL/SQL 的工具。根本问题是重构作为一个概念来自OOP范式,而PL/SQL不是面向对象的。它不支持继承或多态 (*) .这意味着支持经典重构实践的许多技术(比如由 Fowler 定义的)——抽象、接口(interface)等——在 PL/SQL 中没有类似物。

这样做的必然结果是,习惯于将重构作为其概念工具箱一部分的人倾向于避免使用 PL/SQL 进行编程。我曾经就这个问题在 TDD 列表上进行过激烈的辩论。结果是,即使是需要并欣赏 PL/SQL 优点的开发人员也宁愿使用具有更好工具支持的语言进行开发,the Agile Manifesto 的第 #1 条虽然。

重构最重要的工具是自动化单元测试。虽然 TOAD 没有(我认为)集成单元测试,但 Oracle SQL Developer 的下一个版本将会。还有独立的单元测试工具。我最近在 another SO thread 中提到了其中的几个。 .

在重构 PL/SQL 以匹配数据库中的更改方面,可以说大多数与表的交互应该通过生成的表 API 来实现,而不是嵌入到事务性 PL/SQL 中。在这个快乐的领域里,不需要重构工具,我们只需要重新生成相关的 API。我在上面链接的帖子也提到了 QCGU,这是一个可以做到这一点的工具。当然,当我们有一个没有以这种方式组织的 PL/SQL 代码库时,生活就会变得更加艰难。得知在 PL/SQL 中实现 Feathers 的 WELC 的工具支持并不多,您不会感到惊讶。

(*) 是的,我知道 Oracle 有类型,但它们是 (a) SQL 而不是 PL/SQL 和 (b) 有多少人实际上在使用它们构建 API?

关于Oracle DB (PL/SQL) 重构工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1523305/

相关文章:

SQL Oracle Timestamp - 两列之间的算术

oracle - 如何查找Oracle中授予用户的权限和角色?

c - 重构重复的 guard 语句

oracle - 如果y <x,则PL/SQL “between x and y”不起作用。为什么?

database - Oracle 外部表 - 指定动态文件名

sql - 如何优化在 UPDATE 中追加到 CLOB 的性能?

database - oracle存储过程中的错误绑定(bind)变量

ruby-on-rails - 在 Rails 中重构一个复杂的过滤器

c# - 变量名不能以 'm_' : StyleCop Rule 1308 - Why is it considered a bad (or not good/standard) practice? 开头

sql - 在 MERGE 语句 ORACLE 中更新多列