Boa tarde!
Tenho uma  function para fonetizar nomes na minha base de dados.
Ela foi escrita na versão 8.4.5 e agora migramos para a 9.2 e está
ocorrendo o seguinte erro:

ERRO:  matriz mal formada:
"{".","/","\\\\","$","?",":","\\"",";",",","-","_","&","!","~","`","(",")","Ý","=","+",">","<"}"
CONTEXT:  PL/pgSQL function corporativo.func_fonetizar(text,boolean) line
43 at atribuição

Executo o seguinte comando :
select * from corporativo.func_fonetizar ('DELIANE ANDRADE',FALSE);

Alguém sabe o que pode estar ocorrendo?

Att,

Deliane Andrade


Segue a function :

---------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION corporativo.func_fonetizar (
  text,
  boolean
)
RETURNS text AS
$body$
declare
  bConsulta alias for $2;

  tStr text;
  tParticula text;
  tFonetizado text;
  bFonetizar boolean;
  tAux text;
  i integer;
  iCont integer;

  vAcentos varchar[];
  vAcentosSub varchar[];
  vCaracteresEspeciais varchar[];
  vCaracteresEspeciaisSub varchar[];
  vPreposicoes varchar[];
  vAlgRomano varchar[];
  vNumero varchar[];
  vAlgarismo varchar[];
  vAlgarismoExtenso varchar[];
  vLetras varchar[];
begin
  tStr := upper($1);
  tStr := trim(both ' ' from tStr);

  /*ELIMINAR ACENTOS*/
  vAcentos    :=
'{"á","Á","à","À","â","Â","ã","Ã","é","É","è","È","ê","Ê","í","Í","ì","Ì","î","Î","ó","Ó","ò","Ò","ô","Ô","õ","Õ","ú","Ú","ù","Ù","û","Û","ü","Ü","ç","Ç"}';
  vAcentosSub :=
'{"A","A","A","A","A","A","A","A","E","E","E","E","E","E","I","I","I","I","I","I","O","O","O","O","O","O","O","O","U","U","U","U","U","U","U","U","S","S"}';

  for i in 1..38 /*array_length(vAcentos)*/ loop
    select replace(tStr, vAcentos[i], vAcentosSub[i]) into tStr;
  end loop;


  /*********************************************/
  if tStr = ' H ' then
    tStr := ' AGA ';
  end if;

  /*ELIMINAR CARACTERES ESPECIAIS*/
  /*verificar*/
  vCaracteresEspeciais    :=
'{".","/","\\\\","$","?",":","\\"",";",",","-","_","&","!","~","`","(",")","Ý","=","+",">","<"}';
  vCaracteresEspeciaisSub := '{""," "," "," "," "," "," "," "," "," "," ","
"," "," "," "," "," "," "," "," "," "," "}';

  for i in 1..20 /*length(vCaracteresEspeciais)*/ loop
    select replace(tStr, vCaracteresEspeciais[i], '
'/*vCaracteresEspeciaisSub[i]*/) into tStr;
  end loop;

  /*ELIMINAR ESPACOS EM BRANCO MAIOR QUE 1*/
  for i in 1..2 loop
    select replace(tStr, '  ', ' ') into tStr;
  end loop;

  /*ELIMINAR PALAVRAS ESPECIAIS*/
  select replace(tStr, ' LTDA ', ' ') into tStr;

  /*ELIMINAR PREPOSICOES*/
  vPreposicoes := '{" DE "," DA "," DAS "," DO "," DOS "," AS "," OS "," AO
"," AOS "," NA "," NAS "," NO "," NOS "," COM "}';

  for i in 1..14 /*length(vPreposicoes)*/ loop
    select replace(tStr, vPreposicoes[i], ' ') into tStr;
  end loop;

  /*CONVERTE ALGARISMO ROMANO PARA NUMERO*/
  vAlgRomano = '{" X "," IX "," VIII "," VII "," VI "," V "," IV "," III
"," II "," I "}';
  vNumero    = '{" 10 "," 9 "," 8 "," 7 "," 6 "," 5 "," 4 "," 3 "," 2 "," 1
"}';

  for i in 1..10 /*length(vAlgRomano)*/ loop
    select replace(tStr, vAlgRomano[i], vNumero[i]) into tStr;
  end loop;

  /*CONVERTE NUMERO PARA LITERAL*/
  vAlgarismo        = '{"0","1","2","3","4","5","6","7","8","9"}';
  vAlgarismoExtenso =
'{"ZERO","UM","DOIS","TRES","QUATRO","CINCO","SEIS","SETE","OITO","NOVE"}';

  for i in 1..10 /*length(vAlgarismo)*/ loop
    select replace(tStr, vAlgarismo[i], vAlgarismoExtenso[i]) into tStr;
  end loop;

  /*********************************************/
  /*ELIMINAR PREPOSICOES E ARTIGOS*/
  vLetras = '{" A "," B "," C "," D "," E "," F "," G "," H "," I "," J ","
K "," L "," M "," N "," O "," P "," Q "," R "," S "," T "," U "," V "," X
"," Z "," W "," Y "}';

  for i in 1..26 /*length(vLetras)*/ loop
    select replace(tStr, vLetras[i], ' ') into tStr;
  end loop;

  tStr := trim(both ' ' from tStr);
  tParticula := '';
  tFonetizado := '';
  for iCont in 1..length(tStr) + 1 loop
    if iCont < length(tStr) + 1 then
      if substring(tStr,iCont,1) <> ' ' then
        tParticula := tParticula || substring(tStr,iCont,1);
        bFonetizar := false;
      else
        bFonetizar := true;
      end if;
    else
      bFonetizar := true;
    end if;

    if bFonetizar then
      tParticula := corporativo.func_fonetizar_particula(tParticula);

      tFonetizado := tFonetizado || ' ' || tParticula;
      tParticula := '';
    end if;
  end loop;

  tFonetizado := trim(both ' ' from tFonetizado);

  /*PREPARA A STRING PARA UM LIKE*/
  if bConsulta then
    tAux := '%';

    for i in 1..length(tFonetizado) loop
      if substring(tFonetizado,i,1) = ' ' then
        tAux := tAux || '% %';
      else
        tAux := tAux || substring(tFonetizado,i,1);
      end if;
    end loop;

    if substring(tFonetizado,Length(tFonetizado),1) <> '%' then
      tAux := tAux || '%';
    end if;

    tFonetizado := tAux;
  end if;

  return tFonetizado;
end;
$body$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100;
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a