Banco de Dados

Ξ Deixe um comentário

Separando string por delimitador com PL/SQL

publicado por Marcelo Dias Oliveira

Olá prezados guerreiros de T.I

Estou de volta com mais uma dica em PL/SQL. Nesse artigo, o objetivo é apresentar uma sugestão envolvendo a separação ou fragmentação de uma String a partir de um delimitador. Também conhecido como explode em PHP ou como Split em Java e C#.

Em alguns comentários usarei o termo explode para dizer que a String será separada por um delimitador.

Mão á massa companheiros!!!

Para início temos que entender o formato de saída. Essa saída será do tipo lista, para isso crie o tipo propriamente dito:

[codesyntax lang="plsql"]

-- Crie um tipo LISTA como varchar para saída do valor, que será tratado como uma tabela.
CREATE OR REPLACE TYPE "LISTA" AS TABLE OF VARCHAR2 (255);

[/codesyntax]

Após isso, passamos a criação da função, como se segue:

[codesyntax lang="plsql"]

CREATE OR REPLACE FUNCTION SepararTextoPorDelimitador (pDelimitador in varchar2,pValor in varchar2) return lista as
-- Concatena-se os valores recebidos com o Delimitador
listaString long default pValor || pDelimitador;
-- Preparando e mapeando o tipo lista para a variavel listaDados (um varray) para o processo de explode
listaDados lista := lista();
numero number;
begin
loop
-- Tratamento de erro... Trivial!
exit when listaString is null;
numero := instr (listaString, pDelimitador);
-- Extend é um dos métodos do Oracle PL/SQL collection,
-- Pode ser usado com tipos definidos (type table of...)
-- e assim acrescentar elementos únicos ou múltiplos para a collection.
listaDados.extend;
-- Instruções a seguir são triviais.. Acredito que dispensa comentários.
listaDados (listaDados.count) := ltrim(rtrim(substr(listaString, 1, numero - 1)));
listaString := substr(listaString, numero + 1);
end loop;
-- Retorno o tipo Mapeado (explode)
return listaDados;
end;

[/codesyntax]

Perceberam a ajuda que a função instr fornece?

Chovendo no molhado para alguns… Sendo simplista para outros a função instr busca uma palavra ou caracter em uma substring retornando a(s) posição(ões). Outra definição interessante seria dizer que instr é semelhante a substr, exceto pelo seguinte motivo: em vez de retornar a string desejada na sub, INSTR retorna a localização dessa string

Bem simples mas muito útil em uma package e suas procedures. E um exemplo de teste seria algo do tipo:

[codesyntax lang="plsql"]

select column_value from table(cast(explodeString(':', 'Macaca de volta a Série: A') as lista))

[/codesyntax]

Bom é isso aí. Os comentários revelam uma explicação adicional.
Forte abraço pessoa.
Sucesso para nós!

[Crédito da Imagem: Desenvolvimento – ShutterStock]

Autor

Formado em Sistema de Informação com Ênfase em Análise de sistemas e Processamento de Dados. Pós-graduado em Gestão estratégica de Negócios. Certificação Scrum Master. Conhecedor profundo de metodologias Ágeis como: Lean, Kanban, XP e processos para Startup. Além de possuir amplo conhecimento do PMI. Especialista em desenvolvimento Web e tendo profunda experiência com os principais Bancos de Dados do mercado.

Marcelo Dias Oliveira

Comentários

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade



Siga-nos!

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.

Artigos Recentes