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

न्यूल कॉलम के साथ संख्यात्मक अतिप्रवाह (0,3)

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

पहला बाइट एक्सपोनेंट है, और यह - बस - शून्य हो सकता है, लेकिन इसके बाद केवल 3 के साथ नहीं। मुझे लगता है कि आप जो निकटतम प्राप्त कर सकते हैं वह है 0,3,102 -9.8*x10^125

. के लिए

दस्तावेज़ों से :

तो आइए देखें कि अंतिम छोर पर कुछ कैसे संग्रहीत किए जाते हैं:

with t (n) as (
            select  1 * power(10, -130) from dual
  union all select  1 * power(10, 125) from dual
  union all select -1 * power(10, -130) from dual
  union all select -1 * power(10, 125) from dual
  union all select -9.7 * power(10, 125) from dual
  union all select -9.8 * power(10, 125) from dual
  union all select -9.85 * power(10, 125) from dual
  union all select -9.9 * power(10, 125) from dual
)
select n, dump(n) d1, dump(n, 1016) d2 from t

          N D1                             D2
----------- ------------------------------ ------------------------------
 1.000E-130 Typ=2 Len=2: 128,2             Typ=2 Len=2: 80,2
 1.000E+125 Typ=2 Len=2: 255,11            Typ=2 Len=2: ff,b
-1.000E-130 Typ=2 Len=3: 127,100,102       Typ=2 Len=3: 7f,64,66
-1.000E+125 Typ=2 Len=3: 0,91,102          Typ=2 Len=3: 0,5b,66
-9.700E+125 Typ=2 Len=3: 0,4,102           Typ=2 Len=3: 0,4,66
-9.800E+125 Typ=2 Len=3: 0,3,102           Typ=2 Len=3: 0,3,66
-9.850E+125 Typ=2 Len=4: 0,3,51,102        Typ=2 Len=4: 0,3,33,66
-9.900E+125 Typ=2 Len=3: 0,2,102           Typ=2 Len=3: 0,2,66
select  1 * power(10, 126) from dual;

ORA-01426: numeric overflow

आपका डंप किया गया मान 0,3 . है अंत में 102 नहीं है जो ऋणात्मक संख्या को दर्शाता है, लेकिन यदि यह सकारात्मक था तो पहली बाइट कम से कम 128 होगी।

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

यह अजीब है कि SQL डेवलपर परिणाम ग्रिड में शून्य दिखाता है (यदि आप एक स्क्रिप्ट के रूप में क्वेरी करते हैं तो यह निरस्त लगता है); एसक्यूएल * प्लस में यह कोई मूल्य नहीं दिखाता है, भले ही आप set null एक निश्चित स्ट्रिंग के लिए। SQL डेवलपर, या JDBC ड्राइवर, आंतरिक प्रतिनिधित्व से कनवर्ट करने में असमर्थता को चुपचाप निगल सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं Oracle SQL क्वेरी में त्रुटि की स्थिति कैसे प्राप्त कर सकता हूं?

  2. खराब हाइबरनेट सीधे चलने की तुलना में प्रदर्शन का चयन करें - कैसे डिबग?

  3. ओरेकल सिंटैक्स उदाहरणों में शामिल हों

  4. पायथन cx_Oracle ने qmark के साथ स्टेटमेंट तैयार किया

  5. टाइमस्टैम्प में दिन जोड़ें