首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将现有触发器更新到Liquibase中

问将现有触发器更新到Liquibase中
EN

Stack Overflow用户
提问于 2020-07-28 09:25:35
回答 2查看 410关注 0票数 1

我是Liquibase的新人,我需要一些帮助。

我有一个没有捕获所有数据的现有触发器;我对本地Oracle数据库进行了一些更改。现在我需要将这些更改添加到Liquibase中,但我不知道如何做到这一点。

我知道您不能通过直接更新原始.xml文件来违反liquibase中的合同。

据我所知,我需要创建一个新的changelog .XML文件,然后包含另一个post_migration文件上的路径。

我的困惑是,我是必须删除原始触发器,然后创建一个新文件,还是?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-28 21:25:04

我从不在XML文件中创建触发器、过程甚至视图,因为这会使事情变得更加复杂(我认为)。

我通常将实际的触发器定义移动到一个SQL脚本中(我也可以在开发和测试期间分别运行该脚本),然后将该SQL文件包含在Liquibase changelog中:

代码语言:javascript
复制
<changeSet id="42" author="arthur" runOnChange="true">
    <sqlFile path="triggers/some_trigger.sql" 
             stripComments="false"
             splitStatements="true"
             endDelimiter="/"
             relativeToChangelogFile="true"/>
</changeSet>

some_trigger.sql脚本存储在git中(svn,...)与XML changelog一起使用。runOnChange="true"是这里的“神奇成分”。您不必接触XML文件,只需编辑SQL脚本即可。在部署期间,Liquibase将检查(SQL)文件是否已更改,并在需要时运行脚本。

票数 2
EN

Stack Overflow用户

发布于 2020-07-28 20:16:12

因此,我相信您已经在本地开发人员数据库中创建/更新/替换了SQL触发器,并且现在您希望将liquibase脚本包含到您的产品的发布分发包中。

liquibase没有提供特殊的xml语法来创建触发器,因此您只需添加一个新的变更集,在标记内保存您的pl/sql脚本。该脚本将与您在本地数据库上运行的脚本相同。

示例代码如下:

代码语言:javascript
复制
<changeSet id="1" author="me">
    <sql endDelimiter="/">
        CREATE OR REPLACE TRIGGER trigger_name before insert
                on table1_name for each row
           BEGIN
                select seq_myseq.nextval
                      into :new.myid
                      from dual;
           END;
        /
    </sql>
</changeSet>

当你调用liquibase update时,这段代码只编译目标数据库中的触发器。在大多数情况下,这就足够了。但我强烈建议您向您的DBA或team led询问您的团队在编写liquibase脚本时执行的规则。因此,结果可能要复杂得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63125755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档