Search notes:

Oracle SQL: math functions

power

create table tq84_power (n number);

insert into tq84_power values (-5  );
insert into tq84_power values (-3.2);
insert into tq84_power values ( 0  );
insert into tq84_power values (+2  );
insert into tq84_power values (+4.7);

begin

   for base     in (select n from tq84_power) loop
   for exponent in (select n from tq84_power) loop


       declare
         r number;
       begin
        
         r := power(base.n, exponent.n);

       exception when value_error then

       -- base and exponent can be any number, except
       --
       --   if base = 0 then exponent must not be negative
       --   if bsae < 0 then exponent must be integer

          dbms_output.put_line('base: ' || to_char(base.n, '99.00') || '   exponent: ' || to_char(exponent.n, '99.00'));

       end;

   end loop; end loop;


end;
/

drop table tq84_power purge;
Github repository Oracle-Patterns, path: /SQL/functions/math/power.sql

width_bucket

create table tq84_hist (
   v  number
);


insert into tq84_hist
select * from table(sys.dbms_debug_vc2coll(
--  0-6  7-13  14-20  21-27  28-34  35-41  42-48  49-55
--  ---  ----  -----  -----  -----  -----  -----  -----
                  16,
                  20,           29,
                  17,    27,    28,
                  19,    21,    34,
      3,          14,    26,    33,    35,    44,
      1,   11,    14,    21,    29,    38,    43,    55,
      4,   12,    18,    22,    32,    35,    48,    50
));

-- select * from tq84_hist;


column bucket format a10
column s      format 99

select
  ( bucket_no    * 7    ) || '-' ||
  ((bucket_no+1) * 7 -1 )            bucket,
    sum(1)     s
from (
  select
    width_bucket(v, 0, 56, 8)  bucket_no
  from
    tq84_hist
)
group by bucket_no
order by bucket_no
;
-- 
-- BUCKET       S
-- ---------- ---
-- 7-13         3
-- 14-20        2
-- 21-27        7
-- 28-34        5
-- 35-41        6
-- 42-48        3
-- 49-55        3
-- 56-62        2


column t format a10

select
  ( bucket_no    * 7    ) || '-' ||
  ((bucket_no+1) * 7 -1 )            bucket,
   lpad('o', sum(1), 'o')    t
from (
  select
    width_bucket(v, 0, 56, 8)  bucket_no
  from
    tq84_hist
)
group by bucket_no
order by bucket_no
;
-- 
-- BUCKET     T
-- ---------- ----------
-- 7-13       ooo
-- 14-20      oo
-- 21-27      ooooooo
-- 28-34      ooooo
-- 35-41      oooooo
-- 42-48      ooo
-- 49-55      ooo
-- 56-62      oo

drop table tq84_hist purge;
Github repository Oracle-Patterns, path: /SQL/functions/math/width_bucket.sql

Index