Muy fácil para alguien,
El siguiente insertar me está dando la

ORA-01722: no válido número de

¿por qué?

INSERT INTO CUSTOMER VALUES (1,'MALADY','Claire','27 Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (2,'GIBSON','Jake','27 Smith St Caulfield','0415 713 598');
INSERT INTO CUSTOMER VALUES (3,'LUU','Barry','5  Jones St Malvern','0413 591 341');
INSERT INTO CUSTOMER VALUES (4,'JONES','Michael','7  Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (5,'MALADY','Betty','27 Smith St Knox','0418 418 347');
  • Así que… ¿cuál es la definición de la tabla para CUSTOMER? Usted sólo he dado la mitad de la información necesaria.
  • Los números de teléfono son la única cosa que podría razonablemente ser definido como un numéricos que sus datos no representan numérico (espacios no son numéricos). Así: compruebe la definición de la tabla y comparar con la entrada de las declaraciones.
  • ¿Por qué la gente voto a esta pregunta. Para las personas que son nuevos en las bases de datos, este es un error extraño. Puedo ver lo que encierra los valores de las citas podría hacer que se vea como una cadena. Sólo depende de lo que la base de datos de configuración es como. Todo puede ser cadenas o números, sólo depende de los campos. Tal vez fue un error al crear la base de datos.
  • Un Ejemplo donde la situación anterior se produce: insert into table_1 (rollNumber) values (‘123’); donde rollNumber es una columna de «tipo de número».
  • «De regreso en s’twelve, saqué un libro de la estantería, y respondió a un Oráculo pregunta. En ‘Pila todavía estoy adepto, con conocimiento me he mantenido, pero todavía no tengo un aceptar.«
  • Los números de teléfono no debería ser definido como numérico, para no perder los ceros a la izquierda.
  • Posibles duplicados de número no Válido en Oracle SQL Caso

12 Comentarios

  1. 110

    Una ORA-01722 error se produce cuando se realiza un intento para convertir una cadena de caracteres en un número, y la cadena no puede ser convertida en un número.

    Sin ver a su definición de la tabla, parece que usted está tratando de convertir la secuencia numérica al final de su lista de valores a un número, y los espacios que delimitan se están tirando este error. Pero en base a la información que nos has dado, que podría estar sucediendo en cualquier campo (excepto el primero).

    • Observe también que completar manualmente con un campo «(null)» le dará ese error. Si el defecto es null y no completa auto-completar con (null) pero no es el mismo cuando la escriba.
  2. 22

    Supongamos que el número de teléfono se define como NUMBER, a continuación, los espacios en blanco no se puede convertir en un número:

    create table telephone_number (tel_number number);
    insert into telephone_number values ('0419 853 694');

    El de arriba te da una

    ORA-01722: no válido número de

    • Es el mismo error de formato de fecha ?
    • Usted puede hacer una nueva pregunta. Pero no, eso es un mensaje de error diferentes. Depende de lo que su valor en la instrucción insert ist.
  3. 14

    Aquí es una manera de resolverlo. Quitar caracteres no numéricos, luego lanzarla como un número.

    cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)
    • Haciendo esto iba a quitar el 0 a la izquierda.
    • esto va a original OP – su columna de la tabla no puede ser de tipo «number» si desea almacenar valores como ‘0419 853 694’ porque no tiene ceros a la izquierda. en mi caso, sin embargo esto es justo lo que necesitaba, ty gmlacrosse!
  4. 10

    Como este error viene cuando usted está tratando de insertar valor no numérico en una columna numérica en db parece que su última campo puede ser numérico y usted está tratando de enviar una cadena de texto en la base de datos. verifique su último valor.

  5. 8

    Bien también puede ser :

    SELECT t.col1, t.col2, ('test' + t.col3) as test_col3 
    FROM table t;

    donde para la concatenación en oracle se utiliza el operador || no +.

    En este caso se obtiene : ORA-01722: invalid number ...

    • Eso es una buena. Otro venenosas destino puede ser este. Te comento un campo en un selecto Fieldlist como — t.fieldname. Más tarde, usted tiene la intención de eliminar el inicio de la línea de comentario, pero uno comentó carácter a la izquierda por accidente. Por lo tanto no es: – t.fieldname. Esto me pasó a mí, cuando yo estaba trabajando en una gran consulta, donde tengo que comentar/uncommment cientos de columnas, mientras que la reorganización de la bestia.
  6. 7

    Esto es debido a que:

    Se ejecuta una instrucción SQL que trató de convertir una cadena a un
    número, pero no tuvo éxito.

    Como se explica en:

    Para resolver este error:

    Sólo los campos numéricos o caracteres de los campos que contienen valores numéricos
    puede ser utilizado en las operaciones aritméticas. Asegúrese de que todas las expresiones
    evaluar a los números.

  7. 2

    En mi caso el error de conversión fue en funcional basado en el índice de, que yo había creado para la tabla.

    Los datos que se inserten estaba bien. Me tomó un tiempo para averiguar de que el error proviene de que el buggy índice.

    Sería bueno, si Oracle podría haber dado más precisa mensaje de error en este caso.

    • y un disparador podría causar este error así
  8. 2

    Tuve esta consulta:

    select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;

    Que se presenta un problema: Error: ORA-01722: invalid number

    Me han rodeado sólo de la «numérico» valores», para hacer de ellos 'Strings', y hacer de ellos un explícitamente delimitada:

    select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';

    …y voilà: devuelve el resultado esperado.

    edición:
    Y en efecto: el col acc_num en mi mesa se define como String. Aunque no numérico, la invalid number se informó. Y el explícita la delimitación de de la cadena de números resuelto el problema.

    Por otro lado, Oracle puede el tratamiento de Cadenas de caracteres como números. Así que el número de operaciones/funciones se pueden aplicar sobre las Cuerdas, y estas consultas de trabajo:

    seleccione max(string_column) de la TABLA;

    seleccione string_column de la TABLA donde string_column entre ‘2’ y ‘z’;

    seleccione string_column de la TABLA donde string_column > ‘1’;

    seleccione string_column de la TABLA donde string_column <= ‘b’;

    • me encontré con una situación similar. ora-01722 no válido-el número se ha disparado en una instrucción select, no una instrucción insert. He comprobado la definición de la tabla y se encontró que la columna era un varchar en lugar de número, así que he añadido comillas simples alrededor de la número de
  9. 1

    Si usted hace una insert into...select * from...declaración, es fácil conseguir el «Número no Válido’ error así.

    Supongamos que tiene una tabla denominada FUND_ACCOUNT que tiene dos columnas:

    AID_YEAR  char(4)
    OFFICE_ID char(5)

    Y digamos que usted desea modificar la OFFICE_ID a ser numérico, sino que hay filas existentes en la tabla, y peor aún, algunas de esas filas tienen un OFFICE_ID valor de «» (en blanco). En Oracle, usted no puede modificar el tipo de dato de una columna si la tabla tiene datos, y eso requiere un poco de engaño para convertir a » a 0. Así que aquí está cómo hacerlo:

    1. Crear un duplicado de la tabla: CREATE TABLE FUND_ACCOUNT2 AS SELECT * FROM FUND_ACCOUNT;
    2. Eliminar todas las filas de la tabla original: DELETE FROM FUND_ACCOUNT;
    3. Una vez que no hay datos en la tabla original, modificar el tipo de datos de su OFFICE_ID columna: ALTER TABLE FUND_ACCOUNT MODIFY (OFFICE_ID number);

    4. Pero entonces aquí está la parte difícil. Debido a que algunas filas contienen en blanco OFFICE_ID valores, si se hace una simple INSERT INTO FUND_ACCOUNT SELECT * FROM FUND_ACCOUNT2, usted conseguirá el «ORA-01722 Número no Válido error». Con el fin de convertir el » (espacio en blanco) OFFICE_IDs en 0, su instrucción insert tendrá que tener este aspecto:

    INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;

    • Este es un muy complicada ejemplo de un caso donde el error de puede producirse + una explicación de cómo resolver el caso concreto, que pueden no ser aplicables a todos.
  10. -1

    La ORA-01722 de error es bastante sencillo. De acuerdo a Tom Kyte:

    Hemos intentado, ya sea expresamente o implícitamente convertir una cadena de caracteres a un número y no.

    Sin embargo, cuando el problema es a menudo no es evidente a primera. Esta página me ayudó a solucionar, encontrar y solucionar mi problema. Sugerencia: busque los lugares donde se explícita o implícitamente convierte una cadena a un número. (Yo había NVL(number_field, 'string') en mi código.)

  11. -1

    probar esto así, cuando se tiene un número no válido error

    En este
    una.emplid es el número y b.emplid es un varchar2 así que si ha llegado a convertir en uno de los lados

    donde to_char(un.emplid)=b.emplid

  12. -4

    Usted puede utilizar siempre TO_NUMBER() función para eliminar este error.Este puede ser incluido como INSERT INTO empleados número_teléfono valores(TO_NUMBER(‘0419 853 694’);

Dejar respuesta

Please enter your comment!
Please enter your name here