2009-06-11 19 views
10

से दो टेबल पूछें मेरे पास ओरेकल (एस 1, एस 2) में दो अलग-अलग स्कीमा हैं और उन स्कीमा में दो टेबल हैं (S1.Table1, S2.Table2 कहें)। मैं स्कीमा एस 1 से इन दो तालिकाओं से पूछना चाहता हूं।विभिन्न स्कीमा

दोनों एस 1 और एस 2 अलग डेटाबेस में हैं। DB1 से - स्कीमा एस 1, मैं इस तरह कुछ करना चाहता हूँ,

select T1.Id 
    from S1.Table1 T1 
    , S2.Table2 T2 
Where T1.Id = T2.refId 

मैं यह कर दूसरा स्कीमा के लिए एक डीबी लिंक बना सकते हैं और क्वेरी में उपयोग किया जाएगा करने का एक तरीका पता है। अफसोस की बात है, मेरे पास डीबी लिंक बनाने के लिए आवश्यक विशेषाधिकार नहीं हैं। क्या डीबी लिंक के बिना ऐसा करने का कोई तरीका है? उदाहरण के लिए, TOAD में आप दो स्कीमा ऑब्जेक्ट्स की तुलना कर सकते हैं। लेकिन फिर, दो स्कीमा वस्तुओं और यह सामान्य तुलना है।

कोई भी विचार, सुझाव बहुत सराहना कर रहे हैं। अग्रिम में धन्यवाद।

+0

निजी प्राप्त करने के लिए अपने डीबीए पर जाएं! – tuinstoel

+0

अच्छा सुझाव। ऐसा लगता है, केवल उस पर जाकर और निजी हो जाना संभव लगता है। – Guru

उत्तर

8

डीबी लिंक काफी खेल यहाँ के नाम हैं। यदि आप स्वयं को कोई भी नहीं बना सकते हैं, तो जांचें कि क्या कोई सार्वजनिक डीबी लिंक है जिसका आप उपयोग कर सकते हैं।

यह भी संभव है कि आपके डीबीए एस 1 उदाहरण पर S2.Table2 के भौतिक दृश्य बनाने के लिए उपयोग किए गए उनके डीबी लिंक में से एक को तैयार करने के इच्छुक हों।

एक और विकल्प वेब सेवाएं हो सकता है, लेकिन मेरा अनुमान है कि आप एक साधारण डीबी लिंक के साथ कहीं अधिक प्रशासनिक मुद्दों में भाग लेंगे। उन पर विचार करें यदि कोई लिंक के अच्छे कारण नहीं हैं (उदाहरण: दो अलग-अलग संगठन जो अपने डेटाबेस के बीच फ़ायरवॉल छेद नहीं खोलना चाहते हैं)।

उनको विफल करना, आप वास्तव में बदसूरत क्षेत्र में आ रहे हैं लेकिन आप कुछ काम करने में सक्षम हो सकते हैं। उदाहरण के लिए:

  • एक उपकरण से दोनों खोलें जो एक साथ कई कनेक्शन से पढ़ सकते हैं और वहां शामिल हो सकते हैं। पहुंच। डेटा विश्लेषण के लिए टोड, जो भी हो।
  • अपनी खुद की स्कीमा ("एक और स्कीमा में बनाने के" "एक और स्कीमा के प्रति डेटा" के बाद)
  • यदि आप हैं, या प्राप्त कर सकते हैं करने के लिए S2.Table2 कॉपी करने के लिए टॉड की तरह एक उपकरण का उपयोग करें, पूरक सूची की वस्तुओं पर परिभाषित दोनों सर्वर, एक निर्देशिका में बाह्य तालिका के रूप में एस 2 का एक भौतिक दृश्य बनाएं जिसे एस 2 से लिखा जा सकता है और एस 1 से पढ़ा जा सकता है।

आप वास्तव में लंबे समय तक इनमें से किसी भी समाधान को बनाए रखना नहीं चाहते हैं।

+0

अरे .. बहुत बहुत धन्यवाद। इसके लिए +1। मैं अभी भी इसे अधिक सुझाव प्राप्त करने की उम्मीद के उत्तर के रूप में चिह्नित करने के लिए पकड़ रहा हूं। – Guru

+0

उस युक्ति के लिए धन्यवाद। कस्टम ऑब्जेक्ट्स को निकालना अभी आसान हो गया है। –

15

यदि दो स्कीमा एक ही डेटाबेस में हैं तो आपको डेटाबेस लिंक की आवश्यकता नहीं होगी।

आपकी क्वेरी स्कीमा एस 1 से काम करनी चाहिए, बशर्ते एस 1 को S2.table2 पर चयन विशेषाधिकार दिया गया हो (डीबीए खाते से या एस 2 स्कीमा से: GRANT SELECT ON S2.Table2 TO S1)।

+0

धन्यवाद, मुझे पता है कि। ये स्कीमा विभिन्न डेटाबेस में हैं। – Guru

+0

यह सही जवाब है! –

1

उपयोग बनाएँ डेटाबेस लिंक बयान एक डेटाबेस लिंक बनाने के लिए। एक डेटाबेस लिंक एक डेटाबेस में एक स्कीमा ऑब्जेक्ट है जो आपको किसी अन्य डेटाबेस पर ऑब्जेक्ट्स तक पहुंचने में सक्षम बनाता है।

एक छोटे से बंद विषय है, लेकिन आप नए उपयोग करना चाहें वाक्य रचना में शामिल होने:

SELECT 
    T1.Id 
    FROM S1.Table1   T1 
     INNER JOIN S2.Table2 T2 ON T1.Id = T2.refId 

सभी में शामिल होने की स्थिति "ऑन" खंड में दिखाई देते हैं, और फिल्टर की स्थिति में "कहाँ" दिखाई देते हैं।

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

+0

धन्यवाद केएम। लेकिन अफसोस की बात है, मेरे पास डीबी लिंक बनाने और डीबीए सहायता प्राप्त करने के लिए निजीकरण नहीं हो सकता है। सोचा कि ऐसा करने का कोई तरीका होना चाहिए। :( – Guru

+0

डीबीए कैसे मदद नहीं कर सकता है, उन्हें आपकी परियोजना को काम करने में मदद करने के लिए वहां होना चाहिए? –

+0

यह एक बार की गतिविधि है। और मैंने सोचा कि मैं डीबीए जाने से पहले संभावनाओं के लिए चारों ओर देखूंगा। मुझे पता है, मैं हमेशा ऐसा कर सकता हूं डीबीए मदद। धन्यवाद केएम – Guru

1

आप एक जावा संग्रहित प्रो बना सकते हैं जो अन्य डेटाबेस से जुड़ता है और जेडीबीसी के माध्यम से अन्य डेटाबेस पर चयन निष्पादित करता है। जावा संग्रहीत प्रो को एक संग्रह वापस करना है। आप अपने संग्रह में तालिका के साथ select from table(...) के माध्यम से इस संग्रह में शामिल हो सकते हैं।

लगभग समान समाधान के लिए here देखें।

मुझे लगता है कि यह दृष्टिकोण धीमा और जटिल होगा क्योंकि आपको बहुत कोडिंग करना है और आपको अपने जावा संग्रहीत प्रो के लिए एक पीएल/एसक्यूएल रैपर बनाना है।

डेटाबेस लिंक बनाना बेहतर है।

+0

धन्यवाद Tuinstoel। मैं जावा में उस familar नहीं हूँ। मैं नीचे स्टीव द्वारा सुझाई गई लाइनों में जाना होगा। – Guru

1

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

प्रश्न इंडेक्स को मूल ओरेकल डीबी लिंक के रूप में कुशलता से उपयोग नहीं कर सकते हैं, लेकिन यह कुछ भी नहीं होगा।

संपादित करें: कभी नहीं - मुझे लगता है कि यह पहले से ही ऊपर सुझाया गया था।

+0

धन्यवाद स्टीव। मैं वास्तव में आपके द्वारा सुझाई गई लाइनों में देख रहा हूँ। यह एक बार गतिविधि है। :) – Guru