PKG_NKW_DNT_STD.SPB
Source Package Body
Dynamic Trigger - Standard
create or replace package body pkg_nkw_dnt_std
timestamp '2006-07-07:10:10:10'
is
------------------------------------------------------------------
-- 2006 DataPRO Developers - m@urelio
------------------------------------------------------------------
-- Version: 2.0.2
------------------------------------------------------------------
-- Collections, Records, Variables, Constants, Exceptions, Cursors
------------------------------------------------------------------
------------------------------------------------------------------
----------------------- Private Section --------------------------
------------------------------------------------------------------
------------------------------------------------------------------
-- DATA_SORT
------------------------------------------------------------------
procedure data_sort
is
i binary_integer := 1;
j i%TYPE;
k i%TYPE;
lv_least varchar2(30) := rpad('z',30,'z');
begin
<< main_loop >>
while (gt_data.count > 0) loop
j := gt_data.first;
<< least_loop >>
while (j is not null) loop
lv_least := least(lv_least, gt_data(j).column_name);
j := gt_data.next(j);
end loop least_loop;
k := gt_data.first;
<< get_loop >>
while (k is not null) loop
if (lv_least = gt_data(k).column_name) then
gt_sort(i).column_id := k;
gt_sort(i).column_name := gt_data(k).column_name;
gt_sort(i).data_type := gt_data(k).data_type;
i := i + 1;
gt_data.delete(k);
lv_least := rpad('z',30,'z');
exit get_loop;
end if;
k := gt_data.next(k);
end loop get_loop;
end loop main_loop;
exception
when others then raise;
end data_sort;
------------------------------------------------------------------
------------------------ Public Section --------------------------
------------------------------------------------------------------
------------------------------------------------------------------
-- BUILD_STMT
------------------------------------------------------------------
procedure build_stmt(ft_data in gt_data%TYPE,
fv_stmt in out varchar2)
is
i binary_integer;
lv_type varchar2(30);
begin
gt_data := ft_data;
gt_sort.delete;
data_sort;
if (fv_stmt is not null) then
i := gt_sort.last;
while (i is not null) loop
if (upper(gt_sort(i).data_type) = 'DATE') then
lv_type := 'date_value';
elsif (upper(gt_sort(i).data_type) = 'NUMBER') then
lv_type := 'number_value';
elsif (upper(gt_sort(i).data_type) = 'VARCHAR2') then
lv_type := 'varchar2_value';
end if;
fv_stmt := replace(fv_stmt, ':old.' || lower(gt_sort(i).column_name),
'pkg_nkw_dnt.gt_old_data(' || gt_sort(i).column_id || ').' || lv_type);
fv_stmt := replace(fv_stmt, ':new.' || lower(gt_sort(i).column_name),
'pkg_nkw_dnt.gt_new_data(' || gt_sort(i).column_id || ').' || lv_type);
i := gt_sort.prior(i);
end loop;
end if;
exception
when others then
raise;
end build_stmt;
end pkg_nkw_dnt_std;
|