Foros del Web » Programación para mayores de 30 ;) » Java »

Consulta SQL en java

Estas en el tema de Consulta SQL en java en el foro de Java en Foros del Web. Sinceramente no se en que foro postearlo, aunque lo voy a crear tambien en el de Oracle Resulta que necesito actualizar la columna cantidad de ...
  #1 (permalink)  
Antiguo 06/11/2012, 18:42
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Consulta SQL en java

Sinceramente no se en que foro postearlo, aunque lo voy a crear tambien en el de Oracle

Resulta que necesito actualizar la columna cantidad de una tabla llamada ingrediente, Para actualizarla necesito hacer un resta cogiendo la cantidad de otra tabla llamada Receta.

Con una sentencia mas o menos parecida a esta

update Ingrediente a
set a.Cantidad = a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100)
where b.CodigoIngrediente =a.CodigoIngrediente
AND Receta.CodigoProducto=100

SELECT b.Cantidad FROM Ingrediente a,Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100

me trae esto

CANTIDAD
1
45
70

y Cambiando b por a. osea

SELECT a.Cantidad FROM Ingrediente a,Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100

Me trae Esto

CANTIDAD
1500
5400
40000

Lo que necesito es Restarle

CANTIDAD
1
45
70

A

CANTIDAD
1500
5400
40000

Y actualizada la tabla quede así

CANTIDAD
1499
5355
39930


Aqui esta la pregunta mas concreta para ejecutar como sentencia SQL en oracle
http://www.forosdelweb.com/f100/consulta-sql-actualizar-datos-1021734/

Al ver que depronto se me dificulto, Hay alguna forma de Hacer esto en java, Es decir guardando los resultados en algun tipo de arreglo o un ArrayList y luego restarlos para asi con esos datos hacer el update de la Tabla?
  #2 (permalink)  
Antiguo 07/11/2012, 04:22
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Consulta SQL en java

cambia select a.cantidad por select a.cantidad as cantidadMayor en un caso y select a.cantidad as cantidadMenor en el otro.

Cuando lo tengas haces un select (t.cantidadMayor - t.cantidadMenor) as cantidadFinal from (select1 UNION select2) t;

Donde t es una forma de llamar a la tabla intermedia generada por la union de los dos bloques de resultados.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 10/11/2012, 17:48
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta SQL en java

Cita:
Iniciado por Fuzzylog Ver Mensaje
cambia select a.cantidad por select a.cantidad as cantidadMayor en un caso y select a.cantidad as cantidadMenor en el otro.

Cuando lo tengas haces un select (t.cantidadMayor - t.cantidadMenor) as cantidadFinal from (select1 UNION select2) t;

Donde t es una forma de llamar a la tabla intermedia generada por la union de los dos bloques de resultados.
Quedé como medio perdido...
  #4 (permalink)  
Antiguo 11/11/2012, 15:40
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Consulta SQL en java

Tampoco es tan dificil pensar un poco

SELECT (t.cantidadMayor - t.cantidadMenor) as cantidadFinal from ((SELECT a.Cantidad as cantidadMayor FROM Ingrediente a, Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente AND b.CodigoProducto=100) UNION (SELECT b.Cantidad as cantidadMenor FROM Ingrediente a, Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100)) t;
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 11/11/2012, 18:56
 
Fecha de Ingreso: octubre-2012
Ubicación: Bogotá
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Consulta SQL en java

Creo que es mejor usar procedimientos almacenados para eso, en la base de datos serían unas 3 consultas, y en java serían como 40 lineas
  #6 (permalink)  
Antiguo 12/11/2012, 12:34
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta SQL en java

Cita:
Iniciado por Fuzzylog Ver Mensaje
Tampoco es tan dificil pensar un poco

SELECT (t.cantidadMayor - t.cantidadMenor) as cantidadFinal from ((SELECT a.Cantidad as cantidadMayor FROM Ingrediente a, Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente AND b.CodigoProducto=100) UNION (SELECT b.Cantidad as cantidadMenor FROM Ingrediente a, Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100)) t;
"Tampoco es tan dificil pensar un poco"
R/ De todos modos disculpa no seré el mejor en Bases de Datos, pero Creo que deberías ser mas paciente, ya que este foro es para ayudar a los que desconocen algunas cosas. De todos modos muchas Gracias.

Por cierto tu solución me da este error.. Tienes alguna idea de cual es?

ORA-00904: "T"."CANTIDADMENOR": identificador no válido
  #7 (permalink)  
Antiguo 12/11/2012, 18:35
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Consulta SQL en java

Sí, que no reconoce el parámetro dentro de la vista. Ahora queda averiguar por qué.

Googlea, investiga y revisa la documentación de oracle. Luego haz pruebas con diferentes variaciones, intenta conseguir la vista correspondiente a la union de las dos querys primero y luego trata de sacar lo que buscas.

Solo la práctica, pruebas y errores pueden hacer que aprendas.
Lo que no deberías es sentarte a esperar a que otros solucionen los problemas que tienes.
Por mi parte, te estoy ayudando a ciegas, ni tengo tu base de datos ni siquiera la aplicación para hacer las querys así que normal que mis soluciones no acierten de cara.

:) tu turno
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 12/11/2012, 18:45
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Consulta SQL en java

También es cierto que si ves que se te complica demasiado, desde el manager puedes llamar a dos consultas diferentes del dao que te devuelvan las cantidades mayor y menor por separado, volcando cada resultset en su correspondiente arraylist y verificando sus tamaños para poder hacer la resta con seguridad.

Esto si sigues el patrón habitual de acceso a datos, que si no el manager y el dao te sonarán a chino.

ánimo
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 13/11/2012, 09:26
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Consulta SQL en java

Muchas Gracias viejo Fuzzylog ya logré dar con la solución, Era usando el NVL, hace tiempo probé con el y no di con el chiste pero resulta que así era.

Yo le mandé esta consulta así a Un usuario llamado joeglo

Cita:

UPDATE Ingrediente a
SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100),0)
where b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100
Resulta que si era asi, agregandole un Where al update solo que no de esa manera, joeglo me colaboró arreglando este Where, y queda así funcionando perfecto

UPDATE Ingrediente a
SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100),0)
WHERE a.CodigoIngrediente IN (SELECT c.CodigoIngrediente FROM Receta c WHERE c.CodigoProducto=100)

De todos modos muchas Gracias por la ayuda

y tambien por los consejos como este
Cita:
Lo que no deberías es sentarte a esperar a que otros solucionen los problemas que tienes.
Tienes razon, pero es que llevaba mas de 3 semanas casi un Mes tratando con esto de una u otra manera. Por eso recurrí a alguna ayuda externa.
  #10 (permalink)  
Antiguo 13/11/2012, 11:13
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Consulta SQL en java

Felicidades, te ha quedado una query perfecta.

No sé si es por la forma de explicarte pero he tenido la sensación de que simplemente estabas a la espera de que alguien te diese una respuesta para probar su solución sin buscarle variantes u otras alternativas. Si no fue así, entonces disculpa.

Por otra parte, y con respecto a la query, el NVL lo que hace es ver si tienes algún valor null y te lo inicializa al valor que tengas marcado (en tu caso el cero).

Espero que no te lo hayas tomado mal, teniendo en cuenta que hay otros usuarios con menos paciencia que yo, y a los que incluso he llegado a regañar por ello (xD) que igual en este post me podrían haber dicho lo mismo a mi.

^-^

Bueno nos vemos
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: actulizar, conexion, restar, update, bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:26.