Function returning current APEX version
create or replace function orclapex_version return number is
vr number;
begin
select to_number(substr(version_no, 1, instr(version_no, '.', 1, 2) - 1))
into vr
from apex_release;
return vr;
end;
create or replace procedure compile_conditional_compilation_version_package_for (
p_product_name in varchar2,
p_product_version_function in varchar2,
p_min_version_number in integer,
p_max_release_number in integer,
p_send_to_screen in boolean default false
) is
vr number;
v number;
r number;
blk varchar(4000);
procedure get_version_and_release is
l_first_period integer;
begin
execute immediate 'begin :vr := '
|| p_product_version_function
|| '; end;'
using out vr;
l_first_period := instr(vr, '.', 1, 1);
v := to_number(substr(vr, 1, l_first_period - 1));
r := to_number(substr(vr, l_first_period + 1, l_first_period - 2));
end;
procedure add_line (
p_line in varchar2
) is
begin
blk := blk
||
case
when blk is not null then
chr(10)
end
|| p_line;
end;
function add_bool (
p_current_version in number,
p_a_version in number
) return varchar2 is
begin
return
case
when p_current_version <= p_a_version then
'true'
else 'false'
end;
end;
begin
get_version_and_release;
add_line(
'create or replace package '
|| p_product_name
|| '_version authid definer is
version constant pls_integer := '
|| v
|| '; release constant pls_integer := '
|| r
|| '; '
);
for vn in p_min_version_number..v loop
add_line('ver_le_'
|| vn
|| ' constant boolean := '
|| add_bool(trunc(vr), vn)
|| ';');
for rn in 1..p_max_release_number loop
add_line('ver_le_'
|| vn
|| '_'
|| rn
|| ' constant boolean := '
|| add_bool(vr, vn +(rn / 10))
|| ';');
end loop;
end loop;
add_line(' end;');
if p_send_to_screen then
dbms_output.put_line(blk);
end if;
execute immediate blk;
end;
begin
compile_conditional_compilation_version_package_for(
p_product_name => 'oracle_apex',
p_product_version_function => 'orclapex_version',
p_min_version_number => 18,
p_max_release_number => 2,
p_send_to_screen => true
);
end;