साइबेस और डीबी 2 बहुत आईईसी/आईएसओ/एएनएसआई एसक्यूएल स्टैंडर्ड-अनुरूप हैं। एमएस थोड़ा कम तो।
ओरेकल बिल्कुल मानक-अनुरूप नहीं है (ग्लॉसीज के बावजूद)। इससे भी महत्वपूर्ण, इसकी सीमाओं के कारण, वे जिस तरीके से उन्हें दूर करने के लिए उपयोग करते हैं, वह एसक्यूएल में एक्सटेंशन पेश करना है (जो अन्य डीबीएमएस के लिए आवश्यक नहीं हैं, जिनके पास सीमाएं नहीं हैं)। यह सुनिश्चित करने का अच्छा तरीका है कि ग्राहक माइग्रेट नहीं करते हैं।
तो आपके लिए सबसे अच्छी सलाह ओरेकल पक्ष पर जो कुछ भी कर रही थी, उसके एसक्यूएल मानक तरीके को सीखना है। और दूसरा (पहले नहीं) Sybases या DB2s (या जो कुछ भी) एक्सटेंशन के बारे में जानें।
"मेर्ज" और "यूपीएसईआरटी" एसक्यूएल में मौजूद नहीं है, वे केवल ओरेकल में मौजूद हैं। निचली पंक्ति यह है कि, आपको दो अलग-अलग संचालन में अद्यतन और INSERT करना होगा।
एसक्यूएल में, अद्यतन और INSERT एक ही तालिका पर लागू होता है; आप खंडों से काफी जटिल हो सकता है। अद्यतन में
UPDATE target SET (target_column = source_column, ...)
FROM source
WHERE primary_key IN (SELECT primary_key FROM target)
यह कहां की स्थिति विलय और Subquery को खत्म करने के लिए आसान है (:
INSERT target (column_list) -- we do have defaults
SELECT (column_list)
FROM source
WHERE primary_key NOT IN (SELECT primary_key FROM target)
अद्यतन बस पूरक है:
"मर्ज" के लिए, कि बस एक है मैं इसे स्पष्टीकरण के लिए आपको दिखा रहा हूं)।
जैसा कि मैं इसे समझता हूं, ओरेकल सबक्वायरीज़ (मानक एसक्यूएल) निष्पादित करने में अबाध है। यही कारण है कि उनके पास इन सभी गैर मानक "मेर्ज" इत्यादि हैं, जिसका उद्देश्य मानक सबक्वायरी सिंटैक्स से बचना है, जो हर दूसरे डीबीएमएस आसानी से प्रदर्शन करता है।
धन्यवाद, लेकिन जैसा कि मैंने इस सवाल में संकेत दिया है, मुझे पता है कि व्यक्तिगत सम्मिलन और अद्यतन विवरणों के साथ इसे कैसे किया जाए। मैं एएनएसआई एसक्यूएल के बारे में भी जानता हूं। मैं आम तौर पर विधियों या एक्सटेंशन पर सुझावों की तलाश में था जिसके बारे में मुझे एक ही चरण में प्रक्रिया को पूरा करने के बारे में पता नहीं था। मैं ओरेकल का बड़ा प्रशंसक नहीं हूं, लेकिन मुझे कई परिस्थितियों में एक सरल और सुरुचिपूर्ण टूल होने के लिए मेर्ज स्टेटमेंट मिला है। – Ickster
@Ickster। ठीक है, लेकिन सवाल "एकल कथन" के लिए कहा।मैंने केवल "विधि" प्रदान की है। यह सेट-प्रोसेसिंग (एकाधिक पंक्तियों) के लिए काम करता है। एकमात्र अन्य "विधि" इसे एक संग्रहित प्रो के रूप में लिखना है, लेकिन यह इसे पंक्ति-प्रसंस्करण (बहुत धीमी) में गिरा देगा। – PerformanceDBA