Oracleで数のデフォルト精度とスケールとは何ですか?
-
09-09-2019 - |
質問
、あなたは精度または位取りを指定しないオプションがあります。あなたがそれらを指定しない場合、これらのデフォルトは何をしますか?
解決
NUMBER(精度、スケール)
与えられた精度は、カラム格納値を指定されていない場合。スケールを指定しないと、スケールはゼロである。
で、より多くの情報:
http://download.oracle。 COM /ドキュメント/ CD / B28359_01 / server.111 / b28318 / datatype.htm#CNCPT1832する
他のヒント
NUMBER
タイプは異なるスタイルで指定することができます>
Resulting Resulting Precision Specification Precision Scale Check Comment ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― NUMBER NULL NULL NO 'maximum range and precision', values are stored 'as given' NUMBER(P, S) P S YES Error code: ORA-01438 NUMBER(P) P 0 YES Error code: ORA-01438 NUMBER(*, S) 38 S NO
の精度は、数字及び目盛りの総数が数である場合 小数点以下の桁右または左(負スケール)。
Oracleは、
として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
精度のためcentesimal桁、または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 Database 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