¿Ayuda Oracle 10g Sentencia Sql?

265 views
Skip to first unread message

Jose Omar Gonzalez

unread,
Oct 24, 2012, 6:16:05 PM10/24/12
to publice...@googlegroups.com
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.

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

lo he probado también asi:

update Ingrediente
set Ingrediente.Cantidad=Ingrediente.Cantida… 
where Receta.CodigoIngrediente=Ingrediente.Cod… AND Receta.CodigoProducto=100

Pero me da este error

ORA-00904: "RECETA"."CODIGOPRODUCTO": identificador no válido 

Que puede ser? hay alguna forma de poner esta sentencia para que funcione bien?

Aclaracion: las dos cantidades. Tanto la de Ingrediente como la Receta son Tipo Float

Roberto Matarrita

unread,
Oct 24, 2012, 6:45:45 PM10/24/12
to publice...@googlegroups.com
Yo te aconsejaria que revices el campo cantidad en ambas tablas y verifiques si alguno de estos campos esta nulo y concuerda con la actualizacion que estas haciendo.
 
Pueda ser tanto en ingredientes, como en receta no tengas informacion de un codigo determinado y te este probocando el error.
 
Lo otro es que use el nvl. a Ver como te funciona.
 
Roberto
Costa Rica.
 
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)


--
 
 
 

Carlos Miguel FARIAS

unread,
Oct 25, 2012, 6:50:07 AM10/25/12
to publice...@googlegroups.com
Si la consulta te devuelve un a valor nulo (en el caso de la primer sentencia) que es lo normal si no encuentra nada en la otra tabla, te va a dar error al intentar restar a un número un valor nulo.
Deberías envolver a la subconsulta con alguna sentencia como IFNULL( sentencia, valor si nulo) o el equivalente en tu SGBD en uso para evitar el error.
Saludos: Miguel, La Pampa (RA)

--
 
 
 

OMAR ROJAS RUBRICHE

unread,
Oct 25, 2012, 9:55:43 AM10/25/12
to publice...@googlegroups.com

Prueba con:

 

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)

 

 

OMAR ROJAS RUBRICHE

--
 
 
 

“El contenido de este documento y/o sus anexos son para uso exclusivo de su destinatario intencional y puede contener Información legalmente protegida por ser privilegiada o confidencial. Si usted no es el destinatario intencional de este documento por favor Infórmenos de inmediato y elimine el documento y sus anexos. Igualmente el uso indebido, revision no autorizada, retención, distribución, divulgación, reenvío, copia, impresión o reproducción de este documento y/o sus anexos está estrictamente prohibido y sancionado legalmente. Agradecemos su atención. Grupo Empresarial EPM” "The contents of this transmissions and its attachments are for exclusive use of the intended recipient and may contain privileged or confidential information. If you are not the intended recipient of this document, please immediately reply to the sender and delete this information and its attachments from your system. Likewise, the misuse, unauthorized review, any retention, dissemination, distribution, disclosure, forwarding, copying, printing or reproduction of this transmission, including any attachments, is strictly prohibited and punishable by law. Thank you for your attention. Grupo Empresarial EPM"
Reply all
Reply to author
Forward
0 new messages