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

PLSQL में वास्तविक डेटाटाइप

SQL भाषा संदर्भ कहते हैं "वास्तविक डेटा प्रकार 63, या 18 दशमलव की बाइनरी परिशुद्धता के साथ एक फ़्लोटिंग-पॉइंट नंबर है", और इसे FLOAT (63) के रूप में दिखाया गया है। और FLOAT [(p)] है:

यदि आप एक वास्तविक स्तंभ के साथ एक तालिका बनाते हैं तो वह एक फ्लोट (63) की तरह व्यवहार करता है:

create table t42 (a real, b float(126), c float(63), d number);
insert into t42 (a, b, c, d)
values (123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456,
  123456789123456789123456789123456789123456789123456);

select a, b, c, d from t42;

                                                               A
----------------------------------------------------------------
                                                               B
----------------------------------------------------------------
                                                               C
----------------------------------------------------------------
                                                               D
----------------------------------------------------------------
             123456789123456789100000000000000000000000000000000 
             123456789123456789123456789123456789120000000000000 
             123456789123456789100000000000000000000000000000000 
             123456789123456789123456789123456789123000000000000

मैंने एक छोटे मान का उपयोग किया है, इसलिए इसे numformat के लिए 49 अंकों की SQL*Plus/SQL डेवलपर सीमा के भीतर प्रदर्शित किया जा सकता है। ध्यान दें कि FLOAT(126) और NUMBER मान उस मान के साथ बिल्कुल समान नहीं हैं।

पीएल/एसक्यूएल थोड़ा अलग है। मानक पैकेज में आप देख सकते हैं:

  type NUMBER is NUMBER_BASE;
  subtype FLOAT is NUMBER; -- NUMBER(126)
  subtype REAL is FLOAT; -- FLOAT(63)

PL/SQL में अपने REAL . को ब्लॉक करें वैरिएबल कोई भी मान ले सकता है जो एक अप्रतिबंधित NUMBER . है एक ही पैमाने/सटीक प्रभाव कर सकते हैं और हो सकते हैं; इस मामले में केवल सबसे महत्वपूर्ण (38- को संरक्षित करना) 40) अंक, और बाकी को उन पहले 40 अंकों में से कम से कम में गोल करना। आपके मूल्य का समग्र 'आकार', एक 72-अंकीय संख्या के रूप में, संरक्षित है, लेकिन आप Oracle के आंतरिक स्वरूप में संग्रहीत की जा सकने वाली सटीकता से परे सटीकता खो देते हैं। यदि आपके पास तालिका उदाहरण के समान चर प्रकार हैं और अपने मूल मान इसमें रखें:

DECLARE
  A REAL := 123456789123456789123456789123456789123456789123456789123456789123456789;
  B FLOAT(126) := 123456789123456789123456789123456789123456789123456789123456789123456789;
  c FLOAT(63) := 123456789123456789123456789123456789123456789123456789123456789123456789;
  D NUMBER := 123456789123456789123456789123456789123456789123456789123456789123456789;
BEGIN
  DBMS_OUTPUT.PUT_LINE('A Value is : ' || A);
  DBMS_OUTPUT.PUT_LINE('B Value is : ' || B);
  DBMS_OUTPUT.PUT_LINE('C Value is : ' || C);
  DBMS_OUTPUT.PUT_LINE('D Value is : ' || D);
END;
/

A Value is : 123456789123456789123456789123456789123500000000000000000000000000000000
B Value is : 123456789123456789123456789123456789120000000000000000000000000000000000
C Value is : 123456789123456789100000000000000000000000000000000000000000000000000000
D Value is : 123456789123456789123456789123456789123500000000000000000000000000000000

इस बार ध्यान दें कि अप्रतिबंधित FLOAT और NUMBER समान मान दिखाते हैं, जबकि प्रतिबंधित FLOAT में वह सटीकता होती है जिसकी आप अपेक्षा करते हैं।

तो यह 40वें अंक के बाद शून्य दिखा रहा है और 40 वां अंक 4 के बजाय 5 है क्योंकि आपने सटीकता को पार कर लिया है और मान को सबसे महत्वपूर्ण अंकों में गोल किया जा रहा है। SQL REAL डेटा प्रकार में 63 बाइनरी या 18 दशमलव अंकों की सटीकता होती है; लेकिन जब तक निर्दिष्ट नहीं किया जाता है कि कोई PL/SQL REAL NUMBER से मेल खाता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException:कॉल में अमान्य तर्क

  2. Oracle SQL में एक सबक्वेरी के साथ डेटा अपडेट करने के 5 तरीके

  3. ORACLE/ASP.NET:ORA-2020 - बहुत अधिक डेटाबेस लिंक... इसका क्या कारण है?

  4. PLS-00103 Oracle संग्रहीत कार्यविधि त्रुटि

  5. क्या Oracle का ORA_HASH यादृच्छिक है?