number型について
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
number型について
msg# 1
yuyunaing
投稿数: 7
number型を指定した列には、整数および浮動小数を含む数値を
格納できます。有効桁数の指定を省いた場合、最大38桁の
整数あるいは浮動小数を格納できる。と覚えたことがあります。
但し、numberを省いて作って、38桁数以上挿入してもデータを
作ることができています。それはどういうことでしょうか?
numberを38で指定した場合、38桁数以上は挿入できないですが、省いた場合はいくらでも挿入できていることが謎でした。
何か教えていただけないでしょうか?
格納できます。有効桁数の指定を省いた場合、最大38桁の
整数あるいは浮動小数を格納できる。と覚えたことがあります。
但し、numberを省いて作って、38桁数以上挿入してもデータを
作ることができています。それはどういうことでしょうか?
numberを38で指定した場合、38桁数以上は挿入できないですが、省いた場合はいくらでも挿入できていることが謎でした。
何か教えていただけないでしょうか?
Re: number型について
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
引用:イメージが湧かないのですが、テーブル定義とINSERT文の例をあげてもらってもいいですか?
ここに書いてあることとの関連性がいまいち見えないもので…
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05765-03/datatype.htm#17223
但し、numberを省いて作って、38桁数以上挿入してもデータを
作ることができています。それはどういうことでしょうか?
ここに書いてあることとの関連性がいまいち見えないもので…
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05765-03/datatype.htm#17223
Re: number型について
msg# 1.2
yuyunaing
投稿数: 7
たとえば、以下のテーブルを作ります。
create table test(num number);
insert into test values(11111111111111111111111111111111111111111111111111);
50桁の数を挿入しようとしています。挿入することができています。
最大の桁数は38桁ではないでしょうか?
create table test(num number);
insert into test values(11111111111111111111111111111111111111111111111111);
50桁の数を挿入しようとしています。挿入することができています。
最大の桁数は38桁ではないでしょうか?
Re: number型について
msg# 1.2.1
arashi1977
居住地: 広島
投稿数: 1715
引用:あー、そういう意味ですね。
実際にやってみた結果を見てみましょう。
50桁の数字ですが、実際は「1.1111E+49」って形で格納されてますよね?
指数表記という形式なのですが、数値の格納の仕方がそのままではないんですよ
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
指数表記という形式なのですが、数値の格納の仕方がそのままではないんですよ
Re: number型について
msg# 1.3
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の方にエラーにならない
ことが謎です。
日本語の理解が不足かわかりませんが
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の方にエラーにならない
ことが謎です。
日本語の理解が不足かわかりませんが
Re: number型について
msg# 1.3.1
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桁までということのようです。
-----------
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桁までということのようです。
Re: number型について
msg# 1.4
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桁までということのようです。
ーーーーーーーーーーーーーーーーーーーーー
そういうことですね。理解しました。
ありがとうございます。
ーーーーーーーーーーーーーーーーーーーーー
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桁までということのようです。
ーーーーーーーーーーーーーーーーーーーーー
そういうことですね。理解しました。
ありがとうございます。