मैं एक बहुप्रचारित एप्लिकेशन पर काम कर रहा हूं जो अपने प्राथमिक डेटाबेस के लिए डीबी 2 का उपयोग करता है। अतीत में हमने ज्यादातर टेबल के लिए पहचान कॉलम का उपयोग किया है जहां हमें एक ऑटो-जेनरेटेड अद्वितीय पहचानकर्ता की आवश्यकता होती है। ऐसा करने के लिए हम एक ही लेनदेन में नीचे दिए गए 2 प्रश्नों को चलाएंगे:मल्टीथ्रेडेड एप्लिकेशन में डीबी 2 अनुक्रम मूल्य कैसे प्राप्त करें
INSERT INTO tbname (IDENTITY_COL, ...) VALUES (DEFAULT, ...);
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1;
हमें अब अनुक्रम पर स्विच करने के लिए दबाव डाला जा रहा है। मुझे पता है कि आप INSERT और SELECT कथन दोनों में "कॉलनाम" के लिए अगला VALUE का उपयोग कर सकते हैं, लेकिन मैं यह नहीं समझ सकता कि दोनों मल्टीथ्रेड किए गए एप्लिकेशन में दौड़ की स्थिति को जोखिम के बिना INSERT और समान मूल्य के साथ कैसे चुनें। उदाहरण के लिए, अगर मैं का उपयोग करें:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR SEQUENCE_COL, ...);
SELECT PREVIOUS VALUE FOR SEQUENCE_COL;
तो फिर वहाँ एक संभावना एक और सम्मिलित करें ऊपर सम्मिलित करें और चयन के बीच चलाया गया था, इसलिए मुझे गलत मान प्रदान है। अगर मैं कोशिश:
SELECT NEXT VALUE FOR SEQUENCE_COL;
दुकान एक चर में मूल्य और पारित सम्मिलित करने के लिए में है कि:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (variable_value, ...);
तो फिर वहाँ एक संभावना एक और धागा एक ही अगले मूल्य मिल गया है और एक ही मान सम्मिलित करने की कोशिश करता , जिसके परिणामस्वरूप डीबी 2 -803 त्रुटि हुई। क्या बहुसंख्यक वातावरण में सेक्वेंस कॉलम का उपयोग करना संभव है, या क्या मुझे अपना पहचान कॉलम रखने के लिए लड़ने की आवश्यकता है?
कनेक्शन-विशिष्ट स्पष्टीकरण प्रदान करने के लिए आपको बहुत बहुत धन्यवाद। वास्तव में मुझे क्या सुनने की जरूरत है। –