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_STD.SPB
Source Package Body
Funções de usuários.
create or replace package body pkg_nkw_std
timestamp '2006-07-07:10:10:10'
is
   ------------------------------------------------------------------
   -- 2006 DataPRO Developers - m@urelio
   ------------------------------------------------------------------
   -- Version: 2.0.2
   ------------------------------------------------------------------
   -- Collections, Records, Variables, Constants, Exceptions, Cursors
   ------------------------------------------------------------------
   gv_split	pkg_nkw_env.gv_char%TYPE;
   type tab_split is table of gv_split%TYPE index by binary_integer;
   gt_split	tab_split;
   gv_bin_indx	constant varchar2(2) := '01';
   gv_bin_base	constant integer := length(gv_bin_indx);
   gv_bin_exp	constant integer := 32;
   gv_oct_indx	constant varchar2(8) := '01234567';
   gv_oct_base	constant integer := length(gv_oct_indx);
   gv_oct_exp	constant integer := 10;
   gv_hex_indx	constant varchar2(16) := '0123456789ABCDEF';
   gv_hex_base	constant integer := length(gv_hex_indx);
   gv_hex_exp	constant integer := 8;
   gv_asc_indx	constant varchar2(32) := '0123456789ABCDEFGHJKLNPQRSTUVXYZ';
   gv_asc_base	constant integer := length(gv_asc_indx);
   gv_asc_exp	constant integer := 32;
   ------------------------------------------------------------------
   ----------------------- Private Session --------------------------
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   ------------------------ Public Session --------------------------
   ------------------------------------------------------------------
   -- ON_RANGE
   ------------------------------------------------------------------
   function on_range(fv_date in date,
		     fv_low  in date,
		     fv_high in date)
      return integer
   is
      retval integer;
   begin
      if (fv_date between fv_low and fv_high) then
	 retval := 1;
      else
	 retval := 0;
      end if;
      return retval;
      exception
	 when others then raise;
   end on_range;
   ------------------------------------------------------------------
   function on_range(fv_number in number,
		     fv_low    in number,
		     fv_high   in number)
      return integer
   is
      retval integer;
   begin
      if (fv_number between fv_low and fv_high) then
	 retval := 1;
      else
	 retval := 0;
      end if;
      return retval;
      exception
	 when others then raise;
   end on_range;
   ------------------------------------------------------------------
   function on_range(fv_string in varchar2,
		     fv_low    in varchar2,
		     fv_high   in varchar2)
      return integer
   is
      retval integer;
   begin
      if (fv_string between fv_low and fv_high) then
	 retval := 1;
      else
	 retval := 0;
      end if;
      return retval;
      exception
	 when others then raise;
   end on_range;
   ------------------------------------------------------------------
   -- GET_MINUTES
   ------------------------------------------------------------------
   function get_minutes(fv_minutes in number) return number
   is
      retval number;
   begin
      if (fv_minutes is not null) then
	 retval := (trunc(fv_minutes, -2) * 0.60) +
		   (fv_minutes - trunc(fv_minutes, -2));
      end if;
      return retval;
      exception
	 when others then raise;
   end get_minutes;
   ------------------------------------------------------------------
   -- GET_HOURS
   ------------------------------------------------------------------
   function get_hours(fv_hours in number) return number
   is
      retval number;
   begin
      if (fv_hours is not null) then
	 retval := (trunc(fv_hours / 60) * 100) +
		   (fv_hours - (trunc(fv_hours / 60) * 60));
      end if;
      return retval;
      exception
	 when others then raise;
   end get_hours;
   ------------------------------------------------------------------
   -- FMT_INPUT
   ------------------------------------------------------------------
   function fmt_input(fv_minutes in number) return varchar2
   is
      retval varchar2(22) := ltrim(to_char(nvl(fv_minutes,0), '0000'));
   begin
      retval := substr(retval, 1, 2) || ':' || substr(retval, 3, 2);
      return retval;
      exception
	 when others then raise;
   end fmt_input;
   ------------------------------------------------------------------
   -- FMT_HOURS
   ------------------------------------------------------------------
   function fmt_hours(fv_minutes in number) return varchar2
   is
      retval	 varchar2(32);
      lv_hours	 number;
      lv_minutes number;
   begin
      lv_hours := trunc(nvl(fv_minutes,0) / 60);
      lv_minutes := nvl(fv_minutes,0) - (trunc(nvl(fv_minutes,0) / 60) * 60);
      retval := ltrim(to_char(nvl(lv_hours,0),'00')) || ':' ||
		ltrim(to_char(nvl(lv_minutes,0),'00'));
      return retval;
      exception
	 when others then raise;
   end fmt_hours;
   ------------------------------------------------------------------
   -- FMT_SUM_HOURS
   ------------------------------------------------------------------
   function fmt_sum_hours(fv_minutes in number) return varchar2
   is
      retval	 varchar2(32);
      lv_hours	 number;
      lv_minutes number;
   begin
      lv_hours := trunc(nvl(fv_minutes,0) / 60);
      lv_minutes := nvl(fv_minutes,0) - (trunc(nvl(fv_minutes,0) / 60) * 60);
      retval := ltrim(to_char(nvl(lv_hours,0),'9900')) || ':' ||
		ltrim(to_char(nvl(lv_minutes,0),'00'));
      return retval;
      exception
	 when others then raise;
   end fmt_sum_hours;
   ------------------------------------------------------------------
   -- IS_TIME
   ------------------------------------------------------------------
   function is_time(fv_time in number) return boolean
   is
      retval boolean := (TRUE);
   begin
      if (fv_time is not null) then
	 retval := (fv_time between 0 and 2400 and
		    fv_time - trunc(fv_time, -2) between 0 and 59);
      end if;
      return retval;
      exception
	 when others then raise;
   end is_time;
   ------------------------------------------------------------------
   -- IS_DATE
   ------------------------------------------------------------------
   function is_date(fv_string in varchar2 := null,
		    fv_format in varchar2 := null) return boolean
   is
      lv_date date;
   begin
      lv_date := to_date(fv_string, fv_format);
      return (TRUE);
      exception
	 when others then return (FALSE);
   end is_date;
   ------------------------------------------------------------------
   -- IS_NUMBER
   ------------------------------------------------------------------
   function is_number(fv_string in varchar2 := null) return boolean
   is
      lv_number number;
   begin
      lv_number := to_number(fv_string);
      return (TRUE);
      exception
	 when others then return (FALSE);
   end is_number;
   ------------------------------------------------------------------
   -- IS_INTEGER
   ------------------------------------------------------------------
   function is_integer(fv_string in varchar2 := null) return boolean
   is
      lv_number number;
   begin
      lv_number := to_number(fv_string);
      if (lv_number <> trunc(lv_number)) then
	 return (FALSE);
      end if;
      return (TRUE);
      exception
	 when others then return (FALSE);
   end is_integer;
   ------------------------------------------------------------------
   -- IS_UF
   ------------------------------------------------------------------
   function is_uf(fv_uf in varchar2 := null) return boolean
   is
      lv_ufs varchar2(100) := 'AC|AL|AM|AP|BA|CE|DF|ES|GO|MA|MG|MS|MT|PA|PB|PE|PI|PR|RJ|RN|RS|RO|RR|SE|SC|SP|TO';
      retval boolean := (instr(lv_ufs, fv_uf) > 0);
   begin
      return retval;
      exception
	 when others then return (FALSE);
   end is_uf;
   ------------------------------------------------------------------
   -- IS_PASSWD
   ------------------------------------------------------------------
   function is_passwd(fv_passwd in varchar2 := null) return boolean
   is
      lv_chars	 varchar2(512) := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
      lv_gchar	 varchar(1) := substr(lv_chars, 1, 1);
      lv_bchars  varchar2(512) := replace(translate(fv_passwd, lv_chars, lv_gchar), lv_gchar, '');
      lv_bchar	 varchar(1) := substr(lv_bchars, 1, 1);
   begin
      if (lv_bchars is null) then
	return (TRUE);
      else
	return (FALSE);
      end if;
      exception
	 when others then return (FALSE);
   end is_passwd;
   -------------------------------------------------------
   -- IS_CNPJ
   -------------------------------------------------------
   function is_cnpj(fv_cnpj in number) return boolean
   is
      string varchar2(14);
      sumd01 number;
      sumd02 number;
      rest01 number;
      rest02 number;
      retval boolean := (FALSE);
   begin
      if (length(to_char(fv_cnpj)) > 14) then
	 retval := (FALSE);
      else
	 string := ltrim(to_char(nvl(fv_cnpj,0),'00000000000000'));
	 for i in 1 .. (length(string) - 2) loop
	    if (i <= 4) then
	       sumd01 := nvl(sumd01,0) + ((6 - i) * substr(string,i,1));
	    else
	       sumd01 := nvl(sumd01,0) + ((14 - i) * substr(string,i,1));
	    end if;
	 end loop;
	    rest01 := (nvl(sumd01,0) - (trunc(sumd01 / 11) * 11));
	    if (rest01 in (0,1)) then
	       rest01 := 0;
	    else
	       rest01 := (11 - rest01);
	    end if;
	 for i in 1 .. (length(string) - 2) loop
	    if (i <= 5) then
	       sumd02 := nvl(sumd02,0) + ((7 - i) * substr(string,i,1));
	    else
	       sumd02 := nvl(sumd02,0) + ((15 - i) * substr(string,i,1));
	    end if;
	 end loop;
	    sumd02 := (nvl(sumd02,0) + (2 * nvl(rest01,0)));
	    rest02 := (nvl(sumd02,0) - (trunc(sumd02 / 11) * 11));
	    if (rest02 in (0,1)) then
	       rest02 := 0;
	    else
	       rest02 := (11 - rest02);
	    end if;
	    if (rest02 <> substr(string,14,1))
		or (rest01 <> substr(string,13,1)) then
		   retval := (FALSE);
	    else
		   retval := (TRUE);
	    end if;
      end if;
      return retval;
      exception
	 when others then return (FALSE);
   end is_cnpj;
   -------------------------------------------------------
   -- IS_CPF
   -------------------------------------------------------
   function is_cpf(fv_cpf in number) return boolean
   is
      string varchar2(11);
      sumd01 number;
      sumd02 number;
      rest01 number;
      rest02 number;
      retval boolean := (FALSE);
   begin
      if (length(to_char(fv_cpf)) > 11) then
	 retval := (FALSE);
      else
	 string := ltrim(to_char(nvl(fv_cpf,0),'00000000000'));
	 for i in 1 .. (length(string) - 2) loop
	    sumd01 := nvl(sumd01,0) + ((11 - i) * substr(string,i,1));
	 end loop;
	    rest01 := (nvl(sumd01,0) - (trunc(sumd01 / 11) * 11));
	    if (rest01 in (0,1)) then
	       rest01 := 0;
	    else
	       rest01 := (11 - rest01);
	    end if;
	 for i in 1 .. (length(string) - 2) loop
	    sumd02 := nvl(sumd02,0) + ((12 - i) * substr(string,i,1));
	 end loop;
	    sumd02 := (nvl(sumd02,0) + (2 * nvl(rest01,0)));
	    rest02 := (nvl(sumd02,0) - (trunc(sumd02 / 11) * 11));
	    if (rest02 in (0,1)) then
	       rest02 := 0;
	    else
	       rest02 := (11 - rest02);
	    end if;
	    if (rest02 <> substr(string,11,1))
		or (rest01 <> substr(string,10,1)) then
		   retval := (FALSE);
	    else
		   retval := (TRUE);
	    end if;
      end if;
      return retval;
      exception
	 when others then return (FALSE);
   end is_cpf;
   ------------------------------------------------------------------
   -- IS_CGC
   ------------------------------------------------------------------
   function is_cgc(fv_num in number, fv_pessoa in varchar2)
      return boolean
   is
      retval boolean := (FALSE);
   begin
      if (upper(fv_pessoa) = 'F') then
	 retval := is_cpf(fv_num);
      else
	 retval := is_cnpj(fv_num);
      end if;
      return retval;
      exception
	 when others then return (FALSE);
   end is_cgc;
   ------------------------------------------------------------------
   -- TO_INTEGER
   ------------------------------------------------------------------
   function to_integer(fv_string in varchar2) return number
   is
      lv_mask varchar2(255);
   begin
      if (fv_string is not null) then
	 for i in 1 .. length(fv_string) loop
	    if (ascii(substr(fv_string, i, 1)) between 48 and 57) then
	       lv_mask := lv_mask || substr(fv_string, i, 1);
	    end if;
	 end loop;
      end if;
      return to_number(lv_mask);
      exception
	 when others then return (NULL);
   end to_integer;
   ------------------------------------------------------------------
   -- TO_FEIRA
   ------------------------------------------------------------------
   function to_feira(fv_date in date) return varchar2
   is
      retval  varchar2(255);
   begin
      if (fv_date is not null) then
	 retval := initcap(ltrim(rtrim(to_char(fv_date, 'day')))) || ', ' ||
		   to_char(fv_date, 'dd') || ' de ' ||
		   initcap(ltrim(rtrim(to_char(fv_date, 'month')))) || ' de ' ||
		   to_char(fv_date, 'yyyy');
      end if;
      return retval;
      exception
	 when others then return (NULL);
   end to_feira;
   ------------------------------------------------------------------
   -- CIAO
   ------------------------------------------------------------------
   function ciao return varchar2
   is
      lv_when  number(2) := to_char(sysdate,'hh24');
      retval   varchar2(20);
   begin
      if (lv_when < 12) then
	 retval := 'Bom Dia';
      elsif (lv_when < 19) then
	 retval := 'Boa Tarde';
      else
	 retval := 'Boa Noite';
      end if;
      return retval;
      exception
	 when others then return (NULL);
   end ciao;
   ------------------------------------------------------------------
   -- PRENOM
   ------------------------------------------------------------------
   function prenom(fv_name in varchar2) return varchar2
   is
      retval varchar2(100);
   begin
      retval := nvl(substr(fv_name, 1, (instr(fv_name, ' ', 1) - 1)), fv_name);
      return retval;
      exception
	 when others then return (NULL);
   end prenom;
   -------------------------------------------------------
   -- FMT_CGC
   -------------------------------------------------------
   function fmt_cgc(fv_cgc in number, fv_pessoa in varchar2 default 'F')
      return varchar2
   is
      retval varchar2(20);
   begin
      if (fv_cgc is not null) then
	 if (fv_pessoa = 'F') then
	    retval := substr(ltrim(to_char(fv_cgc,'00000000000')),1,3) || '.' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000')),4,3) || '.' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000')),7,3) || '-' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000')),10,2);
	 elsif (fv_pessoa = 'J') then
	    retval := substr(ltrim(to_char(fv_cgc,'00000000000000')),1,2) || '.' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000000')),3,3) || '.' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000000')),6,3) || '/' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000000')),9,4) || '-' ||
		      substr(ltrim(to_char(fv_cgc,'00000000000000')),13,2);
	 end if;
      end if;
      return retval;
      exception
	 when others then raise;
   end fmt_cgc;
   -------------------------------------------------------
   -- FMT_CNPJ
   -------------------------------------------------------
   function fmt_cnpj(fv_cnpj in number) return varchar2
   is
      retval varchar2(80);
   begin
      retval := fmt_cgc(fv_cnpj, 'J');
      return retval;
      exception
	 when others then raise;
   end fmt_cnpj;
   -------------------------------------------------------
   -- FMT_CPF
   -------------------------------------------------------
   function fmt_cpf(fv_cpf in number) return varchar2
   is
      retval varchar2(80);
   begin
      retval := fmt_cgc(fv_cpf, 'F');
      return retval;
      exception
	 when others then raise;
   end fmt_cpf;
   -------------------------------------------------------
   -- FMT_CEP
   -------------------------------------------------------
   function fmt_cep(fv_cep in number) return varchar2
   is
      retval varchar2(20);
   begin
      if (fv_cep is not null) then
	 retval := substr(ltrim(to_char(fv_cep,'00000000')),1,5) || '-' ||
		   substr(ltrim(to_char(fv_cep,'00000000')),6,3);
      end if;
      return retval;
      exception
	 when others then raise;
   end fmt_cep;
   -------------------------------------------------------
   -- FMT_LIKE
   -------------------------------------------------------
   function fmt_like(fv_char in varchar2) return varchar2
   is
      retval varchar2(1024);
   begin
      if (fv_char is not null) then
	 retval := rtrim(ltrim(replace(replace(fv_char, '%'), '_')));
	 while (instr(retval, '  ', 1) <> 0) loop
	    retval := replace(retval, '  ', ' ');
	 end loop;
	 retval := translate(retval, ' ', '%');
	 retval := retval || '%';
      end if;
      return retval;
      exception
	 when others then raise;
   end fmt_like;
   -------------------------------------------------------
   -- FMT_TEXT
   -------------------------------------------------------
   function fmt_text(fv_text in varchar2) return varchar2
   is
      retval	 varchar2(32767);
      lv_chars	 constant varchar2(512) := 'abcdefghijklmnopqrstuvwxyz' ||
					   'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ||
					   '~!@#$%^&*()_+-=/|\?,[.]{;}<:>0123456789' ||
					   'ÀÁÂÃÄàáâãäÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÕÖòóôõöÙÚÛÜùúûü' ||
					   'ÇçÑñªº®" ' || chr(10);
      lv_gchar	 char(1) := substr(lv_chars, 1, 1);
      lv_bchars  varchar2(512) := replace(translate(fv_text, lv_chars, lv_gchar), lv_gchar, '');
      lv_bchar	 char(1) := substr(lv_bchars, 1, 1);
   begin
      if (lv_bchars is null) then
	retval := fv_text;
      else
	retval := replace(translate(fv_text, lv_bchars, rpad(lv_bchar, length(lv_bchars), lv_bchar)), lv_bchar, '');
      end if;
      return retval;
      exception
	 when others then raise;
   end fmt_text;
   -------------------------------------------------------
   -- FMT_CHAR
   -------------------------------------------------------
   function fmt_char(fv_char in varchar2, fv_length in number := 32767) return varchar2
   is
      retval varchar2(32767);
   begin
      if (fv_char is not null) then
	 retval := fmt_text(fv_char);
	 while (instr(retval, '  ', 1) <> 0) loop
	    retval := replace(retval, '  ', ' ');
	 end loop;
	 retval := substr(upper(rtrim(ltrim(retval))), 1, fv_length);
      end if;
      return retval;
      exception
	 when others then raise;
   end fmt_char;
   ------------------------------------------------------------------
   -- GET_SYSDATE
   ------------------------------------------------------------------
   function get_sysdate return date
   is
      retval date;
   begin
      retval := sysdate;
      return retval;
      exception
	 when others then raise;
   end get_sysdate;
   ------------------------------------------------------------------
   -- SPLIT
   ------------------------------------------------------------------
   function split(fv_string in varchar2,
		  fv_sep    in varchar2,
		  fv_field  in number)
      return varchar2
   is
      lv_string varchar2(1024) := fv_string;
      i 	number := 1;
   begin
      if (lv_string is null) then
	 return null;
      end if;
      if (gv_split = lv_string) then
	 return gt_split(fv_field);
      end if;
      gt_split.delete;
      gv_split := lv_string;
      if (instr(lv_string, fv_sep) = 0) then
	  lv_string := lv_string || fv_sep;
      end if;
      while (instr(lv_string, fv_sep) > 0) loop
	 gt_split(i) := substr(lv_string, 1, greatest((instr(lv_string, fv_sep) - 1),1));
	 lv_string := substr(lv_string, instr(lv_string, fv_sep) + 1);
	 i := i + 1;
      end loop;
      return gt_split(fv_field);
      exception
	 when others then raise;
   end split;
   ------------------------------------------------------------------
   -- DEC2BIN
   ------------------------------------------------------------------
   function dec2bin(fv_value in integer)
      return integer
   is
      retval   varchar2(32);
      lv_value integer := abs(fv_value);
   begin
      if (lv_value > (gv_bin_base ** gv_bin_exp)) then
	 raise value_error;
      end if;
      loop
	 retval := substr(gv_bin_indx, trunc(mod(lv_value, gv_bin_base)) + 1, 1) || retval;
	 lv_value := trunc(lv_value / gv_bin_base);
	 if (lv_value < gv_bin_base) then
	    retval := substr(gv_bin_indx, lv_value + 1, 1) || retval;
	    exit;
	 end if;
      end loop;
      return to_number(retval);
      exception
	 when others then raise;
   end dec2bin;
   ------------------------------------------------------------------
   -- BIN2DEC
   ------------------------------------------------------------------
   function bin2dec(fv_value in integer)
      return integer
   is
      retval integer := 0;
      lv_pos integer;
   begin
      if (fv_value < 0) then
	 raise value_error;
      end if;
      for i in 1 .. length(fv_value) loop
	 lv_pos := instr(gv_bin_indx, substr(fv_value, (length(fv_value) - i + 1), 1));
	 retval := retval + ((nvl(lv_pos,0) - 1) * (gv_bin_base ** (i - 1)));
      end loop;
      return retval;
      exception
	 when others then raise;
   end bin2dec;
   ------------------------------------------------------------------
   -- DEC2OCT
   ------------------------------------------------------------------
   function dec2oct(fv_value in integer)
      return integer
   is
      retval   varchar2(10);
      lv_value integer := abs(fv_value);
   begin
      if (lv_value > (gv_oct_base ** gv_oct_exp)) then
	 raise value_error;
      end if;
      loop
	 retval := substr(gv_oct_indx, trunc(mod(lv_value, gv_oct_base)) + 1, 1) || retval;
	 lv_value := trunc(lv_value / gv_oct_base);
	 if (lv_value < gv_oct_base) then
	    retval := substr(gv_oct_indx, lv_value + 1, 1) || retval;
	    exit;
	 end if;
      end loop;
      return to_number(retval);
      exception
	 when others then raise;
   end dec2oct;
   ------------------------------------------------------------------
   -- OCT2DEC
   ------------------------------------------------------------------
   function oct2dec(fv_value in integer)
      return integer
   is
      retval integer := 0;
      lv_pos integer;
   begin
      if (fv_value < 0) then
	 raise value_error;
      end if;
      for i in 1 .. length(fv_value) loop
	 lv_pos := instr(gv_oct_indx, substr(fv_value, (length(fv_value) - i + 1), 1));
	 retval := retval + ((nvl(lv_pos,0) - 1) * (gv_oct_base ** (i - 1)));
      end loop;
      return retval;
      exception
	 when others then raise;
   end oct2dec;
   ------------------------------------------------------------------
   -- DEC2HEX
   ------------------------------------------------------------------
   function dec2hex(fv_value in integer)
      return varchar2
   is
      retval   varchar2(8);
      lv_value integer := abs(fv_value);
   begin
      if (lv_value > (gv_hex_base ** gv_hex_exp)) then
	 raise value_error;
      end if;
      loop
	 retval := substr(gv_hex_indx, trunc(mod(lv_value, gv_hex_base)) + 1, 1) || retval;
	 lv_value := trunc(lv_value / gv_hex_base);
	 if (lv_value < gv_hex_base) then
	    retval := substr(gv_hex_indx, lv_value + 1, 1) || retval;
	    exit;
	 end if;
      end loop;
      return lpad(retval, gv_hex_exp, '0');
      exception
	 when others then raise;
   end dec2hex;
   ------------------------------------------------------------------
   -- HEX2DEC
   ------------------------------------------------------------------
   function hex2dec(fv_value in varchar2)
      return integer
   is
      retval integer := 0;
      lv_pos integer;
   begin
      if (nvl(length(replace(translate(fv_value, gv_hex_indx, '0'),'0','')),0) <> 0) then
	 raise value_error;
      end if;
      for i in 1 .. length(fv_value) loop
	 lv_pos := instr(gv_hex_indx, substr(fv_value, (length(fv_value) - i + 1), 1));
	 retval := retval + ((nvl(lv_pos,0) - 1) * (gv_hex_base ** (i - 1)));
      end loop;
      return retval;
      exception
	 when others then raise;
   end hex2dec;
   ------------------------------------------------------------------
   -- DEC2ASC
   ------------------------------------------------------------------
   function dec2asc(fv_value in integer)
      return varchar2
   is
      retval   varchar2(64);
      lv_value integer := abs(fv_value);
   begin
      if (lv_value > (gv_asc_base ** gv_asc_exp)) then
	 raise value_error;
      end if;
      loop
	 retval := substr(gv_asc_indx, trunc(mod(lv_value, gv_asc_base)) + 1, 1) || retval;
	 lv_value := trunc(lv_value / gv_asc_base);
	 if (lv_value < gv_asc_base) then
	    retval := substr(gv_asc_indx, lv_value + 1, 1) || retval;
	    exit;
	 end if;
      end loop;
      return retval;
      exception
	 when others then raise;
   end dec2asc;
   ------------------------------------------------------------------
   -- ASC2DEC
   ------------------------------------------------------------------
   function asc2dec(fv_value in varchar2)
      return integer
   is
      retval integer := 0;
      lv_pos integer;
   begin
      if (nvl(length(replace(translate(fv_value, gv_asc_indx, '0'),'0','')),0) <> 0) then
	 raise value_error;
      end if;
      for i in 1 .. length(fv_value) loop
	 lv_pos := instr(gv_asc_indx, substr(fv_value, (length(fv_value) - i + 1), 1));
	 retval := retval + ((nvl(lv_pos,0) - 1) * (gv_asc_base ** (i - 1)));
      end loop;
      return retval;
      exception
	 when others then raise;
   end asc2dec;
   ------------------------------------------------------------------
   -- CREATE_DV
   ------------------------------------------------------------------
   function create_dv(fv_int in integer)
      return integer
   is
      retval  integer;
      lv_mask varchar2(64);
      lv_sum  number;
      lv_mod  number;
   begin
      lv_mask := ltrim(to_char(nvl(fv_int,0),'00000000'));
      for i in 1 .. length(lv_mask) loop
	 lv_sum := nvl(lv_sum,0) + ((10 - i) * substr(lv_mask,i,1));
      end loop;
      lv_mod := (nvl(lv_sum,0) - (trunc(lv_sum / 11) * 11));
      if (lv_mod in (0,1)) then
	 lv_mod := 0;
      else
	 lv_mod := (11 - lv_mod);
      end if;
      retval := to_number(lv_mask || lv_mod);
      return retval;
      exception
	 when others then raise;
   end create_dv;
   ------------------------------------------------------------------
   -- CHECK_DV
   ------------------------------------------------------------------
   function check_dv(fv_int in integer)
      return boolean
   is
      retval  boolean := (FALSE);
      lv_mask varchar2(64);
      lv_sum  number;
      lv_mod  number;
   begin
      lv_mask := ltrim(to_char(nvl(fv_int,0),'000000000'));
      for i in 1 .. (length(lv_mask) - 1) loop
	 lv_sum := nvl(lv_sum,0) + ((10 - i) * substr(lv_mask,i,1));
      end loop;
      lv_mod := (nvl(lv_sum,0) - (trunc(lv_sum / 11) * 11));
      if (lv_mod in (0,1)) then
	 lv_mod := 0;
      else
	 lv_mod := (11 - lv_mod);
      end if;
      if (lv_mod = substr(lv_mask,9,1)) then
	 retval := (TRUE);
      end if;
      return retval;
      exception
	 when others then raise;
   end check_dv;
   ------------------------------------------------------------------
   -- FMT_DV
   ------------------------------------------------------------------
   function fmt_dv(fv_int    in integer,
		   fv_digits in integer := 6)
      return varchar2
   is
      retval   varchar2(20);
      lv_mask  varchar2(20) := ltrim(to_char(fv_int, rpad('0', fv_digits, '0')));
   begin
      retval := substr(lv_mask, 1, (length(lv_mask) - 1)) || '-' ||
		substr(lv_mask, length(lv_mask), 1);
      return retval;
      exception
	 when others then raise;
   end fmt_dv;
end pkg_nkw_std;
© 2017 DataPRO Developers