Eu tenho uma string do genero '110-112-123'
A minha ideia é atraves de um select into variavel, colocar na variavel a string que eu pus em cima.
O que preciso de fazer é percorrer essa string ate encontrar por exemplo o 110 e usar esse valor para um inserte, depois tenho de o eliminar e voltar a percorrer essa string ate encontrar o 112, tenho de fazer isto até não haver esses codigos.
alguém tem alguma sugestão?
Manipular um texto.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
As vezes vale mais a pena inserir essas informações numa tabela temporária (GLOBAL TEMPORARY TABLE).
Daí fazer um JOIN normal.
É um pouco mais trabalhoso mas as consultas ficam bem rápidas. O banco usa os índices corretos, etc.
Daí fazer um JOIN normal.
É um pouco mais trabalhoso mas as consultas ficam bem rápidas. O banco usa os índices corretos, etc.
Mas não da para fazer o que eu sugeri?
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Dá pra fazer sim.
Basta você percorrer a string e ir "catando" ali o que você quer.
DESVANTAGENS:
* Seu código vai ficar com um monte de AND e OR desnecessário.
* Será LIMITADO o número de parâmetros que você insere.
* Provavelmente você terá que criar uma FUNÇÃO que retorne o elemento 1, 2, 3,..., n da sua string. (aqui no forum tem uma aqui --> http://glufke.net/oracle/viewtopic.php?t=1653
Seu select vai parecer +ou- assim:
Neste exemplo, sua string pode ter no máximo 6 valores...
Da forma que eu citei (criando uma tabela), pode haver quantos parâmetros você quiser e SEMPRE vai ser rapido e confiável.
Basta você percorrer a string e ir "catando" ali o que você quer.
DESVANTAGENS:
* Seu código vai ficar com um monte de AND e OR desnecessário.
* Será LIMITADO o número de parâmetros que você insere.
* Provavelmente você terá que criar uma FUNÇÃO que retorne o elemento 1, 2, 3,..., n da sua string. (aqui no forum tem uma aqui --> http://glufke.net/oracle/viewtopic.php?t=1653
Seu select vai parecer +ou- assim:
SELECT *
FROM TABELA
WHERE
( fnc_elemento(vstring, 1) is null OR fnc_elemento(vstring,1)=CAMPO )
AND ( fnc_elemento(vstring, 2) is null OR fnc_elemento(vstring,2)=CAMPO )
AND ( fnc_elemento(vstring, 3) is null OR fnc_elemento(vstring,3)=CAMPO )
AND ( fnc_elemento(vstring, 4) is null OR fnc_elemento(vstring,4)=CAMPO )
AND ( fnc_elemento(vstring, 5) is null OR fnc_elemento(vstring,5)=CAMPO )
AND ( fnc_elemento(vstring, 6) is null OR fnc_elemento(vstring,6)=CAMPO )
Da forma que eu citei (criando uma tabela), pode haver quantos parâmetros você quiser e SEMPRE vai ser rapido e confiável.
Supondo que eu ponho '110-112-123' numa tabela temporaria, como é que eu vou buscar à tabela temporaria o 110 e depois o elimino?
Sei que posso ir bucar usando um select com um like mas como é que eu removo depois o 110.
Sei que posso ir bucar usando um select com um like mas como é que eu removo depois o 110.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Leia sobre GLOBAL TEMPORARY TABLE.
Vocẽ não precisa eliminar. Todas informações são visíveis apenas pra sessão que incluiu. Após o COMMIT ou ao termino da sessão, as informações desaparecem.
Vocẽ não precisa eliminar. Todas informações são visíveis apenas pra sessão que incluiu. Após o COMMIT ou ao termino da sessão, as informações desaparecem.
Quero desde já agradecer a vossa ajuda.
A minha duvida já esta quase resolvida, so me falta uma coisa, como é que eu posso contar as quantas vezes aparece o caracter x (por exemplo) numa string.
A minha duvida já esta quase resolvida, so me falta uma coisa, como é que eu posso contar as quantas vezes aparece o caracter x (por exemplo) numa string.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Pode usar a dica encontrada no site da ORACLE:
http://www.oracle.com/technology/oramag ... 21304.html
http://www.oracle.com/technology/oramag ... 21304.html
Identify and Count Characters
Tip for Week of December 13, 2004
This tip comes from Aui de la Vega, DBA, in Makati, Philippines.
This function provides the number of times a pattern occurs in a string (VARCHAR2).
SQL> CREATE FUNCTION NUM_CHARS(INSTRING VARCHAR2, INPATTERN VARCHAR2)
RETURN NUMBER
IS
COUNTER NUMBER;
NEXT_INDEX NUMBER;
STRING VARCHAR2(2000);
PATTERN VARCHAR2(2000);
BEGIN
COUNTER := 0;
NEXT_INDEX := 1;
STRING := LOWER(INSTRING);
PATTERN := LOWER(INPATTERN);
FOR I IN 1 .. LENGTH(STRING) LOOP
IF (LENGTH(PATTERN) <= LENGTH(STRING)-NEXT_INDEX+1)
AND (SUBSTR(STRING,NEXT_INDEX,LENGTH(PATTERN)) = PATTERN) THEN
COUNTER := COUNTER+1;
END IF;
NEXT_INDEX := NEXT_INDEX+1;
END LOOP;
RETURN COUNTER;
END;
Function created.
*Note: Use CREATE to make sure you are not overwriting an existing function.
Try it out:
SQL> select num_chars('miSSissipPi','i') from dual
2 /
NUM_CHARS('MISSISSIPPI','I')
----------------------------
4
SQL> c/'i'/'ssi'
1* select num_chars('miSSissipPi','ssi') from dual
SQL> /
NUM_CHARS('MISSISSIPPI','SSI')
------------------------------
2
SQL> c/ssi'/ppi'
1* select num_chars('miSSissipPi','ppi') from dual
SQL> /
NUM_CHARS('MISSISSIPPI','PPI')
------------------------------
1
SQL> c/'ppi/'p
1* select num_chars('miSSissippi','p') from dual
SQL> /
NUM_CHARS('MISSISSIPPI','P')
----------------------------
2
SQL> c/p'/s'
1* select num_chars('miSSissippi','s') from dual
SQL> /
NUM_CHARS('MISSISSIPPI','S')
----------------------------
4
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes