Begrænsningerne for multitable-indsatser omfatter:
- Du kan ikke angive en sekvens i nogen del af en multitable insert-sætning. En multitable-indsættelse betragtes som en enkelt SQL-sætning. Derfor genererer den første reference til NEXTVAL det næste tal, og alle efterfølgende referencer i sætningen returnerer det samme tal.
Det er ikke helt rigtigt - du kan bruge en sekvens, den får bare altid den samme værdi, så det kan være nyttigt at oprette overordnede og underordnede poster på én gang ved at henvise til den samme sekvens.
Hvis du vil fortsætte med at bruge insert all
du kunne omgå det ved at bruge en ikke-deterministisk funktion, der får sekvensværdien:
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
Men det er lidt akavet. Du er sandsynligvis bedre stillet ved at bruge individuelle insert-udsagn - at bruge en multitable-indsættelse i en enkelt tabel giver dig ikke meget alligevel - eller en trigger til at indstille den unikke kolonne fra sekvensen, eller en CTE/inline-visning til at generere værdierne at indsætte.