2012-11-21 6 views
33

मैंने दो स्कीमा के बीच कॉलम अंतर जानने के लिए ऑरैकल शब्दकोश दृश्यों का उपयोग किया। डेटा प्रकार विसंगतियों को सिंक करते समय मुझे पता चला कि NUMBER और INTEGER डेटा प्रकार all_tab_columns/user_tab_columns/dba_tab_columns में केवल NUMBER के रूप में संग्रहीत हैं, इसलिए डेटा प्रकार विसंगतियों को सिंक करना मुश्किल है, जहां एक स्कीमा/कॉलम संख्या डेटाटाइप और अन्य स्कीमा/कॉलम में पूर्णांक डेटा प्रकार होता है ।ओरेकल शब्दकोश दृश्यों में संख्या और पूर्णांक डेटाटाइप के बीच अंतर

स्कीमा की तुलना में यह डेटाटाइप मेलसमूह दिखाता है। कृपया सुझाव दें कि क्या शब्दकोश दृश्यों का उपयोग करके कोई अन्य वैकल्पिक रूप है या यदि डेटा प्रकार पूर्णांक है तो यह पहचानने के लिए शब्दकोश दृश्यों से किसी भी विशिष्ट गुण का उपयोग किया जा सकता है।

+0

है: 'Number' है' ओरेकल के लिए डेटाप्रकार जबकि '' Integer', तो ओरेकल आंतरिक परिवर्तित 'है एएनएसआई datatypes' और आईबीएम उत्पादों एसक्यूएल/डी एस और डीबी 2 से डेटाटाइप्स in' बनाया संख्या को पूर्णांक (38) 'मुझे लगता है कि दोहरी से' चयन DBMS_METADATA.GET_DDL ('टेबल', '', '') के रूप में DDL से वास्तविक डेटा प्रकार प्राप्त करने के लिए एक ही रास्ता, ' –

+0

यह वह जगह है आखिरी विकल्प मैं सोच रहा हूं क्योंकि मेरे पास केवल कुछ विसंगतियां हैं और यह अलग-अलग तालिकाओं से स्तंभ स्थिति प्राप्त करने के लिए प्रदर्शन को भी प्रभावित करेगी। – Anand

+0

हैलो विशेषज्ञ, कोई अन्य सलाह कृपया ... – Anand

उत्तर

13

इंटीजर केवल एसक्यूएल मानक के लिए है यानी ओरेकल द्वारा बहिष्कृत।

आपको इसके बजाय नंबर का उपयोग करना चाहिए।

इंटेगर दृश्यों के पीछे ओरेकल द्वारा वैसे भी नंबर के रूप में संग्रहित हो जाते हैं।

आमतौर पर जब इन्ट्स आईडी के लिए संग्रहीत होते हैं और ऐसे में उन्हें कोई पैराम के साथ परिभाषित नहीं किया जाता है - इसलिए सिद्धांत में आप मेटाडेटा दृश्यों के पैमाने और सटीक कॉलम को देख सकते हैं ताकि कोई दशमलव मान संग्रहीत नहीं किया जा सके - हालांकि 99% उस समय से यह मदद नहीं करेगा।

जैसा कि ऊपर टिप्पणी की गई थी, आप संख्या (38,0) कॉलम या इसी तरह की तलाश कर सकते हैं (यानी कोई दशमलव बिंदु वाले कॉलम नहीं) लेकिन यह केवल आपको बताएगा कि कौन से कॉलम दशमलव नहीं ले सकते हैं, और कॉलम को परिभाषित नहीं किया गया था INTS संग्रहीत किया जा सकता है।

सुझाव: संख्या कॉलम पर एक डेटा प्रोफ़ाइल करें। कुछ इस तरह:

select max(case when trunc(column_name,0)=column_name then 0 else 1 end) as has_dec_vals 
from table_name 
11

यह मैं क्या oracle documentation से मिल गया है, लेकिन यह Oracle 10g रिलीज 2 के लिए है:

जब आप एक संख्या चर को परिभाषित है, तो आप अपने सटीक (पी) निर्दिष्ट कर सकते हैं और बड़े पैमाने (एस) ताकि यह पर्याप्त रूप से पर्याप्त हो, लेकिन अनावश्यक रूप से, बड़ा नहीं। प्रेसिजन महत्वपूर्ण अंकों की संख्या है। स्केल सकारात्मक या नकारात्मक हो सकता है। सकारात्मक पैमाने दशमलव बिंदु के दाईं ओर अंकों की संख्या की पहचान करता है; ऋणात्मक पैमाने दशमलव बिंदु के बाईं ओर अंकों की संख्या की पहचान करता है जिसे ऊपर या नीचे गोल किया जा सकता है।

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

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

क्या शब्दकोश दृश्यों की क्वेरी करते समय NUMBER और INTEGER के बीच अंतर करने के साथ इसका कोई संबंध नहीं है? –

+0

ध्यान दें कि संदर्भित पृष्ठ केवल डीडब्ल्यू ओलाप –

13

सबसे अच्छा विवरण मैं मिल गया है यह है:

पूर्णांक और संख्या betwen क्या अंतर है? हमें NUMBER का उपयोग कब करना चाहिए और हमें इंटेग्रर का उपयोग कब करना चाहिए? मैं बस यहां अपनी टिप्पणियां अपडेट करना चाहता था ...

NUMBER हमारे द्वारा दर्ज किए जाने पर हमेशा स्टोर करता है। स्केल -84 से 127 है। लेकिन पूरे नंबर पर इंटेग्रर राउंड। INTEGER के लिए स्केल 0 है INTEGER NUMBER (38,0) के बराबर है। इसका मतलब है, इंटेग्रर संख्या सीमित है। दशमलव स्थान गोल किया जाएगा। लेकिन NUMBER बाध्य नहीं है।

  • पूर्णांक (12,2) => 12
  • पूर्णांक (12.5) => 13
  • पूर्णांक (12.9) => 13
  • पूर्णांक (12.4) => 12
  • संख्या (12,2) => 12.2
  • संख्या (12.5) => 12.5
  • संख्या (12.9) => 12.9
  • संख्या (12.4) => 12.4

INTEGER हमेशा धीमा है तो NUMBER। चूंकि पूर्णांक अतिरिक्त बाधा के साथ एक संख्या है। बाधा को लागू करने के लिए इसमें अतिरिक्त CPU चक्र होते हैं। मैंने कभी भी कोई फर्क नहीं देखा, लेकिन जब हम INTEGER कॉलम पर कई लाख रिकॉर्ड लोड करते हैं तो कोई अंतर हो सकता है। अगर हमें यह सुनिश्चित करने की ज़रूरत है कि इनपुट पूरी संख्या है, तो INTEGER जाने का सबसे अच्छा विकल्प है। अन्यथा, हम NUMBER डेटा प्रकार के साथ रह सकते हैं।

यहाँ link

+0

के लिए है, इसलिए ओपी के प्रश्न पर वापस लौटने के लिए, क्या आप कह रहे हैं कि समाधान data_scale = 0 की जांच करना है? मेरे परीक्षणों से, ऐसा प्रतीत होता है कि data_precision भी शून्य होना चाहिए अन्यथा DESCRIBE आदि NUMBER दिखाएं। –

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