質問

OracleでNUMBER型の列を作成する場合は、

、あなたは精度または位取りを指定しないオプションがあります。あなたがそれらを指定しない場合、これらのデフォルトは何をしますか?

役に立ちましたか?

解決

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ことで、ここでOraclecentesimal 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    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top