ما هو الدقة الافتراضية والحجم لعدد في أوراكل؟
-
09-09-2019 - |
سؤال
عند إنشاء عمود رقم من النوع في Oracle، لديك خيار عدم تحديد الدقة أو مقياس. ماذا تفعل هذه الافتراضي إذا كنت لا تحددها؟
المحلول
رقم (الدقة، مقياس)
إذا لم يتم تحديد الدقة، فإن العمود يخزن القيم كما هو الحال. إذا لم يتم تحديد مقياس، فإن الحجم صفر.
الكثير معلومات أكثر في:
http://download.oracle.com/docs/cd/b28359_01/server.111/b28318/datatype.htm#cncpt1832.
نصائح أخرى
ال NUMBER
يمكن تحديد نوع في أنماط مختلفة:
الناتجة الناتجة الناتجة الدقة المواصفات الدقة مقياس الشيك تعليق ------------------------------------------ ------------------------------------- رقم null null no 'أقصى مدى و الاحكام'، يتم تخزين القيم 'كما معطى'رقم (P، S) رمز الخطأ نعم: رقم ORA-01438 (P) P 0 YES رمز الخطأ: ORA-01438 رقم (*، S) 38 S
حيث الدقة هو إجمالي عدد الأرقام والمقياس هو عدد الأرقام الصحيحة أو اليسار (الحجم السلبي) من النقطة العشرية.
تقوم أوراكل بتحديد ORA-01438
القيمة أكبر من الدقة المحددة المسموح بها لهذا العمود
كما لوحظ في الجدول، فإن فحص النزاهة هذا نشط فقط إذا تم تحديد الدقة بشكل صريح. وإلا تقريب Oracle بصمت القيمة المدرجة أو المحدثة باستخدام بعض الأسلوب غير المحدد.
أعتقد أن الدقة الافتراضية هي 38، مقياس الافتراضي هو صفر. لكن الحجم الفعلي لمثيل هذا العمود، ديناميكي. سيستغرق الأمر مساحة أقل حسب الحاجة لتخزين القيمة أو ماكس 21 بايت.
Oracle
أرقام المتاجر بالطريقة التالية: 1 byte
على السلطة، 1 byte
لأول رقم هارماني (أي واحد قبل الفاصل)، والباقي للأرقام الأخرى.
بواسطة digits
هنا Oracle
يعني centesimal digits
(بمعنى آخر base 100
)
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
2 /
INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
ORA-01426: numeric overflow
SQL> SELECT DUMP(num) FROM t_numtest;
DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79
كما نرى، الرقم الأقصى هنا هو 7.(7) * 10^124
, ، ولديه 19
الأرقام المائة للدقة، أو 38
أرقام عشرية.
في الواقع، يمكنك دائما اختبارها بنفسك.
CREATE TABLE CUSTOMERS
(
CUSTOMER_ID NUMBER NOT NULL,
JOIN_DATE DATE NOT NULL,
CUSTOMER_STATUS VARCHAR2(8) NOT NULL,
CUSTOMER_NAME VARCHAR2(20) NOT NULL,
CREDITRATING VARCHAR2(10)
)
;
select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS';
أتوسع في إجابة الأطياف حتى لا يتعين على الناس تجربتها لأنفسهم.
تم ذلك على إصدار قاعدة بيانات Oracle 11G Express Edition 11.2.0.2.0 - الإنتاج.
CREATE TABLE CUSTOMERS
(
CUSTOMER_ID NUMBER NOT NULL,
FOO FLOAT NOT NULL,
JOIN_DATE DATE NOT NULL,
CUSTOMER_STATUS VARCHAR2(8) NOT NULL,
CUSTOMER_NAME VARCHAR2(20) NOT NULL,
CREDITRATING VARCHAR2(10)
);
select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS';
الذي يحصد
COLUMN_NAME DATA_TYPE NULLABLE DATA_LENGTH DATA_PRECISION DATA_SCALE
CUSTOMER_ID NUMBER N 22
FOO FLOAT N 22 126
JOIN_DATE DATE N 7
CUSTOMER_STATUS VARCHAR2 N 8
CUSTOMER_NAME VARCHAR2 N 20
CREDITRATING VARCHAR2 Y 10