在Oracle中创建布尔属性?

19 浏览
0 Comments

在Oracle中创建布尔属性?

我需要在Oracle中创建一个表,其中一列我需要将其设为布尔类型。请问你能告诉我如何实现吗?我在互联网上搜索了,但是没有找到清晰的答案。

0
0 Comments

在Oracle中没有boolean数据类型。你必须使用NUMBER(1)。

嗯,看起来有点短,我可以在你的字段中放入3……

ëlAlthaus: 我知道。如果你有更好的解决方案,我会很高兴听到。我从来没有找到过一个。但这真的不是个问题。只需要像C++一样处理该字段:0表示假,非0表示真。

0
0 Comments

在Oracle中创建布尔属性的原因是,Oracle不支持使用CREATE DOMAIN语句来定义布尔数据类型。因此,如果尝试使用类似于上述示例中的CREATE DOMAIN语句来创建布尔属性,将会得到ORA-00901错误,提示无效的CREATE命令。

解决这个问题的方法是使用Oracle提供的CREATE TYPE语句来创建自定义类型。可以参考Oracle的文档CREATE TYPE来了解如何创建类型。

以下是一个可能的解决方法示例:

CREATE TYPE BOOLEAN AS OBJECT (
  value NUMBER(1),
  MEMBER FUNCTION is_true RETURN BOOLEAN
);
/
CREATE TYPE BODY BOOLEAN AS
  MEMBER FUNCTION is_true RETURN BOOLEAN IS
  BEGIN
    RETURN value = 1;
  END;
END;
/

通过使用上述示例中的CREATE TYPE语句,可以创建一个自定义的BOOLEAN类型,并定义了一个is_true函数来判断布尔值。这样就可以在表的列中使用这个自定义类型来表示布尔属性了。

在Oracle中,由于不支持CREATE DOMAIN语句来创建布尔属性,因此需要使用CREATE TYPE语句来创建自定义类型。通过定义自定义类型和相应的函数,可以实现布尔属性的功能。

0
0 Comments

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

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

哦,好的。那么这个检查的开销怎么样?

但是我可以通过某种方式创建一个名为boolean的类型,然后在我的表中添加boolean字段吗?

是的,但是我们是想要更好的性能和错误处理,还是稍微降低性能和错误处理?

ëlAlthaus: 没有人想要错误,但我没有看到任何错误。你呢?看看我的另一个评论:简单地将所有不为0的值视为true。这在计算机历史上有着悠久的历史。

这不是真正的日常使用实现。我有一个学校项目,我的老师给了我这个模式,其中包含一个布尔属性。

我理解这个观点...我仍然认为让事情变得更简单(myValue = 1与myValue <> 0一样一致)对于布尔表示是一件好事。而且你不能强迫每个人都记住c++的逻辑 😉

- 我的投票是数据一致性。如果一列只能保存1或0,就加上一个检查约束来强制执行。因为如果历史教会我们任何东西,那就是:开发人员将构建基于该列仅保存1或0的代码,当它包含3时,代码将出错。

此外,如果我们要比较性能开销,CHAR(1)占用的空间比NUMBER(1)少。在记录的整个生命周期中,我敢打赌额外的字节比强制执行检查约束的开销更多。

: 关于开发人员的假设,你提到了一个很好的观点。我关于性能的问题实际上是一个真诚的问题,因为我不知道性能影响有多严重。我肯定不是一个微优化者,我只是想知道在高负载场景中是否有什么需要注意的地方。我可能可以更好地表达这个问题 🙂

- 嗯,你知道Knuth关于这个说的。

: 对不起,我不明白你的意思。

"过早优化是万恶之源。" en.wikiquote.org/wiki/Donald_Knuth

: 我以为我已经明确表示我不是这样的人。但这并不意味着了解你使用的技术的性能影响不是一个好主意。

0