Oracle IDENTITY 列可以为空吗?

Wil*_*son 3 null oracle database-design identity unique-constraint

我想创建一个ID默认情况下自动生成唯一 ID 号的列。

用户不会通过INSERT语句插入行,而是使用开箱即用的应用程序(使用属性编辑环境)创建行。

我听说可以通过创建Oracle IDENTITY 列来实现自动生成的 ID (提示:要在链接页面中查找相关部分,请搜索​​此文本:)Use this clause to specify an identity column.


因此,我已成功创建了一个带有IDENTITY列的表:

CREATE TABLE A_TEST_TABLE (ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY);
Run Code Online (Sandbox Code Playgroud)

但是,我看到该字段不是 nullabe:

SELECT ID FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'A_TEST_TABLE'

NULLABLE = N
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为我的应用程序试图“帮用户一个忙”。如果字段不可为空,应用程序会自动插入一个零作为虚拟值。这会覆盖自动生成的 ID(这当然不是我想要的)。我猜测这样做是为了避免在提交空值时从数据库收到错误消息。

为了避免我的应用程序出现此问题,是否可以将字段设为 nullabe

当我阅读文档时,它说:

如果您指定 ON NULL,那么当后续的 INSERT 语句尝试分配计算结果为 NULL 的值时,Oracle 数据库使用序列生成器为该列分配一个值。

这是否意味着IDENTITY字段可以为空?如果是这样,如何?


我承认我不知道自己在做什么。我什至不认为我最终会想要一个可以为空的 ID 字段。我只是想弄清楚这一切,但我失败了。

RDF*_*ozz 5

您可以将该列设为 NULLable,但不能将其设为 IDENTITY 列;相反,创建一个序列和一个INSERT触发器,用于设置序列中的 ID 值。在 12.1 版之前,IDENTITY 列不可用,使用序列是解决方法。