Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta SQL Actualizar datos

Estas en el tema de Consulta SQL Actualizar datos en el foro de Oracle en Foros del Web. Resulta que necesito actualizar la columna cantidad de una tabla llamada ingrediente, Para actualizarla necesito hacer restar la cantidad de otra tabla llamada Receta. La ...
  #1 (permalink)  
Antiguo 06/11/2012, 18:37
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Consulta SQL Actualizar datos

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

La sentencia que tengo es así

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

Pero me da este error. Que estoy haciendo mal? porque me dice Valor Null?

ORA-01407: no se puede actualizar ("JOSE"."INGREDIENTE"."CANTIDAD") a un valor NULL

Solo esta consulta

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

por eso digo que al hacer el

update Ingrediente a
set a.Cantidad

Estaría hablando de todos los datos que tenga el campo cantidad en la tabla ingrediente, y es obvio que tengo muchos, Por lo que necesitaría agregarle un where al update.
Entonces en el update deberia de haber el mismo where mas o menos asi.

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

Pero esto no me funciona me da este error
"RECETA"."CODIGOPRODUCTO": identificador no válido

Si cambio Receta por b. También me sale el mismo error, en vez de receta sale b
"b"."CODIGOPRODUCTO": identificador no válido


Aclaraciones: Las dos cantidades son Not Null,y las dos cantidades son Tipo NUMBER

he probado el NVL asi:

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

Me sigue saliendo este mismo error

Sinceramente no estoy muy familiarizado con las Consultas PLSQL, pero me han dicho que eso como que se hace con un trigger o algo parecido.

En realidad lo que necesito es pasar esa sentencia a Java y con solo el CodigoProducto como parametro ejecutar esa sentencia.
  #2 (permalink)  
Antiguo 07/11/2012, 04:24
Avatar de triqui  
Fecha de Ingreso: diciembre-2008
Ubicación: Zaragoza(España)
Mensajes: 624
Antigüedad: 15 años, 4 meses
Puntos: 31
Respuesta: Consulta SQL Actualizar datos

Has probado esto?

Código SQL:
Ver original
  1. UPDATE Ingrediente a
  2. SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
  3. AND b.CodigoProducto=100),0)
__________________
La nueva red social de quinielas quiniela resultados
Cazaresultados Futbol base en directo
  #3 (permalink)  
Antiguo 07/11/2012, 09:16
 
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 Actualizar datos

Cita:
Iniciado por triqui Ver Mensaje
Has probado esto?

Código SQL:
Ver original
  1. UPDATE Ingrediente a
  2. SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
  3. AND b.CodigoProducto=100),0)
Excelente Amigo muchas gracias, esa era la solución.
  #4 (permalink)  
Antiguo 07/11/2012, 19:39
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta SQL Actualizar datos

Cita:
Iniciado por triqui Ver Mensaje
Has probado esto?

Código SQL:
Ver original
  1. UPDATE Ingrediente a
  2. SET a.Cantidad = NVL(a.Cantidad -(SELECT b.Cantidad FROM Receta b WHERE b.CodigoIngrediente =a.CodigoIngrediente
  3. AND b.CodigoProducto=100),0)
Men ya lo revisé mejor, pero hay un gran problema:

Resulta que me actualiza todas las cantidades de los ingredientes del producto 100, Pero lo que pasa es que el resto de los ingredientes que no usa el producto 100 me los deja en 0, cual es ese error? porq?

Lo mas posible es que le falte un where al Update, Igual que se usa en el select

Algo como asi
WHERE b.CodigoIngrediente =a.CodigoIngrediente
AND b.CodigoProducto=100

Será que es eso? pero lo pruebo y no funciona

Última edición por jose920405; 07/11/2012 a las 19:54
  #5 (permalink)  
Antiguo 08/11/2012, 07:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta SQL Actualizar datos

Hola

Te recomiendo este enlace:
http://stackoverflow.com/questions/2...ith-inner-join

En oracle es posible hacerle un update a una subconsulta.
Cita:
UPDATE
(SELECT table1.value, table2.CODE
FROM table1
INNER JOIN table2
ON table1.value = table2.DESC
WHERE table1.UPDATETYPE='blah'
)
SET table1.value = table2.CODE
trata de acomodar tus tablas al ejemplo y nos cuentas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: plsql, sql, update
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 06:35.