【问题标题】:How to update a boolean field in Oracle table如何更新 Oracle 表中的布尔字段
【发布时间】:2013-10-26 10:35:24
【问题描述】:

我是 Oracle 新手。我想为其中一条记录更新表中的布尔字段。以下哪一项是正确的?

update MyTable set myBooleanColumn = 1 where UserId= 'xx12345';

or 


update MyTable set myBooleanColumn = '1' where UserId= 'xx12345';

非常感谢任何帮助!谢谢 !

【问题讨论】:

  • oracle 表没有布尔数据类型。您必须执行两个选项之一 - 创建一个 varchar2(1) 字段,可能设置为 Y/N,或一个数字字段,并设置为 1/0

标签: sql oracle oracle11g oracle10g sql-update


【解决方案1】:

这取决于字段的定义方式。

如果它定义为 CHAR(1) 字段,那么您可以在其中存储 'Y'/'N' 或 'T'/'F'。要更新该字段,您可以使用引号,因为它是字符串文字。

UPDATE TestTable set myCharBooleanColumn = 'Y';

如果字段定义为 NUMERIC,则约定为 0=false,1 或 -1 为 true(我都见过)。

UPDATE TestTable set myNumericBooleanColumn = 1;

很多人会提倡 CHAR(1) 方法,但在现实世界中 - 你会看到两者。这取决于布尔值是如何实现的。

您可以在 Oracle 的数据类型文档中了解更多信息 http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm

【讨论】:

    【解决方案2】:

    Oracle 中没有布尔字段之类的东西,因此您的字段要么是数字字段,要么是字符字段。如果是数字字段,则不需要引用数字;如果它是一个字符字段,你应该引用字符串。

    您可以通过查询USER_TAB_COLUMNS了解该列的类型:

    select *
      from user_tab_columns
     where table_name = 'MYTABLE'
       and column_name = 'MYBOOLEANCOLUMN'
    

    或通过describing桌子。

    【讨论】:

      【解决方案3】:

      Oracle 中没有布尔字段。

      你能做的最好的就是创建这样的表:-

      create table ABC(bool char(1) check (bool in ('N','Y'));
      

      然后简单的更新就好了

      UPDATE ABC set bool = 'Y';
      

      为什么要使用 CHAR?

      不支持 BOOLEAN、BIT 或 TINYINT 数据类型,因此 char 是最好的,因为它需要 1 个字节

      【讨论】:

        猜你喜欢
        • 2010-09-07
        • 1970-01-01
        • 2018-07-05
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多