代码之家  ›  专栏  ›  技术社区  ›  Juraj

重构PL/SQL触发器-提取过程

  •  3
  • Juraj  · 技术社区  · 16 年前

    如果你对触发器有类似的问题,你有没有找到解决方法?

    编辑:理想情况下,只有被提取代码引用的列才会作为输入/输出参数发送,如:

    要从触发器中提取的原始代码示例:

      .....
      if :new.col1 = some_var then
        :new.col1 := :old.col1
      end if
      .....
    

    将成为:

      procedure proc(in old_col1 varchar2, in out new_col1 varchar2, some_var varchar2) is
      begin
        if new_col1 = some_var then
          new_col1 := old_col1
        end if;
      end;
      ......
      proc(:old.col1,:new.col1, some_var);
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Ira Baxter    16 年前

    听起来您想在PL/SQL源代码上执行转换。要可靠地做到这一点,您需要一个工具,该工具可以将PL/SQL解析为某种编译器数据结构,根据该结构进行模式匹配并进行定向更改,然后重新生成修改后的PL/SQL代码。

    这个 DMS Software Reengineering Toolkit 是这样一种工具。它由被翻译的编程语言参数化;它有许多语言的现成的前端,包括C、C++、C语言、java、COBOL和…PL/SQL。

        2
  •  0
  •   dbaranov    16 年前

    这并不是确切的答案。显然,我没有足够的声誉来编辑原始问题。 问题在于,它不是我们通常所认为的“重构”。即使您将从触发器创建一系列过程,您也需要创建一个适当的框架来运行它们,以实现原始功能。我怀疑这也是一个挑战。

    作为一个解决方案建议,我将使用一个基于状态机的python脚本(参见 http://www.ibm.com/developerworks/library/l-python-state.html 例如)。如果您严格定义了应该翻译什么以及如何翻译,那么它将很容易实现。