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

时间:2013-10-17 19:08:51

标签: sql oracle oracle11g oracle10g sql-update

我是Oracle新手。我想在我的表中为一个记录更新一个布尔字段。这些陈述中哪一个是正确的?

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

or 


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

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

3 个答案:

答案 0 :(得分:8)

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

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

UPDATE TestTable set myCharBooleanColumn = 'Y';

如果字段定义为NUMERIC,则约定为0 = false且1或-1为真(我已经看到了两者)。

UPDATE TestTable set myNumericBooleanColumn = 1;

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

您可以在Oracle的数据类型文档中阅读更多内容 http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm

答案 1 :(得分:4)

Oracle中没有布尔字段,因此您的字段是数字字段或字符字段。如果是数字字段,则无需引用该数字;如果它是一个字符字段,你应该引用字符串。

您可以通过查询USER_TAB_COLUMNS来找到列的类型:

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

describing表格。

答案 2 :(得分:1)

Oracle中没有任何布尔字段。

最好的办法是创建如下表: -

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

然后简单更新,如

UPDATE ABC set bool = 'Y';

为什么选择CHAR?

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