Вярвам, че заявката по-долу работи, не съм тествал!
INSERT INTO Test (b)
SELECT * FROM
(
SELECT 'z' FROM dual
UNION ALL
SELECT 'zz' FROM dual
);
Не съм сигурен, дали ви помага по някакъв начин.
За, GENERATED ALWAYS AS IDENTITY
Oracle вътрешно използва само последователност. И опциите на общата последователност се отнасят и за това.
NEXTVAL се използва за извличане на следващата налична последователност и очевидно е псевдоколона.
По-долу е от Oracle
Не можете да използвате CURRVAL
и NEXTVAL
в следните конструкции:
- Подзаявка в
DELETE
,SELECT
, илиUPDATE
изявление - Запитване на изглед или на материализиран изглед
- Израз SELECT с оператор DISTINCT
- Израз SELECT с клауза GROUP BY или клауза ORDER BY
- A
SELECT
израз, който е комбиниран с другSELECT
изявление със UNION,INTERSECT
, илиMINUS
оператор за настройка - Клаузата WHERE на израза SELECT
- DEFAULT стойност на колона в израз CREATE TABLE или ALTER TABLE
- Условието на ограничение CHECK
subquery
и SET
Правилото за операциите по-горе трябва да отговори на вашия въпрос.
И за причината за NULL, когато pseudocolumn
(напр. NEXTVAL) се използва с операция SET или други правила, споменати по-горе, изходът е NULL, тъй като Oracle не може да ги извлече на практика с комбиниране на множество избори.
Нека видим по-долу заявката,
select rownum from dual
union all
select rownum from dual
резултатът е
ROWNUM
1
1