2012-06-06 20 views
5

मेरे पास नीचे दिखाया गया एक अद्यतन कथन है जो ठीक काम करता है, मैंने प्रदर्शन में काफी सुधार करने के लिए सबक्वायरी में एक कथन का उपयोग किया लेकिन किसी कारण से मुझे अपडेट करने के लिए एक ही तालिका से अतिरिक्त कॉलम जोड़ने की अनुमति नहीं है।कीवर्ड के साथ एक ही समय में एक से अधिक कॉलम अपडेट क्यों नहीं कर सकता?

काम करता है:

UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
           SELECT Col_One FROM OneValue); 

मुझे क्या करना सिर्फ इस

UPDATE Table_A SET (Col_One, Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
           SELECT Col_One, Col_Two FROM OneValue); 

तरह table_two से भी अद्यतन करने के लिए एक और कॉलम शामिल है चाहते हैं, लेकिन मैं ओरा-01,767 अद्यतन सेट अभिव्यक्ति होना चाहिए क्या एक सबक्वायरी मैं इस त्रुटि को समझता हूं लेकिन यह देखने में असफल रहा कि मैं इसे कैसे उत्पन्न कर रहा हूं। कोई भी मदद बहुत ही सराहनीय होगी।

अग्रिम धन्यवाद।

UPDATE Table_A SET (Col_One, Col_Two) = (select col_one, col_two from 
              (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
              SELECT Col_One, Col_Two FROM OneValue) 
             ); 

अगर सबक्वेरी के साथ "के साथ" शुरू होता है क्यों यह काम नहीं करता है, मैं सिर्फ यह है कि कल्पना कर सकते हैं:

+1

मुझे कोई कारण नहीं दिख रहा है कि प्रदर्शन सबक्वायरी फैक्टरिंग क्लॉज से क्यों लाभान्वित होगा। एक अंतर है या नहीं, यह देखने के लिए निष्पादन योजनाओं की जांच करें। –

+0

अच्छी तरह से कोडिंग के लिए नया होना, मुझे यकीन नहीं है कि मैं आपको सही ढंग से जवाब दे सकता हूं कि मुझे यह कहने के अलावा कि तालिका 2 से प्रदर्शन में परेशानी हो रही है जो एक बहुत बड़ी मेज है। मैंने चारों ओर देखा और askTom [link] (http://asktom.oracle.com/pls/asktom/f?p=100:11TP::::1211QUESTION_ID6588016031632) के माध्यम से कुछ बहुत ही उपयोगी अद्यतन ऑप्टिज़ेशन जानकारी मिली यह मेरी स्थिति और प्रदर्शन से> 5 मिनट से <10 सेकंड तक चला गया। – dee

+0

+1 पूछताछ को देखने के लिए +1, लेकिन -1 वहां दर्शन के दर्शन का पालन नहीं करने के लिए :) देखें कि वह प्रदर्शन तुलना कैसे करता है। प्रश्नों के लिए निष्पादन योजनाएं प्राप्त करने और मतभेदों को देखने के लिए डीबीएमएस_एक्सप्लान का उपयोग करें, और डेटा कैशिंग –

उत्तर

8

यह (यह दोहरी का उपयोग कर एक सरल प्रश्न के साथ वैसे भी किया था) काम करने के लिए प्रकट होता है ऐसा इसलिए है क्योंकि ओरेकल एसक्यूएल के डिजाइनरों ने इस उपयोग की उम्मीद नहीं की थी।

+0

से लाभ प्राप्त दूसरी क्वेरी से सावधान रहें। यह कामकाज काम करता है। इतनी जल्दी जवाब देने के लिए धन्यवाद। यह मुझे अनावश्यक रूप से अनावश्यक होने के रूप में मारता है, लेकिन इसके लिए नया होने से मैं मदद नहीं कर सकता लेकिन आश्चर्यचकित हूं कि इसके लिए इसका कुछ तर्कसंगत कारण है या नहीं। – dee

+0

महान उत्तर के लिए धन्यवाद! मैं इस मुद्दे से फंस गया था और बहुत निराश हो गया। अभी भी यह सुनिश्चित नहीं है कि यह क्यों काम करता है, लेकिन कम से कम यह करता है! :) –