06/11/2012, 18:37
|
| | Fecha de Ingreso: noviembre-2012 Ubicación: Cali - Colombia
Mensajes: 46
Antigüedad: 12 años Puntos: 0 | |
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. |