作为一家公司,我们希望使用flyway来管理我们的Oracle数据库迁移,作为一种工具,它看起来非常适合我们的需求。我已经进一步研究了它如何适应我们的开发过程并遇到了一个我无法解决的问题。
我们将设置一个额外的数据库实例,我们将其用于持续集成和自动化测试。我们将使用flyway将我们的数据库应用程序发布到此实例。为了允许多个版本的数据库应用程序,我们希望能够将我们的数据库代码发布到不同的模式。因此,如果我们有一个名为SCOTT的模式,那么我们可能希望将代码发布到SCOTT_RM,SCOTT_CI,SCOTT_V5等。
我们可以在flyway中通过使用占位符来模拟Oracle中变量替换所需的语法来管理它,即
flyway.placeholderPrefix=&&
flyway.placeholderSuffix=.
这在通过Flyway或SQL * Plus运行时效果很好。我们的包装声明如下:
CREATE OR REPLACE PACKAGE &&SCHEMA_SCOTT..pa_package AS
然而,问题在于开发人员在TOAD中工作并且他们想要将代码直接编译到他们自己的模式中。当它作为脚本运行(F5),或从SQL * Plus运行时,变量被标记为需要一个值,允许将代码编译为正确的模式。但是,在TOAD中编译此代码(F9)时,无法识别变量,并且我们收到oracle错误“ORA-04050:无效或缺少过程,函数或包名称”。
使用F5编译代码是不切实际的,因为当出现编译错误时,它不会跳转到违规行,就像按下F9时一样。 e.g。
CREATE OR REPLACE PACKAGE &&SCHEMA_SCOTT..pa_package AS
lv_num NUMBER(); -- Compile Error
END;
/
有趣的是,我看了Oracle的SQL Developer,发现这些变量替换在那里工作,我希望。
有没有人知道我们如何在TOAD中解决这个问题?