首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >液化石油气储存程序的管理

液化石油气储存程序的管理
EN

Stack Overflow用户
提问于 2016-10-12 02:49:56
回答 2查看 14.8K关注 0票数 18

我阅读了清算基地的最佳做法,特别是管理存储过程的最佳做法:

管理存储过程:尝试为存储过程维护单独的变更量,并使用runOnChange=“true”。此标志强制LiquiBase检查变更集是否已修改。如果是这样,液化库将再次执行更改。

他们所说的“为存储过程维护单独的变更量”是什么意思?

我通常有一个链接到版本的changelogs目录。每个changelog文件都包含在master.xml中。

当遵循他们的建议时,目录结构会是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 06:48:46

我们所做的是这样的:

代码语言:javascript
运行
复制
\---liquibase
    |   changelog.xml
    |   procedures.xml
    |   
    +---procedures
            procedure_one.sql
            procedure_two.sql

changelog.xml只是包含了procedures.xml。在procedures.xml内部,我们有这样的东西:

代码语言:javascript
运行
复制
<changeSet author="arthur" id="1" runOnChange="true" runInTransaction="true">
    <sqlFile path="procedures/procedure_one.sql"
             encoding="UTF-8"
             relativeToChangelogFile="true"
             endDelimiter=";"
             splitStatements="true"/>

</changeSet>

<changeSet author="arthur" id="2" runOnChange="true" runInTransaction="true">
    <sqlFile path="procedures/procedure_two.sql"
             encoding="UTF-8"
             relativeToChangelogFile="true"
             endDelimiter=";"
             splitStatements="true"/>

</changeSet>

当然,只有当DBMS支持事务性DDL时,runInTransaction="true"才有意义。

过程的每个SQL脚本都是自包含的,并使用create or replace重新创建过程。对于不支持create or replace的DBMS,我们通常在其中执行(条件) drop procedure; create procedure ...

通过显式地包含文件(而不是使用includeAll),我们可以控制创建过程和函数的顺序(如果使用另一个过程和函数非常重要)。

如果添加新过程,则向changeSet添加一个新SQL脚本和一个新procedures.xml

票数 24
EN

Stack Overflow用户

发布于 2020-06-04 09:40:59

@a_horse_with_no_name的答案只有正确的,随着您也检查您的版本,我错过了。我在补充他漏掉的东西。

下面是可以直接使用的示例过程文件(procedure_one.sql)。

代码语言:javascript
运行
复制
CREATE PROCEDURE `ivi_alter_column`() 
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
   ALTER TABLE `tableName` ADD COLUMN  `columnName` BIGINT(20) NULL;
END;

procedures.xml看起来会像这样

代码语言:javascript
运行
复制
<changeSet id="alter_column_version_1" author="auther" dbms="mysql" runInTransaction="true">

 <createProcedure dbms="mysql" encoding="UTF-8"
            path="../changelog/procedures/procedure_one.sql"
            procedureName="sample_alter_procedure" relativeToChangelogFile="true">
    </createProcedure>

   // Make sure You are calling 
    <sql>call sample_alter_procedure() </sql>

   // then dropping procedure also
    <dropProcedure procedureName="sample_alter_procedure" />

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

https://stackoverflow.com/questions/39989749

复制
相关文章

相似问题

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