Ограниченията за многотаблици вмъквания включват:
- Не можете да посочите последователност в която и да е част от израза за вмъкване с множество таблици. Вмъкването с множество таблици се счита за единичен SQL израз. Следователно първата препратка към NEXTVAL генерира следващото число, а всички последващи препратки в оператора връщат едно и също число.
Това не е съвсем вярно – можете да използвате последователност, тя просто винаги получава една и съща стойност, така че може да бъде полезно да създавате родителски и дъщерни записи наведнъж, като се позовавате на една и съща последователност.
Ако искате да продължите да използвате insert all
ти можеш заобиколете това, като използвате недетерминирана функция, която получава стойността на последователността:
CREATE FUNCTION get_seq RETURN NUMBER IS
BEGIN
RETURN postal_code_seq.nextval;
END;
/
INSERT ALL
INTO POSTAL_CODE( postal_code,description)
VALUES(get_seq,'Coimbatore')
INTO POSTAL_CODE (postal_code,description)
VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;
2 rows inserted.
SELECT * FROM postal_code;
POSTAL_CODE DESCRIPTION
--------------------------------------- --------------------
1 Coimbatore
2 Mumbai
Но това е малко неудобно. Вероятно е по-добре да използвате отделни оператори за вмъкване - използването на многотаблици в една таблица така или иначе не ви печели много - или тригер за задаване на уникалната колона от последователността, или CTE/inline изглед за генериране на стойностите за вмъкване.