OracleでNUMBER型の列を作成する場合、精度またはスケールを指定しないオプションがあります。指定しない場合、これらのデフォルトは何をしますか?
6 に答える
NUMBER (精度、位取り)
精度が指定されていない場合、列には指定された値が格納されます。スケールが指定されていない場合、スケールはゼロです。
詳細については、次を参照してください。
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
NUMBER
タイプはさまざまなスタイルで指定できます。
結果の精度 仕様 精度目盛 チェック コメント ―――――――――――――――――――――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――― NUMBER NULL NULL NO '最大範囲と精度' , 値は「与えられたとおり」に保存されます NUMBER(P, S) PS YES エラーコード: ORA-01438 NUMBER(P) P 0 YES エラーコード: ORA-01438 NUMBER(*, S) 38 S NO
ここで、精度は合計桁数であり、スケールは小数点の右側または左側 (負のスケール) の桁数です。
Oracle は ORA-01438 を次のように指定します。
この列に許可されている指定された精度より大きい値
表に示されているように、この整合性チェックは、精度が明示的に指定されている場合にのみアクティブになります。それ以外の場合、Oracle は、未指定の方法を使用して、挿入または更新された値を静かに丸めます。
デフォルトの精度は38、デフォルトのスケールはゼロだと思います。ただし、この列のインスタンスの実際のサイズは動的です。値を格納するために必要なだけのスペース、つまり最大21バイトが必要になります。
実際、いつでも自分でテストできます。
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';