Liquibase 如何为 oracle 映射布尔值?

Posted

技术标签:

【中文标题】Liquibase 如何为 oracle 映射布尔值?【英文标题】:How does Liquibase map boolean for oracle? 【发布时间】:2017-05-04 18:16:01 【问题描述】:

已知事实:Oracle 本身不支持布尔值。 因此建议使用 Char(1) 或 Number(1),然后创建一个约束将值限制为 Y/N 或 0/1。

话虽如此。 在为 oracle 数据库创建布尔值时,Liquibase 会创建一个数字 (1)。 有谁知道它是否也创建了数据库约束? 即:“检查(布尔在(0,1))”

http://dba-presents.com/index.php/liquibase/29-liquibase-3-3-x-data-types-mapping-table

【问题讨论】:

自己尝试一下有多难? Is there a boolean type in oracle databases?的可能重复 @Eomm,不是真的。那是特定于 oracle 的。我想知道 liquibase 如何处理 oracle 没有布尔值的事实。 @a_horse_with_no_name,你为什么不找出解决方案然后告诉我它是什么以及花了你多长时间? 【参考方案1】:

创建变更日志:

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

   <changeSet author="arthur" id="42">
      <createTable tableName="bool_test">
        <column name="some_flag" type="boolean"/>
      </createTable>
   </changeSet>

</databaseChangeLog>

运行脚本

liquibase --changeLogFile=bool_test.xml update

显示表定义

c:>sqlplus arthur/password

SQL*Plus: Release 12.1.0.1.0 Production on Tue Dec 20 18:19:21 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select dbms_metadata.get_ddl('TABLE', 'BOOL_TEST') from dual;

DBMS_METADATA.GET_DDL('TABLE','BOOL_TEST')
--------------------------------------------------------------------------------

  CREATE TABLE "ARTHUR"."BOOL_TEST"
   (    "SOME_FLAG" NUMBER(1,0)
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"

【讨论】:

看起来它不会创建约束。谢谢。

以上是关于Liquibase 如何为 oracle 映射布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

liquibase 迁移失败,而 dropColumn 布尔变量

处理将 MySQL 布尔类型从 tinyint 更改为 bit 的 liquibase 升级

如何为列表中的每个项目添加一个布尔值?

如何为记录类型创建布尔类型的字段?

如何为变更日志表指定架构位置

默认情况下使用 Oracle 数据库时,Hibernate 将布尔数据类型映射到啥?