- Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por Fontalva.
-
AutorPosts
-
22 de agosto de 2006 às 10:01 pm #76273cgiorgiParticipante
E ae blz,
To precisando fazer o seguinte tenho uma coluna na tabela com varios valores separados por | tipo ‘3|12|4|5|7|2’ sendo que os numeros variam de um a dois caracteres no maximo, tenho que imprimir eles separadamente .
Alguem sabe de alguma forma de fazer isso em pl ?
Abraço
Carlo
21 de dezembro de 2006 às 12:49 am #77668AnônimoVÊ se te ajuda brother:
DECLARE
v_retorna_texto owa_util.vc_arr;
v_string VARCHAR2(25) :=’1|33|2|158|13|8|9′;FUNCTION fun_ret_array(v_texto VARCHAR2, v_separador VARCHAR2)
RETURN OWA_UTIL.vc_arr
IS
cnt NUMBER := 1;
pos NUMBER := 1;
acum VARCHAR2 (4000) := v_texto;
arr_retorno OWA_UTIL.vc_arr;
BEGIN
IF v_texto IS NULL OR v_separador IS NULL
THEN
RETURN arr_retorno;
END IF;WHILE pos 0 LOOP pos := INSTR (acum, v_separador); IF pos = 0 THEN arr_retorno (cnt) := acum; ELSE arr_retorno (cnt) := SUBSTR (acum, 1, pos - 1); acum := SUBSTR (acum, pos + LENGTH (v_separador)); cnt := cnt + 1; END IF; END LOOP; RETURN arr_retorno;
END fun_ret_array;
BEGIN
v_retorna_texto := fun_ret_array (v_string,’|’);
FOR x IN 1..v_retorna_texto.COUNT
LOOP
dbms_output.put_line(‘Texto Separado: ‘ || v_retorna_texto(x));
END LOOP;
END;Abraços,
Trevisolli.
21 de dezembro de 2006 às 2:43 pm #77676chduarteParticipanteAssim tb funciona. Dois caminhos para as pedras!
declare
v_char varchar2(32676) := ‘3|12|4|5|7|2356|436′;
begin
while (instr(v_char,’|’) != 0) loop
dbms_output.put_line(substr(v_char,1,instr(v_char,’|’)-1));
v_char := substr(v_char,instr(v_char,’|’)+1,length(v_char));
end loop;
dbms_output.put_line(v_char);
end;
/Grande []
Carlos Henrique Duarte
DBA Oracle 11i2 de janeiro de 2007 às 5:38 pm #77888FontalvaParticipanteSó mais um exemplo.
Declare
v_string Varchar2(23) := '|1|2||3|9|74|05|234|11'; --> Variavel String que será Destribuida
v_retorno Varchar2(10); --> Variavel que recebera os campos da String
Begin
v_string := v_string||'|'; --> Atribuo o pipe '|' no final para que não reste nenhum campo no final da String
for x in 1..length(v_string) Loop --> Loop que correra a String inteira.
If substr(v_string,x,1) '|' Then --> Se for um pipe '|' sei que acabou um campo
v_retorno := v_retorno||substr(v_string,x,1); --> V_retorno recebe ele mesmo concatenado com o proximo caracter atual
Else
If x > 1 Then --> Caso seja o primeiro ainda seja o primeiro campo o pipe '|' não faço nada.
dbms_output.put_line(v_retorno);
End If;
v_retorno := '';
End If;
End Loop;
End;
-
AutorPosts
- Você deve fazer login para responder a este tópico.