2011-12-03 14 views
8

के लिए सभी INTO और Sequence.nextval INSERT I IN INERER का उपयोग करके 40 पंक्तियों को सम्मिलित करने का प्रयास कर रहा हूं और मैं सरोगेट कुंजी को सम्मिलित करने के बारे में निश्चित नहीं हूं। यहां मेरे पासएक सरोगेट कुंजी

BEGIN 
    INSERT ALL 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 
END 

अब यदि मैं एक और इंटो वैल्यू जोड़ता हूं तो मुझे एक अद्वितीय बाधा उल्लंघन मिलता है।

BEGIN 
    INSERT ALL 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 

    INTO question(question_id) 
    VALUES (question_seq.nextval) 
END 

मैं दृश्यों मानों में से प्रत्येक के लिए nextval मान अपडेट कैसे इतना है कि मैं अद्वितीय बाधा उल्लंघन से बच सकते हैं कर सकते हैं? मैंने माना कि अगली बार स्वचालित रूप से अपडेट हो जाएगी।

अद्यतन:

पहले मैं एक समारोह है कि एक मान देता है बनाया तो मुझे लगता है कि समारोह कहा जाता है: अगर यह सबसे अच्छा तरीका यह संभाल करने के लिए है, लेकिन यहाँ है समाधान मैं के साथ आया था मैं नहीं जानता अगर यह सबसे अच्छा तरीका यह संभाल करने के लिए है, लेकिन यहाँ है समाधान मैं के साथ आया था मानों खंड के आईडी क्षेत्र में

create or replace 
FUNCTION GET_QUESTION_ID RETURN NUMBER AS 
num NUMBER; 
BEGIN 
    SELECT UHCL_QUESTIONS_SEQ.nextval 
    INTO num 
    FROM dual; 
    return num; 
END GET_QUESTION_ID; 

INSERT ALL 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
+1

क्या आपको अपने 'सम्मिलित करें' के साथ 'से' खंड की आवश्यकता नहीं है? – Raihan

+0

@ राइहान सभी डालने के लिए नहीं। – Robert

+0

@ राइहान इसके बारे में खेद है ... आप सही हैं, मैंने अभी चयन में पेस्ट नहीं किया है, लेकिन मेरे पास एक है। – Robert

उत्तर

0

आप कुछ इस तरह उपयोग कर सकते हैं: यद्यपि यह एक बहुत ही सुविधाजनक प्रारूप नहीं है, देखते हैं, खासकर अगर

insert into question(question_id) 
select question_seq.nextval from 
(
    select level from dual connect by level <= 40 
); 

अन्य कॉलम जिन्हें आप जोड़ना चाहते हैं। आपको शायद UNION ALL क्वेरी बनाने की आवश्यकता होगी, और LEVEL या ROWNUM द्वारा इसमें शामिल हों।

मेरी पहली सोचा इस तरह कुछ करने के लिए किया गया था:

insert into question(question_id) 
select question_seq.nextval value from dual 
union all 
select question_seq.nextval from dual; 

लेकिन यह ORA-02287: sequence number not allowed here उत्पन्न करता है, restrictions on sequence values की वजह से।


वैसे, आप यकीन है कि एक सबक्वेरी के बिना अपने INSERT ALL काम करता है? मैं त्रुटि ORA-00928: missing SELECT keyword, और 11.2 manual से चित्र प्राप्त मतलब वहाँ एक सबक्वेरी होना चाहिए:

enter image description here

0

मैं नहीं जानता:

पहले मैं एक समारोह के लिए बनाया है कि एक मूल्य के देता तो मैं मान खंड के आईडी क्षेत्र में है कि समारोह में कहा जाता

create or replace 
FUNCTION GET_QUESTION_ID RETURN NUMBER AS 
num NUMBER; 
BEGIN 
    SELECT UHCL_QUESTIONS_SEQ.nextval 
    INTO num 
    FROM dual; 
    return num; 
END GET_QUESTION_ID; 

INSERT ALL 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
INTO question(question_id) 
VALUES (GET_QUESTION_ID()) 
1

एक एसक्यूएल सर्वर पृष्ठभूमि से होने के नाते, मैं हमेशा मेज पर एक ट्रिगर बना लिया है मूल रूप से पहचान का अनुकरण करने के कार्यक्षमता। एक बार ट्रिगर चालू हो जाने पर, एसके स्वचालित रूप से अनुक्रम से उत्पन्न होता है जैसे पहचान और आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।

संबंधित मुद्दे