मल्टीटेबल इंसर्ट पर प्रतिबंधों में शामिल हैं:
- आप मल्टीटेबल इंसर्ट स्टेटमेंट के किसी भी हिस्से में अनुक्रम निर्दिष्ट नहीं कर सकते। एक मल्टीटेबल इंसर्ट को सिंगल 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
लेकिन यह थोड़ा अटपटा है। आप व्यक्तिगत सम्मिलन कथनों का उपयोग करने से शायद बेहतर हैं - एक तालिका में एक बहुआयामी डालने का उपयोग वास्तव में आपको बहुत कुछ प्राप्त नहीं कर रहा है - या अनुक्रम से अद्वितीय कॉलम सेट करने के लिए एक ट्रिगर, या सीटीई/इनलाइन व्यू मान उत्पन्न करने के लिए डालने के लिए।