C # डेवलपर SQL सर्वर संग्रहित प्रक्रियाओं को लिखने के लिए प्रबंधन द्वारा प्रोत्साहित किया जाता है जो अक्सर इस तरह की प्रक्रियाओं का उत्पादन करते हैं
create table #t1 (...);
insert into #t1 Select ... from table_a where ...;
insert into #t1 Select ... from table_b where ...;
update #t1 Set ... = ... where ...
Select * from #t1;
एकल कथन बल्कि सरल हैं और यह विधि उन्हें सही परिणाम प्रदान करती है।
अक्सर मेरा काम ओरेकल के लिए ऐसी प्रक्रियाओं को स्थानांतरित करना है।
आइए निम्नलिखित तथ्यों का सामना करें।
- एसक्यूएल सर्वर में विभिन्न अस्थायी तालिकाओं के लिए पूरी तरह से स्वतंत्र हैं और किसी भी तदर्थ संरचना हो सकता है।
- ओरेकल वैश्विक आम टेबल वैश्विक वस्तुएं हैं और सभी एक ही तालिका संरचना का बहुत अधिक उपयोग करते हैं। इस संरचना को संशोधित करना असंभव है, जबकि इसका उपयोग कहीं भी किया जाता है।
ओरेकल डीबीए से जो कुछ मैंने सीखा, उनमें से एक यह था कि जब भी संभव हो, अस्थायी तालिकाओं के उपयोग से बचें। यहां तक कि SQL सर्वर पर प्रदर्शन ऐसे संशोधनों से लाभान्वित होता है।
यूनियनों द्वारा अलग-अलग आवेषण बदलें
सबसे सरल मामले में, उपरोक्त को कुछ में परिवर्तित किया जा सकता है
select case when ... then ... end, ... from table_a where ...
union
select case when ... then ... end, ... from table_b where ...
Order by ...;
कार्यों का उपयोग
स्केलर फ़ंक्शंस और टेबल वैल्यू फ़ंक्शंस दोनों ही आपकी प्रक्रिया को उपरोक्त फ़ॉर्म की एक ही क्वेरी में बदलने में मदद कर सकते हैं।
सामान्य तालिका के भाव उर्फ सबक्वेरी फैक्टरिंग
सबक्वेरी फैक्टरिंग लगभग सबसे अच्छा ओरेकल है जो अस्थायी तालिकाओं से बचने की पेशकश करता है। यह SQL सर्वर के Oracle के लिए माइग्रेशन का उपयोग फिर से आसान है। इसके लिए SQL Server 2005 और इसके बाद के संस्करण की आवश्यकता है।
ये संशोधन SQL सर्वर संस्करण में सुधार करते हैं और कई मामलों में माइग्रेशन को सीधे आगे बढ़ाते हैं। अन्य मामलों में वैश्विक अस्थायी तालिकाओं का सहारा लेना प्रवास को एक तय समय में करना संभव बनाता है, लेकिन यह कम संतोषजनक है।
ओरेकल में वैश्विक अस्थायी तालिकाओं के उपयोग से बचने के और तरीके हैं?