De beperkingen op multitable-inzetstukken zijn onder meer:
- U kunt in geen enkel deel van een insert-instructie voor meerdere tabellen een reeks specificeren. Een insert met meerdere tabellen wordt beschouwd als een enkele SQL-instructie. Daarom genereert de eerste verwijzing naar NEXTVAL het volgende getal, en alle volgende verwijzingen in de instructie retourneren hetzelfde getal.
Dat is niet helemaal waar - u kunt een reeks gebruiken, deze krijgt alleen altijd dezelfde waarde, dus het kan handig zijn om in één keer bovenliggende en onderliggende records te maken door naar dezelfde reeks te verwijzen.
Als u insert all
wilt blijven gebruiken je zou werk daar omheen door een niet-deterministische functie te gebruiken die de reekswaarde krijgt:
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
Maar dat is een beetje onhandig. U bent waarschijnlijk beter af met het gebruik van individuele insert-statements - het gebruik van een multitable-insert in een enkele tabel levert u toch niet echt veel op - of een trigger om de unieke kolom uit de reeks in te stellen, of een CTE/inline-weergave om de waarden te genereren om in te voegen.