Split

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Olá pessoal, estou procurando se há alguma função que quebre a minha string com em um array com base em um caracter, algo como o split.

Selecionar tudo

string a = "aaa bbb ccc ddd";
string[] vetor = a.Split(' ');
assim vetor seria:

Selecionar tudo

vetor[0] == "aaa";
vetor[1] == "bbb";
vetor[2] == "ccc";

Obrigado

[]'s
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Boa Tarde, Bom eu não conheço função pronta que faça isso ai criei uma que você poderia utilizar...o problema é que tive que usar uma pack para declaração do Type do vetor, se você ter uma forma melhor para declarar este type manda ai.

veja:

Selecionar tudo

CREATE OR REPLACE PACKAGE PACK_FUNCOES IS
  TYPE T_VET_RETORNO IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;

  PROCEDURE MONTA_VETOR(V_CD_CARACTER IN VARCHAR2,
                        V_DS_STRING   IN VARCHAR2,
                        VET_RETORNO  OUT PACK_FUNCOES.T_VET_RETORNO);
END;

CREATE OR REPLACE PACKAGE BODY PACK_FUNCOES IS
  PROCEDURE MONTA_VETOR(V_CD_CARACTER IN VARCHAR2,
                        V_DS_STRING   IN VARCHAR2,
                        VET_RETORNO  OUT PACK_FUNCOES.T_VET_RETORNO) IS
    V_DS_RESTO VARCHAR2(32000);                   
    V_COUNT    NUMBER;
  BEGIN
    V_DS_RESTO := V_DS_STRING;
    V_COUNT    := 0;
    VET_RETORNO.DELETE;
    WHILE V_DS_RESTO IS NOT NULL LOOP
      V_COUNT := V_COUNT + 1;
      IF INSTR(V_DS_RESTO,V_CD_CARACTER) > 0 THEN
        VET_RETORNO(V_COUNT) := SUBSTR(V_DS_RESTO,1,(INSTR(V_DS_RESTO,V_CD_CARACTER)-1));
        V_DS_RESTO           := SUBSTR(V_DS_RESTO,(INSTR(V_DS_RESTO,V_CD_CARACTER)+1));
      ELSE
        VET_RETORNO(V_COUNT) := V_DS_RESTO;
        EXIT;
      END IF;      
    END LOOP;
  END;                       
END;

vamos testar a nossa função

Selecionar tudo

DECLARE
  VETOR PACK_FUNCOES.T_VET_RETORNO;
BEGIN
  PACK_FUNCOES.MONTA_VETOR(' ','THIAGO BOURSCHEIDT ANALISTA DE SISTEMAS',VETOR);
  
  FOR I IN 1..VETOR.COUNT LOOP
    DBMS_OUTPUT.put_line('linha '||I||' :'||VETOR(I));
  END LOOP;
END;  

olha o resultado

Selecionar tudo

linha 1 :THIAGO
linha 2 :BOURSCHEIDT
linha 3 :ANALISTA
linha 4 :DE
linha 5 :SISTEMAS
eu acho que deu certo não é.. flow
Responder
  • Informação