number型について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2016-3-23 16:55 | 最終変更
yuyunaing  半人前   投稿数: 7
number型を指定した列には、整数および浮動小数を含む数値を
格納できます。有効桁数の指定を省いた場合、最大38桁の
整数あるいは浮動小数を格納できる。と覚えたことがあります。

但し、numberを省いて作って、38桁数以上挿入してもデータを
作ることができています。それはどういうことでしょうか?

numberを38で指定した場合、38桁数以上は挿入できないですが、省いた場合はいくらでも挿入できていることが謎でした。
何か教えていただけないでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-3-23 17:22
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
但し、numberを省いて作って、38桁数以上挿入してもデータを
作ることができています。それはどういうことでしょうか?
イメージが湧かないのですが、テーブル定義とINSERT文の例をあげてもらってもいいですか?

ここに書いてあることとの関連性がいまいち見えないもので…
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05765-03/datatype.htm#17223
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-3-23 17:45
yuyunaing  半人前   投稿数: 7
たとえば、以下のテーブルを作ります。
create table test(num number);

insert into test values(11111111111111111111111111111111111111111111111111);
50桁の数を挿入しようとしています。挿入することができています。

最大の桁数は38桁ではないでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-3-23 19:58
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
insert into test values(11111111111111111111111111111111111111111111111111);
50桁の数を挿入しようとしています。挿入することができています。

最大の桁数は38桁ではないでしょうか?
あー、そういう意味ですね。

実際にやってみた結果を見てみましょう。
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> create table test(num number);

表が作成されました。

SQL> insert into test values(11111111111111111111111111111111111111111111111111);

1行が作成されました。

SQL> select * from test;

       NUM
----------
1.1111E+49
50桁の数字ですが、実際は「1.1111E+49」って形で格納されてますよね?
指数表記という形式なのですが、数値の格納の仕方がそのままではないんですよ
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-3-24 9:50
yuyunaing  半人前   投稿数: 7
すみません。何を言いたいかちょっと意味が分かりません。

SQL>
SQL> create table char_test(c_test char);

Table created.

SQL> insert into char_test values('11');
insert into char_test values('11')
*
ERROR at line 1:
ORA-12899: value too large for column "STUDY"."CHAR_TEST"."C_TEST" (actual: 2,
maximum: 1)

上記みたい、デフォルト値以上になるとcharの方は値が大きいため
エラーの表示をされるですが、numberの方にエラーにならない
ことが謎です。

日本語の理解が不足かわかりませんが
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-3-24 10:56
quensan  長老   投稿数: 119
arashi1977さんが貼ってくれたマニュアルにこう書いてあります。
-----------
NUMBERデータ型には、固定小数点数および浮動小数点数が格納されます。
事実上どんな大きさの数値でも格納可能です。
Oracle Databaseが稼働するシステムであれば、最大38桁の精度で、システム間の移植性が保証されています。
-----------

英語版の方が分かりやすいかもしれません。

https://docs.oracle.com/database/121/CNCPT/tablecls.htm#GUID-641EC6F7-F88E-4A59-968E-AD20B9531CBA

The database can store numbers of virtually any magnitude. This data is guaranteed to be portable among different operating systems running Oracle Database.

NUMBER(precision, scale)でprecision(精度)を指定する場合は、38が最大です。
指定しない場合はどんな大きな数字も格納できますが、値として保証されるのは38桁までということのようです。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-3-24 12:00
yuyunaing  半人前   投稿数: 7
ご説明ありがとうございます。

ーーーーーーーーーーーーーーーーーーーーー
The database can store numbers of virtually any magnitude. This data is guaranteed to be portable among different operating systems running Oracle Database.

NUMBER(precision, scale)でprecision(精度)を指定する場合は、38が最大です。
指定しない場合はどんな大きな数字も格納できますが、値として保証されるのは38桁までということのようです。
ーーーーーーーーーーーーーーーーーーーーー
そういうことですね。理解しました。
ありがとうございます。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.