2010-11-11 13 views
11

अप्रत्याशित व्यवहार के साथ शुरू:ओरेकल अनुक्रम 2 1 के बजाय

मैं 11g के साथ Oracle दृश्यों के अजीब व्यवहार का सामना कर रहा हूँ (10g के साथ काम करता है):

CREATE SEQUENCE test_sequence START WITH 1; 
CREATE TABLE test_table (val INT); 

INSERT INTO test_table VALUES (test_sequence.NEXTVAL); 

हालांकि अनुक्रम से शुरू होता है, पहला मूल्य डाला गया है :

SELECT * FROM test_table; 

     VAL 
---------- 
     2 

अपेक्षित व्यवहार:

डालने के बिना NEXTVAL चयन काम करता है के रूप में उम्मीद:

CREATE SEQUENCE test_sequence_2 START WITH 1; 

SELECT test_sequence_2.NEXTVAL FROM dual 

    NEXTVAL 
---------- 
     1 

प्रश्न:

क्या कोई इसे ओरेकल 11 जी का उपयोग करके पुन: उत्पन्न कर सकता है? क्या यह जाना पहचाना हुआ मुद्दा है?

मैं
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production का उपयोग कर रहा हूं।

+1

यह रिटर्न '1' मेरी' Oracle डाटाबेस 11g रिलीज 11.1.0.6.0 पर - 64 बिट Production' – Quassnoi

+1

@Quassnoi: यह '11.2 के एक" सुविधा "हो रहा है '(जेफरी का जवाब देखें)। परीक्षण के लिए धन्यवाद! –

उत्तर

16

यह documented in the 11.2 SQL Language Reference है जहां यह कहते हैं,

आप आस्थगित खंड निर्माण, पहले मान कि अनुक्रम रिटर्न छोड़ दिया जाएगा का उपयोग करता है एक तालिका में एक दृश्य मान सम्मिलित करने का प्रयास करते।

जेफरी केम्प के उत्तर में मेरा ओरेकल सपोर्ट (मेटलिंक) नोट और एक वर्कअराउंड के लिए लिंक देखें।

3

मैं 11 जी पर पुन: पेश नहीं कर सकता, यानी तालिका में आपके चरणों का पालन करने के बाद 1 है।

हालांकि, यह बहस योग्य है कि इसे "मुद्दा" माना जाना चाहिए, क्योंकि अनुक्रमों को अंतराल मुक्त होने की गारंटी नहीं दी जाती है। गारंटी के साथ शुरूआत यह है कि अनुक्रम निर्दिष्ट मूल्य से कम कम मान कभी वापस नहीं करेगा - उदा। मौजूदा डेटा के साथ संघर्ष से बचने के लिए। मैं सहमत हूं कि जो भी आप देख रहे हैं वह आश्चर्यजनक है और मुझे कारण जानने में दिलचस्पी होगी!

7

मैं कहूंगा कि यह कारण "अनियंत्रित सुविधा" है। मेरा ओरेकल समर्थन दस्तावेज़ आईडी 1273858.1 देखें (जो दुर्भाग्य से पेवेल के पीछे है और यहां कॉपी नहीं किया जा सकता है)।

इसे स्थगित सेगमेंट निर्माण के बिना आज़माएं और देखें कि समस्या बनी रहती है या नहीं।

1

उपयोग:

CREATE SEQUENCE SQ_SEQUENCE_NAME 
    INCREMENT BY 1 
    START WITH 1 
    MINVALUE 0 -- This will ensure start at 1! 
    MAXVALUE 99 
    NOCYCLE 
    NOCACHE 
    ORDER; 
संबंधित मुद्दे