如果未明确指定liquibase,该如何选择模式?

时间:2019-02-20 09:18:27

标签: sql oracle liquibase

我想为自己的变更集使用columnExists前提, 但是无法指定确切的架构,因为我们将在多个环境中运行该架构,架构名称可能会有所不同。

问题是,方案liquibase选择的将与

等效吗?
select sys_context('USERENV', 'CURRENT_SCHEMA') from dual;

如果要紧,我们在这里谈论Oracle。

1 个答案:

答案 0 :(得分:1)

在Oracle中,用户与模式之间存在一对一的关系。

用于登录Oracle的用户帐户是默认模式,除非您已在会话中进行了有效更改。

我要回答“只是省略模式”,直到我看到Liquibase要求schemaName的先决条件是columnExists(我认为这很愚蠢)

因此,您不能真正使用columnExists,而需要使用<sqlCheck>

<preConditions onFail="HALT">
  <sqlCheck expectedResult="1">
    select count(*) 
    from user_tab_columns 
    where column_name = 'SOME_COLUMN' 
      and table_name = 'SOME_TABLE'
  </sqlCheck>
</preConditions>

user_tab_columns包含当前用户拥有(即已创建)的表的列。