79

OracleでNUMBER型の列を作成する場合、精度またはスケールを指定しないオプションがあります。指定しない場合、これらのデフォルトは何をしますか?

4

6 に答える 6

46

NUMBER (精度、位取り)

精度が指定されていない場合、列には指定された値が格納されます。スケールが指定されていない場合、スケールはゼロです。

詳細については、次を参照してください。

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

于 2009-02-27T02:18:42.427 に答える
29

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 は、未指定の方法を使用して、挿入または更新された値を静かに丸めます。

于 2015-04-23T21:49:26.450 に答える
14

デフォルトの精度は38、デフォルトのスケールはゼロだと思います。ただし、この列のインスタンスの実際のサイズは動的です。値を格納するために必要なだけのスペース、つまり最大21バイトが必要になります。

于 2009-02-27T01:37:02.463 に答える
5

実際、いつでも自分でテストできます。

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';

于 2012-12-07T09:01:20.617 に答える