Oracle 12引入了很好的功能(應該早就有btw了!) - 標識列。所以這裏有一個腳本:Oracle標識列和插入選擇
CREATE TABLE test (
a INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
b VARCHAR2(10)
);
-- Ok
INSERT INTO test (b) VALUES ('x');
-- Ok
INSERT INTO test (b)
SELECT 'y' FROM dual;
-- Fails
INSERT INTO test (b)
SELECT 'z' FROM dual UNION ALL SELECT 'zz' FROM DUAL;
一兩個插件運行,而不爲1和2的「A」提供價值問題,但是第三個失敗,ORA-01400: cannot insert NULL into ("DEV"."TEST"."A")
。爲什麼發生這種情況?一個錯誤?在關於identity column restrictions的文檔部分中未提及此類內容。或者我只是做錯了什麼?
+1我只是測試它,它工作得很好。 –
感謝您的詳細解釋!事實上,當明確使用sequence時,'INSERT INTO test(a)SELECT seq.nextval FROM dual UNION ALL SELECT seq.nextval FROM dual;'帶來更多解釋性'「ORA-02287:此處不允許的序列號」。看起來,身份列必須以某種方式繞過此檢查,但序列無論如何都不起作用,僅提供NULL作爲值 - 因此是不尋常的錯誤消息。 –
我沒有足夠的代表編輯,但最後一個項目符號應該是3個單獨的項目符號。很難現在閱讀。 –