Oracle - EMERGENCIA AYUDA!!!!!!!!

 
Vista:

EMERGENCIA AYUDA!!!!!!!!

Publicado por Andres Felipe Franco (5 intervenciones) el 30/10/2006 22:36:33
Hola a todos tengo un problema...y lo tengo que entregar pronto alguien me podria colaborar

miren esta actualizacion

UPDATE HABITACION
SET VALOR_DIA=(SELECT hab_comod.total
FROM HAB_COMOD,habitacion
WHERE HABITACION.NROHABIT=HAB_COMOD.NROHABIT);

y me aparece ERROR en línea 2:
ORA-01427: single-row subquery returns more than one row

si alguien me pude ayudar se lo agradezco de todo corazon......

adios.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:EMERGENCIA AYUDA!!!!!!!!

Publicado por Ricardo (84 intervenciones) el 31/10/2006 20:17:45
Andres:

Esto se debe a que la sub consulta de la sual sacás el dato fuente para hacer la actualizacion te devuelve mas de un dato.

"ORA-01427: single-row subquery returns more than one row"

Este es tu update:

UPDATE HABITACION
SET VALOR_DIA=(SELECT hab_comod.total
FROM HAB_COMOD,habitacion
WHERE HABITACION.NROHABIT=HAB_COMOD.NROHABIT);

Tendrías que fijarte por que

"SELECT hab_comod.total FROM HAB_COMOD,habitacion WHERE HABITACION.NROHABIT=HAB_COMOD.NROHABIT" te esta devolviendo mas deuna fila.

En caso de no poder llegar a una solucion definitiva, como lograr que devuelva una y solo una fila para poder hacer el update asi, te recomendaría probar con esto:

UPDATE HABITACION
SET VALOR_DIA=(SELECT hab_comod.total
FROM HAB_COMOD,habitacion
WHERE HABITACION.NROHABIT=HAB_COMOD.NROHABIT and rowmum=1);

Espero que te haya servido la respuesta.

Saludos
Ricardo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EMERGENCIA AYUDA!!!!!!!!

Publicado por Alejandro César (189 intervenciones) el 03/11/2006 19:13:18
Compañero te recomiendo revisar bien la lógica del DML padre (UPDATE HABITACION...) pues así como está escrito (sin cláusula WHERE) actualizará toda la tabla con el mismo valor que regrese la subconsulta.

Incluso, de ese aparente error de lógica se está derivando el too many rows de la subconsulta pues en ella tenés un join de HAB_COMOD de nuevo con la tabla que estás intentando actualizar (de no ser por el too many rows, este escenario te daría otro error de tabla mutante).

Me parece que el DML debería ser::

UPDATE HABITACION H
SET H.VALOR_DIA=(SELECT HC.total
FROM HAB_COMOD HC
WHERE H.NROHABIT=HC.NROHABIT);

Esto estará bien si la relación entre HABITACION y HAB_COMOD es de 1 a 1 obligatoria (es decir que para cada registro en HABITACIÓN debe existir un registro en HAB_COMOD). Si es de 1 a muchos, tendrás que usar una función de grupo (SUM, MAX, MIN) o una llave compuesta que te garantice que la subconsulta retornará un único valor.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar