在Oracle中创建布尔属性?

4

我需要在Oracle中创建一张表,其中有一列需要设置为布尔类型。请问如何实现?我已经在网上搜索过,但没有找到明确的答案。

4个回答

12

在SQL中没有BOOLEAN数据类型。但我们可以像这样表示它:

CREATE TABLE tt
  (test NUMBER(1) NOT NULL CHECK  (test in (0,1)))

1
@RaphaëlAlthaus:没有人想要错误,但我没有看到任何错误。你呢?请看我的另一条评论:只需将所有不为0的内容视为true即可。这在计算机领域有着悠久的历史。 - Daniel Hilgarth
我有一个学校项目,我的老师给了我这个模式图,并带有一个布尔属性。请注意,这不是真正的日常使用实现。 - Cristian Holdunu
@DanielHilgarth - 我的投票是支持数据一致性。如果一个列应该只包含1或0,则应该有一个检查约束来强制执行。因为如果历史教会我们任何事情,那就是:开发人员将构建假定该列仅包含1或0的代码,当它包含3时,该代码将无法正常工作。 - APC
@APC:关于开发者的假设,你说得很对。我的性能问题实际上是一个诚实的问题,因为我不知道性能影响有多严重。我肯定不是一个微观优化者,我只是想知道在高负载情况下是否存在什么问题。我猜我本可以表达得更好一些 :) - Daniel Hilgarth
@DanielHilgarth - 你知道 Knuth 关于“那个”的说法。 - APC
显示剩余8条评论

2

请参考Oracle的CREATE TYPE

在某些数据库中,可以定义自己的布尔数据类型(据说这在Oracle中不起作用,但它说明了这个想法):

CREATE DOMAIN BOOLEAN
AS NUMBER(1)
NOT NULL
CHECK (value IN (0,1))

这可以像其他类型一样用于表格列。


我收到了这个错误:ORA-00901: 无效的CREATE命令编辑:据我在互联网上看到的,CREATE DOMAIN不是ORACLE SQL的一部分。 - Cristian Holdunu
1
看看Oracle的CREATE TYPE。 - Mike Sherrill 'Cat Recall'

1

没有布尔数据类型。你需要使用NUMBER(1)


嗯,看起来有点短,我可以在您的字段中放入3... - Raphaël Althaus
1
@RaphaëlAlthaus:我知道。如果你有更好的解决方案,我会很高兴听到它。我从未找到过更好的方法。但这真的不是问题。只需像C++一样处理该字段:0表示false,非0表示true。 - Daniel Hilgarth

-4

阅读Oracle文档中的虚拟列,并像其他人建议的那样使用数字:0-假,1-真。在Oracle的CREATE表中没有BOOLEAN数据类型。


虚拟列与此有什么关系?它们是一种很酷的机制,用于保存(或看起来像是保存)非规范化数据。 - APC
关于虚拟列,我知道它们的作用。但是我看不出它们与这个问题有什么关联。如果你认为它们很重要,你应该编辑你的“答案”并包含一些示例代码。那至少会与现有答案不同。谁知道呢,我甚至可能会给你点赞... - APC
@APC- 这个问题是关于在Oracle表中创建布尔属性。我提到其他人已经回答了关于布尔的问题,并建议使用虚拟列进行计算,因为这是可以在CREATE TABLE中使用的功能,正如问题所述。希望你现在明白了。你和其他人可以不断地对我进行负评 - 我得不到任何分数和认可。我正在学习、帮助和感激,不像许多其他人... - Art
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/24048/discussion-between-apc-and-art - APC

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