ORA-01722: número inválido
Passar dois códigos para select em procedure
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
Pessoal tenho um select que recebe um campo com in () para gerar esse select com vários números, eu passo esses valores via parametro na procedure, tipo (cod1, cod2, cod3), contudo está dando o erro
Minha dúvida é quanto a sintaxe para que a procedure recebe os valores e passe para o select corretamente. A variável da procedure é do tipo string para receber todos os números, se eu passo somente 1 código funciona, porém mais acusa o erro.
- dr_gori
- Moderador
- Mensagens: 5018
- 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
Isso que você está tendando fazer só vai funcionar com SQL dinâmico.
Você está fazendo o IN desas forma:
Sendo a var um VARCHAR com todas opções separadas por vírgula.
O Oracle vai substituir da seguinte forma:
Ou seja, está misturando Número com uma STRING.
Você está fazendo o IN desas forma:
where campo IN (5, 2, var)
O Oracle vai substituir da seguinte forma:
where campo IN (5, 2, '5, 10, 20')
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Bom, teu caso realmente creio ser de select dinâmico (DBMS_SQL ou REF_CURSOR).
Mas, fica aqui a dica do replace:
Mas, fica aqui a dica do replace:
SELECT REPLACE('paulo&','&',null) FROM dual;
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
Cara eu acho que não me expressei direito, mas quanto ao select tranquilo, mas se eu tentar remover o ' da seguinte maneira:
Para remover o ' vai dar erro, pois o ' é um comando. O que eu preciso saber qual é o caracter de escape que faça que o ' central seja interpretado como uma string e não como parte do comando.
replace(var, ''', null);
- dr_gori
- Moderador
- Mensagens: 5018
- 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
Não vai funcionar.
Você quer fazer assim:
Pro oracle quando tem duas '' ele trata sendo apenas uma. OU, usando chr(39).
O fato é que você não vai conseguir "enganar" ele dessa forma. O SQL não trabalha concatenando coisas como em outras linguagens. Como eu disse antes: Só vai conseguir fazer dessa forma se for um SQL Dinâmico! Daí pode fazer esses "rolos" que funciona numa boa.

Você quer fazer assim:
replace(var, '''', null); ]
replace(var, chr(39), null);
O fato é que você não vai conseguir "enganar" ele dessa forma. O SQL não trabalha concatenando coisas como em outras linguagens. Como eu disse antes: Só vai conseguir fazer dessa forma se for um SQL Dinâmico! Daí pode fazer esses "rolos" que funciona numa boa.

-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes