我是Oracle新手。我想在我的表中为一个记录更新一个布尔字段。这些陈述中哪一个是正确的?
update MyTable set myBooleanColumn = 1 where UserId= 'xx12345';
or
update MyTable set myBooleanColumn = '1' where UserId= 'xx12345';
任何帮助都非常感谢!!谢谢 !
答案 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个字节