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]
You must be logged in to post a comment.