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