Stack Overflow en español Asked by nasito90 on August 27, 2021
tengo la siguiente consulta porque llevo un montón de tiempo con ella y es que no logro sacarla:
Uso SQL developer y Eclipse (java y jsp), y tengo lo siguiente:
Tabla1: Un valor decimal
mi_valor NUMBER(9,2)
En eclipse con sentencias parametrizadas:
String mi_valor; (aqui es String).
String query = "update Tabla1 set mi_valor = ?valor";
SentenciaPreparada sp = crearSentencia(query);
sp.ponParametro("valor", mi_valor.replace(".",","); --> Esto es porque en Java lo recogemos como por ejemplo 1.07 pero en SQL tiene que ser 1,07.
sp.ejecutaUpdate();
Una vez me funciona, pero luego durante un rato me deja de funcionar y me sale el dichoso ORA-01722: Numero no valido
y saco por traza la sentencia.
Lo curioso es que esa misma sentencia que me da error, la ejecuto en SQL Developer y me funciona perfectamente, y si pruebo mas adelante me vuelve a funcionar una vez, pero solo una, y luego deja de funcionar…
Por traza lo que saca es update Tabla1 set mi_valor = '1,07'
, que me funciona perfectamente en el Developer.
Tambien he probado poniendo:
update Tabla1 set mi_valor = to_number(replace(?valor,'.',','));
Pero pasa lo mismo, en SQL developer correctisimo ya que la traza de la sentencia es la misma, y desde la aplicación me funciona una vez si y luego ya no…
Es un ejemplo tonto para no saturar con una tabla grande y un montón de parámetros y trazas, aunque si es necesario lo pongo.
Y también decir que no soy un gran experto en la materia, recientemente he empezado a trabajar con ello.
Muchas gracias y un saludo.
Ya que tienes un PreparedStatement prueba realizar los siguientes cambios:
La consulta para agregar un valor es INSERT, UPDATE es para actualizar el valor de uno o varios registros.
Consulta SQL: INSERT INTO Tabla1(mi_valor) VALUES(?)
PreparedStatement: sp.setDouble(1, Double.valueOf(mi_valor)) ;
El número 1
en setDouble
significa la primera variable representada por el primer símbolo ?
, de esta forma el PreparedStatement
se encargara de la correcta Traducción a la hora de insertar el valor numerico.
Como recomendación no manejes los numeros como String ya que es una mala practica.
Correct answer by Roberto E Moran on August 27, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP