如何在Oracle表中更新布尔字段

3

我是一名初学者Oracle用户。我想更新表中一个记录的布尔字段。下面哪个语句是正确的?

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

or 


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

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

2
Oracle表中不存在布尔数据类型。您必须执行以下两个选项之一:创建一个varchar2(1)字段并将其设置为Y / N,或者创建一个数字字段并将其设置为1/0。 - OldProgrammer
3个回答

8

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

如果它被定义为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

4

Oracle中不存在布尔字段,因此您的字段要么是数字字段,要么是字符字段。如果它是数字字段,则不需要引用数字;如果它是字符字段,则应引用字符串。

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

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

或者通过描述表格的方式来实现。


1

在Oracle中没有布尔字段。

最好的做法是创建这样的表:

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

那么简单的更新就像这样。
UPDATE ABC set bool = 'Y';

为什么使用CHAR数据类型?

由于没有对BOOLEAN、BIT或TINYINT数据类型提供支持,因此char数据类型是最佳选择,因为它只占用1个字节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接