मुझे एक (कम से कम मैंने ऐसा सोचा) सरल कार्य प्राप्त किया है: कॉलमनाम, डेटाटाइप और लंबाई द्वारा 2 टेबल की तुलना केवल सत्यापित करने के लिए कि उनके पास एक ही संरचना है। यह मौजूदा पर्ल स्क्रिप्ट में किया जाना चाहिए जो दो अलग-अलग डेटाबेस से जुड़ रहा है।कहां डीआरबी करते हैं: ओरेकल table_info/column_info से उनकी जानकारी प्राप्त होती है?
सबसे पहले मैंने बस प्रत्येक डेटाबेस user_tab_columns
से पूछताछ की और परिणाम की तुलना की। अब मुझे मुश्किल तरीका पता चला है कि user_tab_columns
लाइव नहीं है लेकिन तालिका (http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_4462.htm#REFRN26277) का विश्लेषण करके ताज़ा किया जाना है, जिसे मैं बिना किसी जानकारी के जानता था।
describe
वास्तविक तालिका परिभाषा हो जाता है, लेकिन पर्ल्स dbi के माध्यम से काम करने के लिए प्रतीत नहीं होता: Oracle, तो मैं table_info()
और column_info()
तरीकों पर ठोकर खाई। लेकिन वे अपनी जानकारी कहां से प्राप्त करते हैं? यदि वे सिर्फ *_tab_columns
से पूछताछ करते हैं, तो वे मेरे लिए उपयोग नहीं कर रहे हैं।
मैं बस परीक्षण नहीं कर सकता क्योंकि मैंने अभी तक सही पैरामीटर को पारित नहीं किया है। Dbi Documentation का कहना है कि यह डेटाबेस ड्राइवर के अनुसार है। Oracle DBD Documentation मेरे लिए भी बहुत उपयोगी नहीं था, परीक्षण और त्रुटि अब तक सभी ऑब्जेक्ट्स या कुछ भी नहीं मिल रही है।
पल मैं एक पर्ल सिस्टम कॉल के माध्यम से sqlplus
के माध्यम से describe
को क्रियान्वित करने और उत्पादन को पार्स की सोच रहा हूँ पर .... लेकिन वहाँ है एक बेहतर तरीका हो सकता है।
संपादित करें:
दृश्य के रूप में की उम्मीद है, अगर सही स्तंभ (नीचे टिप्पणी देखें) user_tab_columns
काम करता है।
मुझे लगता है कि आपने दस्तावेज़ से कुछ गलत समझा है! user_columns एक सारणी है, जो हमेशा 100% अद्यतित है - ANALYZE के साथ बदलती एकमात्र चीज वे कॉलम हैं जिनमें सांख्यिकीय डेटा शामिल है। लेकिन नाम, प्रकार ... जैसे कॉलम हमेशा डेस्रिब – Falco
एचएम की तरह ही हैं जो मैंने सोचा था, लेकिन: user_tab_columns से column_name, data_type, data_length चुनें जहां table_name = 'MY_TABLE' और column_name = 'MY_COLUMN'; 'मुझे देता है 200 की डेटा लंबाई। चुनें dbms_metadata.get_ddl ('टेबल', 'MY_TABLE') दोहरी से; 'विशेष कॉलम के लिए 50 दिखाता है, 'डेस्क्रिब MY_TABLE' 50 भी दिखाता है। पाठ्यक्रम के उसी सत्र/डीबी-क्लाइंट-विंडो में निष्पादित। वर्चुअल कॉलम के लिए बाइट्स और चार को समेकित करने वाले डेटा लम्बाई मूल्य को गलत व्याख्या करने के बारे में पहले से ही सोचा गया है, लेकिन अन्य सभी स्तंभों के लिए यह फिट बैठता है। – evilive
यदि यह एक वर्चर टेबल है, तो आपको COLUMN: CHAR_LENGTH की तलाश करनी होगी, क्योंकि LENGTH बाइट में आरक्षित लंबाई है, जो यूटीएफ -8 – Falco