如何在 Liquibase 插入更改集中使用 Oracle `user` 和 `sysdate` 函数?
How can I use the Oracle `user` and `sysdate` functions in a Liquibase insert change set?
我有一个 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
作为示例,但我假设 user
会尝试插入用户名 user
而这不是我想要的。
有没有办法告诉 Liquibase 以与数据库无关的方式为这些值使用底层数据库的函数,如果没有,是否有办法为此目的使用特定的 Oracle 函数?
我不知道,我不使用 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;
/
在每次插入时,它会用适当的值填充这些列。
您可以使用 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>
另一种选择是,在为这些列创建 table 时定义默认值,然后将它们完全留在插入中。
我有一个 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
作为示例,但我假设 user
会尝试插入用户名 user
而这不是我想要的。
有没有办法告诉 Liquibase 以与数据库无关的方式为这些值使用底层数据库的函数,如果没有,是否有办法为此目的使用特定的 Oracle 函数?
我不知道,我不使用 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;
/
在每次插入时,它会用适当的值填充这些列。
您可以使用 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>
另一种选择是,在为这些列创建 table 时定义默认值,然后将它们完全留在插入中。