Números válidos en tablas de Oracle puede ser frustrante y causar código bien formado para comportarse de forma inesperada y no deseada , lo que resulta en el ORA- 01722 error de Oracle . El error número inválido en Oracle surge , a veces de una manera aparentemente aleatoria , cuando el código SQL se escribe que utiliza una columna basada en caracteres para las operaciones matemáticas y se encuentra un carácter no numérico . Para empeorar las cosas , este error no siempre ocurren a pesar de que se cumplen las condiciones para ello . Esto es debido a la forma en que una tabla está atravesada cuando se está escaneando para hacer coincidir los datos principalmente . Cosas que necesitará
base de datos Oracle
tabla con una columna VARCHAR2
datos tanto de tipo numérico y no numéricos en la columna VARCHAR2
Mostrar más instrucciones Cómo evitar el error antes de it Happens
1
Crear una tabla con columnas correctamente definidos. Por ejemplo :
CREATE TABLE numbers_and_words
( number_col número AS ,
word_col COMO varchar2 ( 100 ) )
2 Programa
la aplicación sólo colocar los datos numéricos en los datos de la columna y el carácter number_col en la columna word_col .
3
Crear una condición de control en la aplicación que asegura los datos numéricos no se están pasando a la columna number_col . Oracle permite la representación de caracteres de un número que se almacena en una columna de caracteres .
Trabajar alrededor de ella
4
escribir una función para capturar los datos no numéricos . Un ejemplo :
CREAR is_numeric FUNCIÓN (str EN VARCHAR2 ) RETURN
NÚMERO
NÚMERO num;
COMENZAR < br >
num: = TO_NUMBER (str ) ;
RETURN 1 ;
EXCEPCIÓN CUANDO OTROS ENTONCES
return 0;
< p> END;
5
Escribir una vista que utiliza la función para crear una representación de la mesa sin datos no numéricos . Suponiendo que el nombre de la tabla es t1 y la columna con los datos mixtos se llama " mixed_col , " una visión sólo numérico se puede escribir de la siguiente manera :
CREATE VIEW numbersonly AS
SELECCIONAR mixed_col DE t1
DONDE is_numeric ( mixed_col ) = 1
6
Utilice la vista numbersonly en las consultas que necesiten hacer operaciones numéricas basadas en la columna. Por ejemplo :
SELECT * FROM numbersonly
DONDE mixed_col > 35