Bom dia pessoal,
Eu tenho uma coluna em uma tabela que armazena o seguinte dado:
TESTE;TESTE_DOIS;TESTE_TRES;TESTE_QUATRO
Eu preciso pegar somente as palavras.
alguém pode me ajudar?
Obrigado!
Buscar uma palavra entre ponto e virgula
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Pelo o que entendi você deseja pegar os valores de "campos" segmentados, no seu caso separados por ponto e vírgula.
Segue uma função não-recursiva que poderá ser utilizada para obter dados segmentados, como num CSV ou num flexfield chave do EBS.
Segue uma função não-recursiva que poderá ser utilizada para obter dados segmentados, como num CSV ou num flexfield chave do EBS.
CREATE OR REPLACE FUNCTION get_segment_f(text IN VARCHAR2
,segmento IN NUMBER
,separator IN CHAR DEFAULT ';') RETURN VARCHAR2 AS
pos NUMBER := 0;
pos_ini NUMBER := 0;
pos_fim NUMBER := 0;
BEGIN
/* excecuta o loop até encontrar a posição desejada */
WHILE pos < segmento
LOOP
IF (pos_ini = instr(text, separator, -1)) THEN
pos_fim := length(text) + 1;
ELSE
pos_fim := instr(text, separator, pos_ini + 1);
END IF;
pos := pos + 1;
IF (pos <> segmento) THEN
pos_ini := pos_fim;
END IF;
/* Sai do programa quando estourar o limite do texto */
IF (pos_ini > length(text)) THEN
EXIT;
END IF;
END LOOP;
RETURN(substr(text, pos_ini + 1, (pos_fim - pos_ini - 1)));
END;
é assim:
Eu preciso pegar a primeira palavra e armazenar em uma variavel, depois ir atras da outra palavra e concatenar com a primeira que eu peguei e assim vai até não existir mais palavra.
Eu preciso pegar a primeira palavra e armazenar em uma variavel, depois ir atras da outra palavra e concatenar com a primeira que eu peguei e assim vai até não existir mais palavra.
Fiz assim e funcionou:
SET SERVEROUTPUT ON
declare
v_inicio number;
v_pos number;
v_result varchar2(1000);
v_string varchar2(1000;
begin
v_pos := 1;
v_inicio := 1;
select col_nm
into v_string
from teste
where tbl_nm = 'table_nm';
loop
exit when v_pos >= length(v_string);
if substr(v_string, v_pos, 1) = ';' then
v_result := v_result ||' t1.'||substr(v_string, v_inicio, (v_pos) - v_inicio)||' = t2.'||substr(v_string, v_inicio, (v_pos) - v_inicio)||' and';
v_inicio := v_pos + 1;
end if;
v_pos := v_pos + 1;
end loop;
v_result := v_result ||' t1.'||substr(v_string, v_inicio)||' = t2.'||substr(v_string, v_inicio);
dbms_output.put_line(v_result);
end;
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Oi cleberz,
Entendi que você quer remover os separadores armazenados nesta coluna, que vamos chamar de COLUNA_TESTE.
Ou seja, "TESTE;TESTE_1;TESTE_2" passaria a ser ""TESTETESTE_1TESTE_2".
Se for este o caso, bastaria usar a função REPLACE do ORACLE:
REPLACE (COLUNA_TESTE, ';' ,'')
Desconfio que não precisaria usar uma função para concatenar os valores dentro da coluna.
Abraços,
Sergio Coutinho
Entendi que você quer remover os separadores armazenados nesta coluna, que vamos chamar de COLUNA_TESTE.
Ou seja, "TESTE;TESTE_1;TESTE_2" passaria a ser ""TESTETESTE_1TESTE_2".
Se for este o caso, bastaria usar a função REPLACE do ORACLE:
REPLACE (COLUNA_TESTE, ';' ,'')
Desconfio que não precisaria usar uma função para concatenar os valores dentro da coluna.
Abraços,
Sergio Coutinho
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante