-- StoreProcedure {padrao.fu_extenso_blk(num char(5)) } Versao {03} Esquema {padrao} Descricao {Retorna o Esquema da empresa selecionada}
-- -----------------------------------------------------------------------------------------------

CREATE or replace FUNCTION padrao.fu_extenso_blk(num char(3)) returns text as $$
declare
w_cen integer ;
w_dez integer ;
w_dez2 integer ;
w_uni integer ;
w_tcen text ;
w_tdez text ;
w_tuni text ;
w_ext text ;
m_cen text[] := array['','CENTO','DUZENTOS','TREZENTOS','QUATROCENTOS','QUINHENTOS','SEISCENTOS','SETECENTOS','OITOCENTOS','NOVECENTOS'];
m_dez text[] := array['','DEZ','VINTE','TRINTA','QUARENTA','CINQUENTA','SESSENTA','SETENTA','OITENTA','NOVENTA'] ;
m_uni text[] := array['','UM','DOIS','TRES','QUATRO','CINCO','SEIS','SETE','OITO','NOVE','DEZ','ONZE','DOZE','TREZE','QUATORZE','QUINZE','DEZESSEIS','DEZESSETE','DEZOITO','DEZENOVE'] ;
begin
  w_cen := cast(substr(num,1,1) as integer) ;
  w_dez := cast(substr(num,2,1) as integer) ;
  w_dez2 := cast(substr(num,2,2) as integer) ;
  w_uni := cast(substr(num,3,1) as integer) ;
  if w_cen = 1 and w_dez2 = 0 then
     w_tcen := 'CEM' ;
     w_tdez := '' ;
     w_tuni := '' ;
    else
     if w_dez2 < 20 then
        w_tcen := m_cen[w_cen + 1] ;
        w_tdez := m_uni[w_dez2 + 1] ;
        w_tuni := '' ;
       else
        w_tcen := m_cen[w_cen + 1] ;
        w_tdez := m_dez[w_dez + 1] ;
        w_tuni := m_uni[w_uni + 1] ;
     end if ;   
  end if ;
  w_ext := w_tcen ;
  if w_tdez <> '' then 
     if w_ext = '' then
        w_ext := w_tdez ;
       else
        w_ext := w_ext || ' E ' || w_tdez ;
     end if ;     
  end if ;  
  if w_tuni <> '' then 
     if w_ext = '' then
        w_ext := w_tuni ;
       else
        w_ext := w_ext || ' E ' || w_tuni ;
     end if ;
  end if ;
  return w_ext ; 
end ;
$$ LANGUAGE plpgsql
   IMMUTABLE
   RETURNS NULL ON NULL INPUT ;
