2008-10-23 18 views
41

मुझे पता है कि अगर मैं this answer में सिंटैक्स का उपयोग करता हूं, तो मैं एक कथन का उपयोग करके एकाधिक पंक्तियां डाल सकता हूं।अनुक्रम मूल्य के साथ ओरेकल में एकाधिक पंक्तियों को मैं कैसे सम्मिलित कर सकता हूं?

हालांकि, मान मैं डालने कर रहा हूँ में से एक है, यानी

insert into TABLE_NAME 
(COL1,COL2) 
select MY_SEQ.nextval,'some value' from dual 
union all 
select MY_SEQ.nextval,'another value' from dual 
; 

एक दृश्य से लिया जाता है, तो मुझे लगता है मैं एक ORA-02,287 त्रुटि मिलती है इसे चलाने के लिए प्रयास करते हैं,। क्या इसके आसपास कोई रास्ता है, या क्या मुझे बस बहुत सारे INSERT कथन का उपयोग करना चाहिए?

संपादित करें:
यदि मुझे अनुक्रम के अलावा अन्य सभी कॉलम के लिए कॉलम नाम निर्दिष्ट करना है, तो मैं मूल ब्रेवटी खो देता हूं, इसलिए यह इसके लायक नहीं है। उस स्थिति में मैं केवल एकाधिक INSERT कथन का उपयोग करूंगा।

+1

http: // stackoverflow भी देखें।कॉम/प्रश्न/8292199/क्वेरी-कई-अगली-से-अनुक्रम-इन-वन-सेटमेंट यदि आप यहां आए हैं और केवल उसी क्वेरी में कई अलग-अलग अद्वितीय अनुक्रमों का चयन करना चाहते हैं ... – rogerdpack

उत्तर

39

यह काम करता है:

insert into TABLE_NAME (COL1,COL2) 
select my_seq.nextval, a 
from 
(SELECT 'SOME VALUE' as a FROM DUAL 
UNION ALL 
SELECT 'ANOTHER VALUE' FROM DUAL) 
+0

निम्न त्रुटि प्राप्त करना: 'java.sql.BatchUpdateException: ORA-02287: अनुक्रम संख्या की अनुमति नहीं है ' – beckah

+0

@beckah आपके SQL और Oracle संस्करण को दिखाते हुए एक नया प्रश्न पूछें? –

+0

इसे समझ लिया! सम्मिलित अनुक्रम मान को एक क्वेरी के रूप में नहीं, बल्कि एक 'insertencer.nextval' के रूप में एक सम्मिलित मान के रूप में महान काम किया :) @WW – beckah

1

सही अनुक्रम संख्या में जोड़ने के लिए सम्मिलित करने पर एक ट्रिगर बनाने की संभावना है।

2

Oracle Wiki से, त्रुटि 02,287 है

An ORA-02287 occurs when you use a sequence where it is not allowed.

स्थानों पर जहां नहीं किया जा सकता दृश्यों के

, आप की कोशिश कर रहा हो रहे हैं:

In a sub-query

तो ऐसा लगता है आप नहीं कर सकते एक ही बयान में गुणक करें।

समाधान वे प्रदान करते हैं:

If you want the sequence value to be inserted into the column for every row created, then create a before insert trigger and fetch the sequence value in the trigger and assign it to the column

+0

मैंने पहले यह किया है। यह दर्द है, लेकिन ऐसा लगता है कि इसके आसपास एकमात्र रास्ता है। – madlep

+0

-1 कृपया डब्ल्यूडब्ल्यू द्वारा जवाब की जांच करें, यह मेरे लिए काम किया! –

4
insert into TABLE_NAME 
(COL1,COL2) 
WITH 
data AS 
(
    select 'some value' x from dual 
    union all 
    select 'another value' x from dual 
) 
SELECT my_seq.NEXTVAL, x 
FROM data 
; 

मुझे लगता है कि यह है कि आप क्या चाहते हैं, लेकिन मैं ओरेकल यह परीक्षण करने के लिए करने के लिए पहुँच नहीं है अभी।

+0

ओरेकल के किस संस्करण की आवश्यकता है? –

+0

के साथ संदर्भ प्रदान करने के लिए 9i – EvilTeach

24

यह क्योंकि अनुक्रम निम्न परिदृश्यों में काम नहीं करता है काम नहीं करता:

  • एक में कहां खंड
  • एक समूह द्वारा में या एक अलग खंड
  • के साथ साथ में खंड
  • द्वारा आदेश एक संघ या काटना या माइनस एक उप क्वेरी में

स्रोत: http://www.orafaq.com/wiki/ORA-02287

हालांकि यह करता है काम:

insert into table_name 
      (col1, col2) 
    select my_seq.nextval, inner_view.* 
    from (select 'some value' someval 
      from dual 
      union all 
      select 'another value' someval 
      from dual) inner_view; 

इसे आजमाएं:

create table table_name(col1 varchar2(100), col2 varchar2(100)); 

create sequence vcert.my_seq 
start with 1 
increment by 1 
minvalue 0; 

select * from table_name; 
+0

उपरोक्त में उपलब्ध है। – cbeuker

0

इस काम करता है और सभी संघ उपयोग करने के लिए कोई जरूरत नहीं है।

Insert into BARCODECHANGEHISTORY (IDENTIFIER,MESSAGETYPE,FORMERBARCODE,NEWBARCODE,REPLACEMENTDATETIME,OPERATORID,REASON) 
select SEQ_BARCODECHANGEHISTORY.nextval, MESSAGETYPE, FORMERBARCODE, NEWBARCODE, REPLACEMENTDATETIME, OPERATORID, REASON 
from (
    SELECT 
    'BAR' MESSAGETYPE, 
    '1234567890' FORMERBARCODE, 
    '1234567899' NEWBARCODE, 
    to_timestamp('20/07/12','DD/MM/RR HH24:MI:SSXFF') REPLACEMENTDATETIME, 
    'PIMATD' OPERATORID, 
    'CORRECTION' REASON 
    FROM dual 
); 
+2

वास्तव में? यूनियन का उपयोग किये बिना एक ही कथन में आप एक से अधिक पंक्ति कैसे सम्मिलित करेंगे? – Ovesh

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

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