Oracle

Oracle IDENTITY 列可以為空嗎?

  • June 28, 2017

我想創建一個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);

但是,我看到該欄位不是 nullabe:

SELECT ID FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'A_TEST_TABLE'

NULLABLE = N

這是一個問題,因為我的應用程序試圖“幫使用者一個忙”。如果欄位不可為空,則應用程序會自動插入零作為虛擬值。這會覆蓋自動生成的 ID(這當然不是我想要的)。我猜它這樣做是為了避免在送出空值時從數據庫中獲取錯誤消息。

為避免我的應用程序出現此問題,是否可以將欄位設為 nullabe

當我閱讀文件時,它說:

如果您指定 ON NULL,那麼當後續 INSERT 語句嘗試分配一個計算結果為 NULL 的值時,Oracle 數據庫將使用序列生成器為該列分配一個值。

這是否意味著一個IDENTITY欄位可以為空?如果是這樣,怎麼做?


我承認我不知道自己在做什麼。我什至不認為我最終會想要一個可以為空的 ID 欄位。我只是想弄明白這一切,但我失敗了。

您可以將列設為 NULLable,但不能將其設為 IDENTITY 列;相反,創建一個序列和一個INSERT從序列中設置 ID 值的觸發器。在 12.1 版之前,IDENTITY 列不可用,使用序列是解決方法。

引用自:https://dba.stackexchange.com/questions/177527