Batasan pada sisipan multitable meliputi:
- Anda tidak dapat menentukan urutan di bagian mana pun dari pernyataan penyisipan multitabel. Sisipan multitabel dianggap sebagai pernyataan SQL tunggal. Oleh karena itu, referensi pertama ke NEXTVAL menghasilkan nomor berikutnya, dan semua referensi berikutnya dalam pernyataan mengembalikan nomor yang sama.
Itu tidak sepenuhnya benar - Anda dapat menggunakan urutan, hanya saja selalu mendapat nilai yang sama, sehingga dapat berguna untuk membuat catatan induk dan anak sekaligus dengan mengacu pada urutan yang sama.
Jika Anda ingin terus menggunakan insert all
kamu bisa mengatasinya dengan menggunakan fungsi non-deterministik yang mendapatkan nilai urutan:
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
Tapi itu agak canggung. Anda mungkin lebih baik menggunakan pernyataan penyisipan individual - menggunakan penyisipan multitabel ke dalam satu tabel tidak benar-benar memberi Anda banyak keuntungan - atau pemicu untuk mengatur kolom unik dari urutan, atau tampilan CTE/inline untuk menghasilkan nilai untuk menyisipkan.