Search notes:

Oracle data type: NUMBER

create table tq84_number (
    num          number,
    num_1        number(1   ),
    num_5_3      number(5, 3),
    num_star_3   number(*, 3)
);

insert into tq84_number values (    1     ,      1   ,    1     ,    1     );
insert into tq84_number values (    9     ,      9   ,    9     ,    9     );
insert into tq84_number values (   -9     ,     -9   ,   -9     ,   -9     );
insert into tq84_number values (   10     , null     ,   10     ,   10     );
insert into tq84_number values (    1.1   ,    1.1   ,    1.1   ,    1.1   );
insert into tq84_number values (   12.345 , null     ,   12.345 ,   12.345 );
insert into tq84_number values (    4.4444,    4.4444,    4.4444,    4.4444);
insert into tq84_number values (  555.5555, null     , null     ,  555.5555);

select * from tq84_number;

drop table tq84_number purge;
Github repository Oracle-Patterns, path: /SQL/datatypes/number/table.sql

Determine minimal required precision and scale

drop table tq84_num;

create table tq84_num (a number);

insert into tq84_num values (27.3);
insert into tq84_num values ( 0.3);
insert into tq84_num values (999 );
insert into tq84_num values (-1.123 );
insert into tq84_num values (-21.1234 );

with x as (
   select
      a,
      ceil(log(10,  abs(a)))              digits_left,
      length(abs(a) - trunc(abs(a))) -1   digits_right
   from
      tq84_num
)
select
    'number(' || (max(digits_left) + max(digits_right))  || ',' || max(digits_right)  || ')' minimal_num_format
from
   x;

drop table tq84_num_;

create table tq84_b (b number(7,4));

insert into tq84_num_ select a from tq84_num;

select * from tq84_num_ minus
select * from tq84_num;

See also

The SQL function to_number converts an expression into a value whose datatype is number.
In SQL*Plus, the two values of numformat and numwidth control how numbers are displayed and formatted.
number(38) is identical to integer.
datatypes

Index