Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/11/2012, 18:37
jose920405
 
Fecha de Ingreso: noviembre-2012
Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 12 años
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.