Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

OracleのNUMBERデータ型についてまとめてます。

NUMBERは高精度な数値を扱うためのデータ型

NUMBERは、整数と小数を扱える数値型。Oracleで扱うことができます。

公式ドキュメントによると、事実上どんな大きさの数値でも格納可能となっています。最大精度は38桁。

参考)Oracle公式ドキュメント Oracleデータ型

NUMBER(3,0)という宣言は、整数部が3桁、小数部が0桁の指定になります。結果、小数点第一位で丸め処理がおこなわれ、3桁の整数となります。

create table tbl (s_no NUMBER(3,0) );

insert into tbl values ( 100.01 );

select * from tbl;
S_NO
-----
100

NUMBER(p,s)という宣言で、pは小数点以下を含んだ数値全体の桁数(最大38桁)、sは小数点以下の桁数を表します。

create table tbl2 (s_no NUMBER(10,3) );

insert into tbl2 values ( 123456.123456789012345670 );

select * from tbl2;
S_NO
-----
123456.123

insert into tbl2 values ( 1234567890.123456789012345670 );
ORA-01438: value larger than specified precision allowed for this column ORA-06512: at "SYS.DBMS_SQL", line 1721


公式ドキュメントでは、NUMBER (precision, scale) と表記されています。precisionは精度、scaleはスケール(小数点以下の桁数)です。

参考)Oracle公式ドキュメント Oracleデータ型

なお、宣言した桁に入りきらない大きな数をinsertしようとすると上記のエラーが出力されます。value larger than specified precision allowed for this column(この列に許容される指定精度より大きな値です)というエラーは、桁があふれてしまったことを示しています。

また、NUMBER(p,s)の指定でsが負の数だった場合、整数部のs桁で丸め処理をおこなう指定になります。たとえば、NUMBER(10,-3)と指定すると、全体の桁は10桁で、整数部3桁で丸めを行います。

123456.123450をinsertすると123000に丸められていることがわかります。

数値がどのように丸められるのか見てみましょう。

以下のSQLはテーブルtbl10をcreateし全体10桁、小数点以下2桁のカラムnumを指定します。小数点以下3桁で丸めが発生するため、insertした値はそれぞれ以下の値でテーブルに格納されます。

create table tbl10 (num NUMBER(10,2) );

insert into tbl10 values ( 100.99 );
insert into tbl10 values ( 90.551 );
insert into tbl10 values ( 88.556 );

select * from tbl10;

NUM
-----
90.55
88.56
100.99

NUMBER型のフォーマット

NUMBER型の数値は、TO_CHARにフォーマット指定をすることでカンマ区切りや0パディングなどの体裁を指定することが可能です。

select COUNTRY, TO_CHAR("1960", '999,999,999'),
TO_CHAR("1970", '999,999,999'),
TO_CHAR("1980", '999,999,999'),
TO_CHAR("1990", '999,999,999'),
TO_CHAR("2000", '999,999,999'),
TO_CHAR("2010", '999,999,999'),
TO_CHAR("2019", '999,999,999')
from WORLD.WORLD_POPULATION;

COUNTRY	TO_CHAR("1960",'999,999,999')	TO_CHAR("1970",'999,999,999')	TO_CHAR("1980",'999,999,999')	TO_CHAR("1990",'999,999,999')	TO_CHAR("2000",'999,999,999')	TO_CHAR("2010",'999,999,999')	TO_CHAR("2019",'999,999,999')
Bermuda	      44,400	      55,000	      54,670	      59,326	      61,833	      65,124	 - 
Bolivia	   3,353,125	   4,217,248	   5,368,901	   6,794,046	   8,495,271	  10,156,601	 - 
Brazil	  72,775,883	  96,060,361	 121,740,438	 149,648,341	 174,504,898	 195,210,154	 - 
Barbados	     230,858	     238,616	     248,784	     259,336	     267,190	     280,396	 - 
Brunei Darussalam	      81,817	     129,719	     193,049	     256,929	     331,801	     400,569	 - 
 :

TO_CHAR(NUMBER型の数値,フォーマットをあらわす文字列)のように指定すると、数値をカンマ区切りしたり0詰めすることができます。

REM カンマ区切り
select TO_CHAR( 1234, '9,999') from dual;
TO_CHAR(1234,'9,999')
----------
 1,234

REM 整数・小数点の桁数指定
select TO_CHAR( 12.1234, '999.99') from dual;
TO_CHAR(12.1234,'999.99')
----------
  12.12

REM 1以下の小数
select TO_CHAR( 0.1234, '999.99') from dual;
TO_CHAR(0.1234,'999.99')
    .12

REM 1以下の小数で整数部を0にする
select TO_CHAR( 0.1234, '990.99') from dual;
TO_CHAR(0.1234,'990.99')
----------
   0.12

REM プラスマイナス符号をつける(プラスの場合)
select TO_CHAR( 12.1234, 'S999.99') from dual;
TO_CHAR(12.1234,'S999.99')
----------
 +12.12

REM プラスマイナス符号をつける(マイナスの場合)
select TO_CHAR( -12.1234, 'S999.99') from dual;
TO_CHAR(-12.1234,'S999.99')
----------
 -12.12

まとめ

ポテパンダの一言メモ
  • NUMBERは38桁の精度で整数+小数を扱うことができるデータ型
  • NUMBER(p,s)という記述で、最大桁数と丸め処理する桁を指定する。pが負の場合は整数部で丸め処理をおこなう。
  • TO_CHAR関数にフォーマット指定を記述することで、NUMBER型のフォーマット整形が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。