Как я могу использовать функции Oracle `user` и` sysdate` в наборе изменений вставки Liquibase? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть 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 для этой цели?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Вы можете использовать атрибут 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>

Другой вариант - определить значение по умолчанию при создании таблицы для этих столбцов, а затем полностью исключить их из вставки.

0 голосов
/ 17 апреля 2019

Не знаю, я не использую 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;
/

При каждой вставке эти столбцы будут заполняться соответствующими значениями.

...