将现有触发器更新到 Liquibase
Update an existing trigger into Liquibase
我是 Liquibase 的新手,我需要一些帮助。
我有一个没有捕获所有数据的现有触发器;我对本地 Oracle 数据库进行了一些更改。现在我需要将这些更改添加到 Liquibase 中,但我不知道该怎么做。
我知道你不能通过直接更新原始 .xml 文件来违反 liquibase 中的合同。
根据我的理解,我需要创建一个新的变更日志 .XML 文件,然后将路径包含在另一个 post_migration 文件中。
我的困惑是,我是否必须删除原始触发器,然后创建一个新文件?
谢谢!
所以,我相信您 create/update/replace 本地开发人员数据库中的 SQL 触发器,现在您想将 liquibase 脚本包含到产品的发布分发包中。
liquibase 不提供特殊的 xml 语法来创建触发器,因此您只需添加一个新的变更集,将您的 pl/sql 脚本保存在 标记内。该脚本将与您在本地数据库中 运行 相同。
这里的示例代码:
<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 更新时,此代码只是在目标数据库中编译触发器。在大多数情况下,这就足够了。但我强烈建议您向您的 DBA 或团队领导询问您的团队为编写 liquibase 脚本而强制执行的规则。因此,结果可能要复杂得多。
我从不在 XML 文件中创建触发器、过程甚至视图,正是因为这会使事情变得更复杂(我认为)。
我通常将实际的触发器定义移动到 SQL 脚本中(我也可以在开发和测试期间单独 运行),然后从 Liquibase 中包含该 SQL 文件变更日志:
<changeSet id="42" author="arthur" runOnChange="true">
<sqlFile path="triggers/some_trigger.sql"
stripComments="false"
splitStatements="true"
endDelimiter="/"
relativeToChangelogFile="true"/>
</changeSet>
some_trigger.sql
脚本与 XML 更新日志一起存储在 git (svn, ...) 中。 runOnChange="true"
是这里的“神奇成分”。您不必触摸 XML 文件,您只需编辑 SQL 脚本。在部署期间,Liquibase 将检查 (SQL) 文件是否已更改,如果需要 运行 脚本
我是 Liquibase 的新手,我需要一些帮助。
我有一个没有捕获所有数据的现有触发器;我对本地 Oracle 数据库进行了一些更改。现在我需要将这些更改添加到 Liquibase 中,但我不知道该怎么做。
我知道你不能通过直接更新原始 .xml 文件来违反 liquibase 中的合同。
根据我的理解,我需要创建一个新的变更日志 .XML 文件,然后将路径包含在另一个 post_migration 文件中。
我的困惑是,我是否必须删除原始触发器,然后创建一个新文件?
谢谢!
所以,我相信您 create/update/replace 本地开发人员数据库中的 SQL 触发器,现在您想将 liquibase 脚本包含到产品的发布分发包中。
liquibase 不提供特殊的 xml 语法来创建触发器,因此您只需添加一个新的变更集,将您的 pl/sql 脚本保存在
这里的示例代码:
<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 更新时,此代码只是在目标数据库中编译触发器。在大多数情况下,这就足够了。但我强烈建议您向您的 DBA 或团队领导询问您的团队为编写 liquibase 脚本而强制执行的规则。因此,结果可能要复杂得多。
我从不在 XML 文件中创建触发器、过程甚至视图,正是因为这会使事情变得更复杂(我认为)。
我通常将实际的触发器定义移动到 SQL 脚本中(我也可以在开发和测试期间单独 运行),然后从 Liquibase 中包含该 SQL 文件变更日志:
<changeSet id="42" author="arthur" runOnChange="true">
<sqlFile path="triggers/some_trigger.sql"
stripComments="false"
splitStatements="true"
endDelimiter="/"
relativeToChangelogFile="true"/>
</changeSet>
some_trigger.sql
脚本与 XML 更新日志一起存储在 git (svn, ...) 中。 runOnChange="true"
是这里的“神奇成分”。您不必触摸 XML 文件,您只需编辑 SQL 脚本。在部署期间,Liquibase 将检查 (SQL) 文件是否已更改,如果需要 运行 脚本