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

UPDATE de una tabla desde una subconsulta

Estas en el tema de UPDATE de una tabla desde una subconsulta en el foro de Oracle en Foros del Web. tengo lo siguiente: - tabla A con los campos a1, a2, a3, a4 y a5 - subconsulta B (que a su vez está formada por ...
  #1 (permalink)  
Antiguo 16/06/2008, 11:34
Avatar de acervantes  
Fecha de Ingreso: agosto-2003
Ubicación: Madrid
Mensajes: 311
Antigüedad: 17 años, 2 meses
Puntos: 1
UPDATE de una tabla desde una subconsulta

tengo lo siguiente:
- tabla A con los campos a1, a2, a3, a4 y a5
- subconsulta B (que a su vez está formada por otra subconsulta) con los campos b1, b2, b3, b4, b5

y necesito lo siguiente:
* actualizar a4 con b4 y a5 con b5; la condición de join es a1=b1 and a2=b2 and a3=b3


he probado con merge pero me da error ORA-00905: falta una palabra clave si es que no adiciono el insert y values (pero lo que yo quiero es sólo hacer UPDATE. no tengo mucha experiencia en sql, en todo caso como haría consulta con un UPDATE normal?

Cita:
MERGE INTO A
USING (SELECT b1, b2, b3, b4, b5 FROM es_subconsulta_probada) B
ON(a.A1 = b.b1 and a.a2 = b.b2 and a.a3 = b.b3)
WHEN MATCHED THEN
UPDATE SET a.a4 = b.b4,
a.a5 = b.b5
NOTA: es_subconsulta_probada es una subconsulta que me devuelve los valores deseados; esta es la complejidad.
es_subconsulta_probada podría contener algo como esto (lo que debe de importar es que devuelve los campos que necesitamos):
SELECT b1, b2, b3, b4, b5
FROM XXX,
(
SELECT
S.b1, S.b2, S.b3, S.b4, S.b5
FROM OTRATABLA S, tabl666 t
WHERE t.tabl='L026'
and s.yyy = t.yyy
GROUPBY S.xxx, S.yyy
) BBB
WHERE XXX.abc = S.abc


__________________
ACervantes

[El éxito dura hasta que alguien las caga; los errores son eternos]

Última edición por acervantes; 16/06/2008 a las 13:15
  #2 (permalink)  
Antiguo 16/06/2008, 12:11
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 13 años
Puntos: 85
Respuesta: UPDATE de una tabla desde una subconsulta

Hola,

Si cambias la palabra es_subconsulta_probada por la tabla b, la consulta funciona bien, habra que ver todo el codigo.

Saludos
  #3 (permalink)  
Antiguo 16/06/2008, 13:08
Avatar de acervantes  
Fecha de Ingreso: agosto-2003
Ubicación: Madrid
Mensajes: 311
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: UPDATE de una tabla desde una subconsulta

gracias matanga,
voy a modificar el código (pero en realidad es más complejo de lo que lo pondré, lo que importa es que al final obtenemos los campos B que menciono)
y olvidé comentarles que es para ORACLE esta consulta.

NOTA: ES UNA SUBCONSULTA, NO IMPORTA CUAN COMPLEJA O SIMPLE SEA LO QUE IMPORTA ES QUE SUS DATOS SON LOS QUE USAMOS, Y QUE SON ÚNICOS. PERO NO HAY QUE COMPLICARLA MÁS.
__________________
ACervantes

[El éxito dura hasta que alguien las caga; los errores son eternos]

Última edición por acervantes; 16/06/2008 a las 13:16
  #4 (permalink)  
Antiguo 17/06/2008, 11:49
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 13 años
Puntos: 85
Respuesta: UPDATE de una tabla desde una subconsulta

Hola,

No entendi, ¿ahora funciona o no? ORA-00905 es un error de sintaxis, por eso te decia de postear la consulta completa.

Saludos
  #5 (permalink)  
Antiguo 18/06/2008, 08:55
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: UPDATE de una tabla desde una subconsulta

Código:
MERGE INTO A 
USING (SELECT b1, b2, b3, b4, b5 FROM es_subconsulta_probada) B
ON(a.A1 = b.b1 and a.a2 = b.b2 and a.a3 = b.b3)
WHEN MATCHED THEN 
UPDATE SET a.a4 = b.b4, 
a.a5 = b.b5
No veo el ";" al final del merge, algunos se les pasa por alto. Debería funcionar correctamente sin necesidad de utilizar el insert dentro del merge, puede trabajar conrrectamente con el update. Como dijo matanga, puede ser un error de sintaxis.

Saludos,
  #6 (permalink)  
Antiguo 18/06/2008, 09:41
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: UPDATE de una tabla desde una subconsulta

Que Tal,

Obviamente tu problema no es por el ";" ya que tienes el error que te marca al al ejecutarlo y para esto necesitaste colocar el ";" o el "/".

Más bien creo que tu problema puede ser por la parte de la versión de Oracle que estas usando. El Merge salió con la versión 9i de Oracle, pero en esa versión es obligatorio que pongas la opcion WHEN NOT MATCHED THEN y después tu orden Insert.

Ya en la Versión Oracle 10g, es posible ejecutar un Merge solamente para un Update.

Entonces si tu versión es 9i Tendrías que hacer tu Update de la Siguiente manera.

Update a
SET (a.a4,a.a5) = (SELECT b.b4, b.b5
FROM b
WHERE a.a1 = b.b1
AND a.a2 = b.b2
AND a.a3 = b.b3)
WHERE EXISTS (SELECT 1
FROM b
WHERE a.a1 = b.b1
AND a.a2 = b.b2
AND a.a3 = b.b3)
/

Espero que esto te sea de Utilidad.

Saludos.
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 02:54.