Omezení pro vícetabulkové vložky zahrnují:
- V žádné části příkazu insert nelze zadat sekvenci. Vložení více tabulek je považováno za jeden příkaz SQL. Proto první odkaz na NEXTVAL vygeneruje další číslo a všechny následující odkazy v příkazu vrátí stejné číslo.
To není tak docela pravda – můžete použít sekvenci, ale ta má vždy stejnou hodnotu, takže může být užitečné vytvořit nadřazené a podřízené záznamy najednou odkazem na stejnou sekvenci.
Pokud chcete nadále používat insert all
můžete obejít to pomocí nedeterministické funkce, která získá sekvenční hodnotu:
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
Ale to je trochu trapné. Pravděpodobně je lepší použít jednotlivé příkazy vložení - použití vícetabulkového vložení do jedné tabulky vám stejně moc nezíská - nebo spouštěč pro nastavení jedinečného sloupce ze sekvence nebo zobrazení CTE/inline pro generování hodnot vložit.