В Oracle 12 появилась приятная функция (которая должна была быть там уже давно) - столбцы идентификации. Итак, здесь script:
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;
Первые две вставки запускаются без проблем, предоставляя значения для 'a' из 1 и 2. Но третий не работает с ORA-01400: cannot insert NULL into ("DEV"."TEST"."A")
. Почему это случилось? Жук? Ничего подобного не упоминается в части документации о ограничениях столбца идентификатора. Или я просто делаю что-то не так?