Search notes:

DBMS_RANDOM.NORMAL

dbms_random.normal returns pseudo random numbers whose distribution follows the normal distribution.
exec dbms_random.seed(2808);
 
create table tq84_normal as
select
   dbms_random.normal n
from
   dual connect by level <= 999999;
 
select
   substr(range, 3)                                                  band,
   to_char(100 * ratio_to_report(count(*)) over (), '90.00') || ' %' pct
from (
   select
      n,
      case                             --   Expected
                                       --   ========
         when n < -3 then 'a    - -3'  --     0.13 %
         when n < -2 then 'b -3 - -2'  --     2.14 %
         when n < -1 then 'c -2 - -1'  --    13.59 %
         when n <  0 then 'd -1 -  0'  --    34.13 %
         when n <  1 then 'e  0 -  1'  --    34.13 %
         when n <  2 then 'f  1 -  2'  --    13.59 %
         when n <  3 then 'g  2 -  3'  --     2.14 %
                     else 'h  3 -   '  --     0.13 %
      end                                                  range
   from
      tq84_normal
)
group by
   range
order by
   substr(range, 1, 1)
;
--
-- BAND    PCT     
-- ------- --------
--    - -3   0.14 %
-- -3 - -2   2.15 %
-- -2 - -1  13.60 %
-- -1 -  0  34.12 %
--  0 -  1  34.08 %
--  1 -  2  13.65 %
--  2 -  3   2.13 %
--  3 -      0.13 %

drop   table tq84_normal;

See also

Create a normal distribution with a given mean and a given value of a percentile
dbms_random
The R function rnorm.

Index