你如何重构一个丑陋的过程/查询?

gor*_*ric 6 stored-procedures query-refactor

我继承了一个数据库,其中包含几个 1000-1500 行长的过程,复杂的嵌套子选择在某些地方深达 7 或 8 层。为了我自己的理智,我迫切需要重构它们,但是我怎么能以任何程度的信心开始这样做呢?

如果这是 .Net,我会编写单元测试 - 您是否推荐类似的方法?

Lei*_*fel 11

是的,创建单元测试。 这确实是确保修改后的版本满足与原始版本相同要求的唯一方法。

为了重构过程,寻找可以提取到单独过程或嵌套过程中的任何重复代码模式。如果程序仍然太长,则将它的一部分分解为单独的程序,每个程序完成一项任务。当您中断新程序时,您应该为其添加单元测试。

七或八个级别的子选择听起来有些过分,但您可能会发现其中一些甚至大部分是生成所需数据所必需的。我最初会专注于过程,然后处理 SQL。

要在 Oracle 中进行单元测试,最重要的测试商业产品是Quest 的 Code Tester。Oracle 在其免费的SQL Developer产品中内置了单元测试。StackOverflow 上的PL/SQL 单元测试问题有一些其他选项,或者您可以编写自己的测试。