RosettaCodeData/Task/Ethiopian-multiplication/PL-SQL/ethiopian-multiplication.sql

59 lines
1022 B
SQL

create or replace package ethiopian is
function multiply
( left in integer,
right in integer)
return integer;
end ethiopian;
/
create or replace package body ethiopian is
function is_even(item in integer) return boolean is
begin
return item mod 2 = 0;
end is_even;
function double(item in integer) return integer is
begin
return item * 2;
end double;
function half(item in integer) return integer is
begin
return trunc(item / 2);
end half;
function multiply
( left in integer,
right in integer)
return Integer
is
temp integer := 0;
plier integer := left;
plicand integer := right;
begin
loop
if not is_even(plier) then
temp := temp + plicand;
end if;
exit when plier <= 1;
plier := half(plier);
plicand := double(plicand);
end loop;
return temp;
end multiply;
end ethiopian;
/
/* example call */
begin
dbms_output.put_line(ethiopian.multiply(17, 34));
end;
/