2008-10-01 29 views
6

SQLServer के साथ, ऐसा आमतौर पर स्वीकार किया जाता है कि आपके सम्मिलन के अंत में एक चयन SCOPE_IDENTITY() जोड़ना नव-सम्मिलित रिकॉर्ड के पीके को वापस करने का सबसे अच्छा तरीका है, मानते हुए कि आप एक ऑटो-वृद्धि फ़ील्ड का उपयोग कर रहे हैं पीकेसर्वोत्तम प्रथाओं: .NET: एक ओरेकल डेटाबेस के खिलाफ पीके कैसे वापस करें?

हालांकि, मुझे ओरेकल के बराबर नहीं लग रहा है।

सर्वोत्तम अभ्यास पीके उत्पन्न करने के लिए अनुक्रम का उपयोग करना प्रतीत होता है, लेकिन इसके कार्यान्वयन के लिए अलग-अलग विकल्प भी हैं। क्या आप इसे sequence.nexval डालने के लिए डेवलपर को छोड़ देते हैं, या ट्रिगर का उपयोग करते हैं?

किसी भी मामले में, नई आईडी वापस प्राप्त करना एक आम समस्या प्रतीत होता है।

सुझाव और समाधान मैं के पार चला गया है में शामिल हैं:

  • एक संग्रहीत proc कि पी
  • रिटर्न seq.nextval से एक का चयन आईडी चल बनाने, तो गुजर कि डालने
  • का चयन करने के लिए अधिकतम (आईडी) के बाद डालने (नोट:! ऐसा मत करो)
  • डालने पर वापस लौटने वाली खंड जोड़ने

क्या टी चाहिए वह इस स्थिति के लिए "सर्वोत्तम अभ्यास" समाधान हो सकता है?

उत्तर

9

आप ओरेकल संग्रहीत प्रोसेस में ऐसा करने के लिए रिटर्निंग क्लॉज का उपयोग कर सकते हैं।

उदाहरण के लिए:

TableA नाम और EMP_ID है। रिकॉर्ड्स डालने पर EMP_ID आंतरिक रूप से पॉप्युलेट किया जाता है।

टैबलेट (NAME) मूल्यों में 'INBERT) (' बीओबी ') EMP_ID में EMP_ID में वापसी;

यह मानते हुए कि लाइन एक संग्रहित प्रो में o_EMP_ID के आउटपुट पैरामीटर के साथ है।

आशा है कि मदद करता है ... यदि नहीं, तो यहाँ एक अधिक विस्तृत उदाहरण है:

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm

+1

अब इसे पढ़ने के लिए, लिंक मर चुका है =/ – Travis

+1

यह ध्यान देने के लिए धन्यवाद, मैंने लिंक को और अधिक स्थिर (यदि थोड़ा कम दोस्ताना - रिटर्निंग क्लॉज पर ओरेकल दस्तावेज़) बदल दिया है – ScottCher

4

रिटर्निंग क्लॉज इस तरह के उपयोग के लिए है, इसलिए मैं इसे इस्तेमाल करने का सबसे अच्छा अभ्यास कहूंगा।

डालने के बाद seq.CURRVAL का चयन करना एक विकल्प होगा। यह अनुक्रम से प्राप्त अंतिम मूल्य द्वारा सत्र प्राप्त करता है।

+0

लेकिन एक समवर्ती कॉल अनुक्रम में वृद्धि के मामले में सावधान रहें, है ना? – Liam

+0

नहीं, CURRVAL इस सत्र द्वारा अनुक्रम से प्राप्त अंतिम मूल्य है। –

+0

जावा के साथ: सम्मिलन से पहले sequence.nextval का चयन करें, और अपने SQL कथन में मान सेट करें और किसी प्रविष्टि से पहले तालिका पर ट्रिगर का उपयोग न करें। ऐसा इसलिए है क्योंकि जावा RETURN_GENERATED_KEYS में ओरेकल जेडीबीसी ड्राइवर के लिए प्रीपेयरस्टेटमेंट पर लागू नहीं किया गया है। – JeeBee

2

संग्रहीत प्रक्रिया और वापस लौटने वाले खंड एक एकल डाटाबेस के विशिष्ट लाभ फोन किसी अन्य समाधान अवर है। चाहे आप इसे संग्रहीत प्रक्रिया के माध्यम से करते हैं या आप रिटर्निंग क्लॉज का उपयोग करते हैं, वह स्वयं कीड़े का पूरा कर सकता है।

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