Introdução 

 SQL Scripts 

 Packages 

 Packages Body 
 pkg_nkw_exc 
 pkg_nkw_rpl 
 pkg_nkw_std 
 pkg_nkw_app 
 pkg_nkw_spm 
 pkg_nkw_hfs 
 pkg_nkw_sdv 
 pkg_nkw_sys 
 pkg_nkw_obj 
 pkg_nkw_grv 
 pkg_nkw_usr 
 pkg_nkw_cmm 
 pkg_nkw_hlp 
 pkg_nkw_dvp 
 pkg_nkw_dnt_std 
 pkg_nkw_dnt_dvies 
 pkg_nkw_dnt_ccvies 
 pkg_nkw_dnt_logies 
 pkg_nkw_dnt_eppc 
 pkg_nkw_dnt_eapb 
 pkg_nkw_dnt_drmies 
 pkg_nkw_dnt 
 pkg_nkw_drm 
 pkg_nkw_oim 
 pkg_nkw_aud 
 pkg_nkw_dpl 
 pkg_nkw_srw 

 Forms 6i 

 Reports 6i 

Linux

 Downloads 
PKG_NKW_DRM.SPB
Source Package Body
Gerenciamento de relacionamentos.
create or replace package body pkg_nkw_drm
timestamp '2006-07-07:10:10:10'
is
   ------------------------------------------------------------------
   -- 2006 DataPRO Developers - m@urelio
   ------------------------------------------------------------------
   -- Version: 2.0.2
   ------------------------------------------------------------------
   -- Collections, Records, Variables, Constants, Exceptions, Cursors
   ------------------------------------------------------------------
   type rec_relations is record(dml_table	   nkw_drm.dml_table%TYPE,
				relational_table   nkw_drm.relational_table%TYPE,
				dml_action	   nkw_drm.dml_action%TYPE,
				raise_when	   nkw_drm.raise_when%TYPE,
				assertion_message  nkw_drm.assertion_message%TYPE,
				text		   nkw_drm.text%TYPE,
				stmt		   pkg_nkw_env.gv_plchar%TYPE);
   type tab_relations is table of rec_relations index by binary_integer;
   gt_relations   tab_relations;
   gv_lru_object  sys.obj$.name%TYPE;
   gv_stmt	 constant pkg_nkw_env.gv_plchar%TYPE :=
      'begin ' || chr(10) ||
      '   declare cursor drm_cur is ' || chr(10) ||
      ' 	  select 1 ' || chr(10) ||
      ' 	    from #TABLE# ' || chr(10) ||
      ' 		 #TEXT#;' || chr(10) ||
      ' 	  bv_bit number(1); ' || chr(10) ||
      ' 	bv_found varchar2(10) := ''?''; ' || chr(10) ||
      '        bv_raisew varchar2(10) := ''#RAISE_WHEN#'';' || chr(10) ||
      '       bv_message pkg_nkw_env.gv_char%TYPE := ''#MESSAGE#.|'';' || chr(10) ||
      '   begin ' || chr(10) ||
      '      if (not drm_cur%ISOPEN) then ' || chr(10) ||
      ' 	open drm_cur; ' || chr(10) ||
      '      end if; ' || chr(10) ||
      ' 	fetch drm_cur into bv_bit; ' || chr(10) ||
      ' 	if (drm_cur%FOUND) then ' || chr(10) ||
      ' 	   bv_found := ''FOUND''; ' || chr(10) ||
      ' 	elsif (drm_cur%NOTFOUND) then ' || chr(10) ||
      ' 	   bv_found := ''NOT FOUND''; ' || chr(10) ||
      ' 	end if; ' || chr(10) ||
      '      if (drm_cur%ISOPEN) then ' || chr(10) ||
      ' 	close drm_cur; ' || chr(10) ||
      '      end if; ' || chr(10) ||
      '      if (bv_found = bv_raisew) then ' || chr(10) ||
      ' 	raise_application_error(-20000, bv_message); ' || chr(10) ||
      '      end if; ' || chr(10) ||
      '   end; ' || chr(10) ||
      '   exception ' || chr(10) ||
      '      when others then raise;' || chr(10) ||
      'end;';
   ------------------------------------------------------------------
   ----------------------- Private Section --------------------------
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   -- BIND_STMT
   ------------------------------------------------------------------
   function bind_stmt(fv_text in pkg_nkw_env.gv_plchar%TYPE)
      return pkg_nkw_env.gv_plchar%TYPE
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.REPLACE_TEXT' || chr(10);
      retval   pkg_nkw_env.gv_plchar%TYPE := fv_text;
      i        binary_integer;
   begin
      if (retval is not null) then
	 i := pkg_nkw_drm.gt_data.first;
	 while (i is not null) loop
	    if (upper(pkg_nkw_drm.gt_data(i).data_type) = 'DATE') then
	       retval := replace(retval, ':drm.' || lower(pkg_nkw_drm.gt_data(i).column_name),
						   'pkg_nkw_drm.gt_data(' || to_char(i) || ').date_value');
	    elsif (upper(pkg_nkw_drm.gt_data(i).data_type) = 'NUMBER') then
	       retval := replace(retval, ':drm.' || lower(pkg_nkw_drm.gt_data(i).column_name),
						   'pkg_nkw_drm.gt_data(' || to_char(i) || ').number_value');
	    elsif (upper(pkg_nkw_drm.gt_data(i).data_type) = 'VARCHAR2') then
	       retval := replace(retval, ':drm.' || lower(pkg_nkw_drm.gt_data(i).column_name),
						   'pkg_nkw_drm.gt_data(' || to_char(i) || ').varchar2_value');
	    end if;
	    i := pkg_nkw_drm.gt_data.next(i);
	 end loop;
      end if;
      return retval;
      exception
	 when others then
	    raise_application_error(-20000, lv_scope || sqlerrm);
   end bind_stmt;
   ------------------------------------------------------------------
   -- POP_COLUMNS
   ------------------------------------------------------------------
   procedure pop_columns
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.POP_COLUMNS' || chr(10);
   begin
      gt_data.delete;
      gt_data := pkg_nkw_obj.get_columns(gv_object);
      exception
	 when others then
	    raise_application_error(-20000, lv_scope || sqlerrm);
   end pop_columns;
   ------------------------------------------------------------------
   -- CHECK_DRM
   ------------------------------------------------------------------
   procedure check_drm
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.CHECK_DRM' || chr(10);
   begin
      if (nvl(gt_data.count,0) = 0) then
	 raise_application_error(-20000, lv_scope || 'None DRM initialization.|');
      end if;
   end check_drm;
   ------------------------------------------------------------------
   -- BIND_DATATYPE
   ------------------------------------------------------------------
   procedure bind_datatype(pv_column	     in varchar2,
			   pv_data_type      in varchar2,
			   pv_date_value     in date	 := null,
			   pv_number_value   in number	 := null,
			   pv_varchar2_value in varchar2 := null)
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.BIND_DATATYPE' || chr(10);
      lv_col#  sys.col$.col#%TYPE;
   begin
      check_drm;
      if (pv_column is null) then
	 raise_application_error(-20000, lv_scope || 'Missing column name.|');
      end if;
      if (nvl(pkg_nkw_obj.index_of(gt_data, pv_column),0) = 0) then
	 raise_application_error(-20000, lv_scope ||
				 'Column ' || upper(gv_object) || '.' || upper(pv_column) || ' does not exists.|');
      end if;
      begin
	 lv_col# := pkg_nkw_obj.index_of(gt_data, pv_column);
	 if (upper(pv_data_type) = 'DATE') then
	    gt_data(lv_col#).date_value := pv_date_value;
	 elsif (upper(pv_data_type) = 'NUMBER') then
	    gt_data(lv_col#).number_value := pv_number_value;
	 elsif (upper(pv_data_type) = 'VARCHAR2') then
	    gt_data(lv_col#).varchar2_value := pv_varchar2_value;
	 end if;
	 exception
	    when others then
	       raise_application_error(-20000, lv_scope || sqlerrm);
      end;
      exception
	 when others then raise;
   end bind_datatype;
   ------------------------------------------------------------------
   -- LOG_DRM
   ------------------------------------------------------------------
   procedure log_drm(fv_buffer in pkg_nkw_env.gv_plchar%TYPE)
   is
   begin
      pkg_nkw_hfs.fwrite(fv_buffer);
      exception
	 when others then null;
   end log_drm;
   ------------------------------------------------------------------
   ------------------------ Public Section --------------------------
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   -- POP_DRMIES
   ------------------------------------------------------------------
   procedure pop_drmies
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.POP_DRMIES' || chr(10);
      lv_text  pkg_nkw_env.gv_plchar%TYPE;
      lv_stmt  pkg_nkw_env.gv_plchar%TYPE;
      i        binary_integer := 1;
   begin
      gt_relations.delete;
      begin
	 declare cursor get_cur is
		 select a.dml_table, a.relational_table, a.relid, a.dml_action,
			a.raise_when, a.assertion_message, a.text
		   from nkw_drm a
		  where (a.dml_table = upper(gv_object))
		    and (a.relid > 0)
		  order by a.relid;
		get_row get_cur%ROWTYPE;
	 begin
	    if (not get_cur%ISOPEN) then
	       open get_cur;
	    end if;
	    << get_loop >>
	    loop
	       fetch get_cur into get_row;
	       exit get_loop when (get_cur%NOTFOUND);
	       lv_stmt := gv_stmt;
	       gt_relations(i).dml_table := get_row.dml_table;
	       gt_relations(i).relational_table := get_row.relational_table;
	       gt_relations(i).dml_action := get_row.dml_action;
	       gt_relations(i).raise_when := get_row.raise_when;
	       gt_relations(i).assertion_message := get_row.assertion_message;
		  lv_text := bind_stmt(get_row.text);
	       gt_relations(i).text := lv_text;
		  lv_stmt := replace(lv_stmt, '#TABLE#', lower(get_row.relational_table));
		  lv_stmt := replace(lv_stmt, '#TEXT#', lv_text);
		  lv_stmt := replace(lv_stmt, '#RAISE_WHEN#', get_row.raise_when);
		  lv_stmt := replace(lv_stmt, '#MESSAGE#', get_row.assertion_message);
	       gt_relations(i).stmt := lv_stmt;
	       i := (i + 1);
	    end loop get_loop;
	    if (get_cur%ISOPEN) then
	       close get_cur;
	    end if;
	 end;
      end;
      exception
	 when others then
	    raise_application_error(-20000, lv_scope || sqlerrm);
   end pop_drmies;
   ------------------------------------------------------------------
   -- INIT_DRM
   ------------------------------------------------------------------
   procedure init_drm(fv_object in varchar2)
   is
      lv_scope constant pkg_nkw_env.gv_shout%TYPE := pkg_nkw_env.gv_shout ||
						    'PKG_NKW_DRM.INIT_DRM' || chr(10);
   begin
      if (not pkg_nkw_sys.is_table(fv_object)) then
	 raise_application_error(-20000, lv_scope ||
				 'Table or View ' || upper(fv_object) || ' does not exists.|');
      end if;
      if (upper(nvl(fv_object,'-')) <> nvl(gv_lru_object,'+')) then
	 gv_object := upper(fv_object);
	 pop_columns;
	 pop_drmies;
	 gv_lru_object := upper(fv_object);
      end if;
      exception
	 when others then raise;
   end init_drm;
   ------------------------------------------------------------------
   -- BIND_COLUMN
   ------------------------------------------------------------------
   procedure bind_column(fv_column in varchar2, fv_value in date)
   is
   begin
      bind_datatype(pv_column	  => fv_column,
		    pv_data_type  => 'DATE',
		    pv_date_value => fv_value);
      exception
	 when others then raise;
   end bind_column;
   ------------------------------------------------------------------
   procedure bind_column(fv_column in varchar2, fv_value in number)
   is
   begin
      bind_datatype(pv_column	    => fv_column,
		    pv_data_type    => 'NUMBER',
		    pv_number_value => fv_value);
      exception
	 when others then raise;
   end bind_column;
   ------------------------------------------------------------------
   procedure bind_column(fv_column in varchar2, fv_value in varchar2)
   is
   begin
      bind_datatype(pv_column	      => fv_column,
		    pv_data_type      => 'VARCHAR2',
		    pv_varchar2_value => fv_value);
      exception
	 when others then raise;
   end bind_column;
   ------------------------------------------------------------------
   -- PARSE_DRM
   ------------------------------------------------------------------
   procedure parse_drm(fv_action in varchar2)
   is
      i binary_integer;
   begin
      i := gt_relations.first;
      while (i is not null) loop
	 if (upper(fv_action) = 'INSERT') then
	    if (upper(gt_relations(i).dml_action) = 'INSERT') then
	       log_drm(gt_relations(i).stmt);
	       pkg_nkw_rpl.run_code(gt_relations(i).stmt);
	    end if;
	 elsif (upper(fv_action) = 'UPDATE') then
	    if (upper(gt_relations(i).dml_action) = 'UPDATE') then
	       log_drm(gt_relations(i).stmt);
	       pkg_nkw_rpl.run_code(gt_relations(i).stmt);
	    end if;
	 elsif (upper(fv_action) = 'DELETE') then
	    if (upper(gt_relations(i).dml_action) = 'DELETE') then
	       log_drm(gt_relations(i).stmt);
	       pkg_nkw_rpl.run_code(gt_relations(i).stmt);
	    end if;
	 end if;
	 i := gt_relations.next(i);
      end loop;
      exception
	 when others then raise;
   end parse_drm;
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   -- GET_DATA
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   function get_data return gt_data%TYPE
   is
   begin
      return gt_data;
      exception
	 when others then raise;
   end get_data;
end pkg_nkw_drm;
© 2017 DataPRO Developers