2010-11-12 27 views
5

मुझे एक स्मारक रूप से कठिन कार्य है जो एक विशाल स्कीमा से कई तालिकाओं को ढूंढना है, और इन तालिकाओं के लिए डीडीएल उत्पन्न करना है।ओरेकल डेटाबेस से प्रोग्रामेटिक रूप से डीडीएल कैसे उत्पन्न करें?

कहो, मुझे मिल गया है एक schemaA 1000 टेबल है, मैं खोजने की जरूरत है अगर एक tableA इस schemaA में ही अस्तित्व में है, अगर यह होता है, DDL पैदा करते हैं और, फ़ाइल सिस्टम के लिए अगर, नहीं है प्रिंट यह नाम है इसे बचा या इसे एक फाइल में लिखें। कोई विचार?

उत्तर

16

डीबीएमएस_एमईटीएडीएटीए पैकेज (मान लीजिए कि आप ओरेकल के एक उचित हाल के संस्करण पर हैं) डेटाबेस में किसी ऑब्जेक्ट के लिए डीडीएल उत्पन्न करेंगे। तो

SELECT dbms_metadata.get_ddl('TABLE', 'TABLEA', 'SCHEMAA') 
    FROM dual; 

SchemaA.TableA के लिए डीडीएल के साथ एक सीएलओबी वापस करेगा। आप अपवाद है कि फेंक दिया जाता है कि ऑब्जेक्ट मौजूद नहीं है पकड़ सकते थे, लेकिन मैं, जो बताते हैं कि आप SchemaA में TableA नाम के एक मेज है कि वहाँ सत्यापित करने के लिए डाटा डिक्शनरी (यानी DBA_OBJECTS) क्वेरी जाते हैं यानी

SELECT COUNT(*) 
    FROM dba_objects 
WHERE owner = 'SCHEMAA' 
    AND object_name = 'TABLEA' 
    AND object_type = 'TABLE' 

ध्यान दें कि यदि आपके पास DBA_OBJECTS तक पहुंच नहीं है, तो आप इसके बजाय ALL_OBJECTS का उपयोग कर सकते हैं। हालांकि, चिंता यह है कि स्कीमा में एक टेबलए हो सकता है कि आपके पास चयन पहुंच नहीं है। वह तालिका ALL_OBJECTS में दिखाई नहीं देगी (जिसमें आपके पास पहुंचने वाली सभी ऑब्जेक्ट्स हैं) लेकिन यह DBA_OBJECTS में दिखाई देगी (जिसमें डेटाबेस तक सभी ऑब्जेक्ट्स हैं, इन तक पहुंचने की आपकी क्षमता के बावजूद)।

तब आप या तो फ़ाइल में डीडीएल लिख सकते हैं या यदि गणना 0 है, तो इंगित करें कि ऑब्जेक्ट मौजूद नहीं है। संग्रहीत प्रक्रिया से, आप डेटाबेस सर्वर पर फ़ाइल को लिखने के लिए UTL_FILE पैकेज का उपयोग कर सकते हैं। यदि आप क्लाइंट फ़ाइल सिस्टम पर किसी फ़ाइल को लिखने का प्रयास कर रहे हैं, तो आपको उस भाषा का उपयोग करना होगा जिसमें क्लाइंट ऑपरेटिंग सिस्टम के संसाधनों तक पहुंच हो। एक छोटा सी/जावा/पर्ल/इत्यादि प्रोग्राम सीएलओबी का चयन करने में सक्षम होना चाहिए और उस डेटा को क्लाइंट ऑपरेटिंग सिस्टम पर फ़ाइल में लिखना चाहिए।

+0

ग्रेट, जस्टिन, मैंने आपके एसक्यूएल के पहले भाग का परीक्षण किया है, लेकिन जब मैं दूसरा भाग चलाता हूं, तो मुझे ओआरए -00 9 42 मिल गया: तालिका या दृश्य मौजूद नहीं है। और मैं एसक्यूएल का उपयोग कर फाइल में क्लॉब कैसे लिख सकता हूं? – Sawyer

+0

@ZZcat - मेरा उत्तर अपडेट किया गया –

+0

छोटा चूक - पहला नमूना एसक्यूएल को 'टेबल' और 'टैबलेट' के बीच एक अल्पविराम की आवश्यकता होती है जिसके बिना यह विफल हो जाता है। –

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