números inválidos em tabelas Oracle pode ser frustrante e fazer com que código bem formado se comportar de maneiras inesperadas e indesejáveis , resultando na ORA- 01722 erro Oracle. O erro número inválido no Oracle surge , às vezes de uma forma aparentemente aleatória , quando o código SQL está escrito que utiliza uma coluna baseada em caracteres para operações matemáticas e um caractere não- numérico é encontrado. Para piorar a situação , este erro não irá sempre ocorrer mesmo que as condições para que sejam satisfeitas. Isto é principalmente devido à forma como a tabela é percorrido quando se está sendo digitalizado para os dados de correspondência. Coisas que você precisa
banco de dados Oracle
tabela com uma coluna VARCHAR2
dados de ambos os tipos numéricos e não-numéricos na coluna VARCHAR2
Show Mais instruções
Evite o erro antes isso acontece
1
Criar uma tabela com colunas corretamente definidos. Por exemplo :
CRIAR numbers_and_words TABELA
( number_col AS número,
word_col AS varchar2 (100) )
2
Programa o aplicativo para só colocar os dados numéricos na coluna number_col e dados de caracteres na coluna word_col .
3
Criar uma condição de verificação no aplicativo que garante que os dados numéricos não está sendo passado para a coluna number_col . Oracle vai permitir que a representação de caracteres de um número para ser armazenado em uma coluna de caracteres .
Trabalhar em torno dele
4
Escreva uma função para pegar os dados não- numéricos. Um exemplo :
CREATE FUNCTION is_numeric (str IN VARCHAR2 )
número de devolução
IS
num NUMBER;
BEGIN < br >
num: = TO_NUMBER (str );
return 1;
EXCEÇÃO
QUANDO OUTROS ENTÃO
return 0;
END;
5
Escrever uma visão que usa a função para criar uma representação da tabela sem dados não numéricos. Supondo-se que o nome da tabela é t1 ea coluna com os dados mista é chamada de " mixed_col ", um somente numérico vista poderia ser escrito da seguinte forma:
CREATE VIEW numbersonly AS
Selecione mixed_col DE t1
ONDE is_numeric ( mixed_col ) = 1
6
Use a exibição numbersonly em consultas que precisa fazer operações baseadas numéricos na coluna. Por exemplo :
SELECT * FROM numbersonly
ONDE mixed_col > 35