Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

परिभाषा पैरामीटर के रूप में Oracle varchar2 का अनिवार्य आकार क्यों है?

नहीं, बात बिल्कुल वैसी नहीं है।

  1. कॉलम की लंबाई स्क्रीन बनाने वाले डेवलपर्स के लिए उपयोगी मेटाडेटा है।
  2. इसी तरह TOAD और SQL डेवलपर जैसे स्वचालित क्वेरी टूल परिणाम प्रस्तुत करते समय कॉलम की लंबाई का उपयोग करते हैं।
  3. पीएल/एसक्यूएल संग्रह के लिए स्मृति आवंटित करते समय डेटाबेस एक चर की लंबाई का उपयोग करता है। जैसे ही वह मेमोरी पीजीए से निकलती है, वेरिएबल डिक्लेरेशन को सुपरसाइज़ करने से प्रोग्राम फेल हो सकते हैं क्योंकि सर्वर की मेमोरी खत्म हो गई है।
  4. पीएल/एसक्यूएल कार्यक्रमों में एकल चर की घोषणा के साथ समान समस्याएं हैं, यह सिर्फ इतना है कि संग्रह समस्या को गुणा करते हैं।
  5. बड़े आकार के कॉलम कंपाउंड इंडेक्स के लिए समस्या पैदा करते हैं। निम्नलिखित 8K ब्लॉक वाले डेटाबेस पर है

....

SQL> create table t23 (col1 varchar2(4000), col2 varchar2(4000))
  2  /

Table created.

SQL> create index t23_i on t23(col1,col2)
  2  /
create index t23_i on t23(col1,col2)
                      *
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded


SQL>

लेकिन इन सबसे ऊपर, कॉलम आकार त्रुटि जाँच का एक रूप है। यदि कॉलम को दस वर्ण लंबा माना जाता है और कुछ स्वायत्त प्रक्रिया एक हजार वर्णों को लोड करने का प्रयास कर रही है तो कुछ गलत है। प्रक्रिया विफल होनी चाहिए, इसलिए हम जांच कर सकते हैं कि हम डफ डेटा क्यों लोड कर रहे हैं। विकल्प कचरे से भरा एक डेटाबेस है, और अगर वह चाहता था तो हमें बस सभी को एक्सेल देना चाहिए था और इसके साथ किया था।

यह सच है कि कॉलम का आकार बदलना जब पता चलता है कि हमें कम करके आंका गया है तो यह थकाऊ हो सकता है। लेकिन यह बहुत बार नहीं होता है, और हम हार्ड-कोडिंग चर लंबाई के बजाय हमारे PL/SQL में %TYPE और SUBTYPE घोषणाओं का उपयोग करके बहुत सारे दर्द को कम कर सकते हैं।

नंबर अलग हैं। एक शुरुआत के लिए, किसी संख्या का अधिकतम आकार समतुल्य पाठ (गारंटीकृत सटीकता के 38 अंक) से बहुत छोटा होता है।

लेकिन मुख्य अंतर यह है कि Oracle संख्यात्मक मान में स्टोर करता है। वैज्ञानिक संकेतन इसलिए संख्या के अंकगणितीय आकार और उसके द्वारा उपयोग किए जाने वाले संग्रहण स्थान के बीच कोई सीधा संबंध नहीं है।

SQL> select vsize(123456789012345678901) n1
  2         , vsize(999999999999999999999999999999) n2
  3         , vsize(0.000000000000000000001) n3
  4         , vsize(1000000000000000000000000) n4
  5  from dual
  6  /

        N1         N2         N3         N4
---------- ---------- ---------- ----------
        12         16          2          2

SQL> 

फिर भी, जहां भी संभव हो, पैमाने और सटीकता को निर्दिष्ट करना अच्छा अभ्यास है, खासकर जब हम पूर्णांक, मान या धन के साथ काम कर रहे हों।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. खाली तालिका के MAX () को NULL के बजाय 0 के रूप में कैसे व्यवहार करें?

  2. मैं Oracle में PL/SQL तालिका प्रकार से CSV स्ट्रिंग कैसे लौटा सकता हूँ?

  3. Oracle फ़ंक्शन आधारित अनुक्रमणिका

  4. ORA-00997 के लिए समाधान:LONG डेटाटाइप का अवैध उपयोग

  5. नेस्टेड पाइपलाइन समारोह