代码之家  ›  专栏  ›  技术社区  ›  Chris Williams

如何在liquibase insert变更集中使用Oracle的“user”和“sysdate”函数?

  •  0
  • Chris Williams  · 技术社区  · 5 年前

    我有一个 changeSet 类似于下面的例子:

    <changeSet author="cwilliams" id="xxx">
        <insert tableName="SOME_TABLE">
            <!-- ... -->
            <column name="CREATED_BY_USER_NAME" value="user"/>
            <column name="CREATED_DT" valueDate="SYSDATE"/>
            <!-- ... -->
        </insert>
    </changeSet>
    

    我想将这两列分别设置为数据库用户名和当前时间。我放 user sysdate 作为例子,但我想 用户 将尝试插入的用户名 用户 这不是我想要的。

    有没有一种方法可以告诉Liquibase以数据库不可知的方式使用底层数据库的函数来处理这些值,如果没有,有没有一种方法可以为此目的使用特定的Oracle函数?

    0 回复  |  直到 5 年前
        1
  •  2
  •   a_horse_with_no_name    5 年前

    您可以使用 valueComputed 属性:

    <changeSet author="cwilliams" id="xxx">
        <insert tableName="SOME_TABLE">
            <!-- ... -->
            <column name="CREATED_BY_USER_NAME" valueComputed="user"/>
            <column name="CREATED_DT" valueComputed="SYSDATE"/>
            <!-- ... -->
        </insert>
    </changeSet>
    

    另一个选项是,在为这些列创建表时定义一个默认值,然后将它们完全保留在插入中。

        2
  •  0
  •   Littlefoot    5 年前

    我不知道,我不使用Liquibase。

    但是,如果您可以访问该模式,则可以创建一个 BEFORE INSERT 数据库触发器,例如

    create or replace trigger trg_bi_sometab
      before insert on some_table
      for each row
    begin
      :new.created_by_user_name := user;
      :new.created_dt := sysdate;
    end trg_bi_sometab;
    /
    

    在每次插入时,它都会用适当的值填充这些列。