2010-12-21 15 views
9

मैं ओरेकल से साइबेस तक डेटा स्थानांतरित करने के लिए एक एप्लिकेशन लिख रहा हूं और अद्यतन/सम्मिलन संचालन करने की आवश्यकता है। ओरेकल में, मैं मेर्ज इंटो का उपयोग करता हूं, लेकिन ऐसा लगता है कि यह साइबेस में नहीं है (वैसे भी, एएसई में नहीं)। मुझे पता है कि यह कई कथनों के साथ किया जा सकता है, लेकिन कुछ कारणों से, मैं वास्तव में इसे एक ही कथन में लाने की कोशिश कर रहा हूं।साइबेस एएसई में अप्सर्ट (अपडेट या डालने)?

कोई सुझाव?

उत्तर

0

हो सकता है कि आप इसे कुछ सब-प्रश्नों के साथ INSERT INTO और/या अद्यतन के साथ नकली करने का प्रयास कर सकें, लेकिन यह ओरेकल के रूप में सुविधाजनक नहीं होगा।

क्या आप इसे कोड या डेटा वेयरहाउस में करना चाहते हैं? क्योंकि यदि आप प्रश्नों की जटिलता को छिपाना चाहते हैं तो आप सभी एसक्यूएल को संग्रहीत प्रक्रिया में भी समाहित कर सकते हैं।

5

साइबेस और डीबी 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) 

अद्यतन बस पूरक है:

"मर्ज" के लिए, कि बस एक है मैं इसे स्पष्टीकरण के लिए आपको दिखा रहा हूं)।

जैसा कि मैं इसे समझता हूं, ओरेकल सबक्वायरीज़ (मानक एसक्यूएल) निष्पादित करने में अबाध है। यही कारण है कि उनके पास इन सभी गैर मानक "मेर्ज" इत्यादि हैं, जिसका उद्देश्य मानक सबक्वायरी सिंटैक्स से बचना है, जो हर दूसरे डीबीएमएस आसानी से प्रदर्शन करता है।

+0

धन्यवाद, लेकिन जैसा कि मैंने इस सवाल में संकेत दिया है, मुझे पता है कि व्यक्तिगत सम्मिलन और अद्यतन विवरणों के साथ इसे कैसे किया जाए। मैं एएनएसआई एसक्यूएल के बारे में भी जानता हूं। मैं आम तौर पर विधियों या एक्सटेंशन पर सुझावों की तलाश में था जिसके बारे में मुझे एक ही चरण में प्रक्रिया को पूरा करने के बारे में पता नहीं था। मैं ओरेकल का बड़ा प्रशंसक नहीं हूं, लेकिन मुझे कई परिस्थितियों में एक सरल और सुरुचिपूर्ण टूल होने के लिए मेर्ज स्टेटमेंट मिला है। – Ickster

+1

@Ickster। ठीक है, लेकिन सवाल "एकल कथन" के लिए कहा।मैंने केवल "विधि" प्रदान की है। यह सेट-प्रोसेसिंग (एकाधिक पंक्तियों) के लिए काम करता है। एकमात्र अन्य "विधि" इसे एक संग्रहित प्रो के रूप में लिखना है, लेकिन यह इसे पंक्ति-प्रसंस्करण (बहुत धीमी) में गिरा देगा। – PerformanceDBA

4

दुर्भाग्यवश, मेरिज का उपयोग किए बिना एक कथन में एक तालिका डालना और अपडेट करना असंभव है। SQL0: 2008 के अनुसार एसक्यूएल में कौन सा बीटीडब्ल्यू मौजूद है, वैसे भी article के मुताबिक, और सिबबेस एएसई और पोस्टग्रेएसक्यूएल को छोड़कर लगभग सभी प्रमुख डेटाबेस द्वारा समर्थित है।

4

एएसई 15.7 में यह सुविधा है।

+0

क्या आपके पास मैन्युअल रूप से कम से कम एक लिंक है जहां यह दस्तावेज है? –

+0

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc36272.1570/html/commands/commands84.htm – mosheb

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