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

Poner limite y orden al update

Estas en el tema de Poner limite y orden al update en el foro de Oracle en Foros del Web. Hola compañeros, tengo la siguiente consulta y necesito ponerle un limite,se que es con rownum pero no se en que parte va: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 21/02/2018, 20:07
 
Fecha de Ingreso: octubre-2011
Mensajes: 119
Antigüedad: 6 años, 10 meses
Puntos: 4
Poner limite y orden al update

Hola compañeros, tengo la siguiente consulta y necesito ponerle un limite,se que es con rownum pero no se en que parte va:

Código SQL:
Ver original
  1. UPDATE acceso_sala_solicitud
  2.     SET id_estado_oym = 1
  3.     WHERE codigo IN
  4.     (
  5.         SELECT DISTINCT(t1.codigo) FROM ACCESO_SALA_FECHAS t1 GROUP BY t1.codigo HAVING
  6.         (
  7.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo) -
  8.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo AND id_estado_oym = 2)
  9.         ) != 0
  10.     ) AND STATUSGO = 'APR';

y en orden desc, espero su ayuda gracias de antemano.
  #2 (permalink)  
Antiguo 06/05/2018, 14:56
Avatar de vicram10  
Fecha de Ingreso: enero-2009
Ubicación: Asuncion
Mensajes: 313
Antigüedad: 9 años, 6 meses
Puntos: 27
Respuesta: Poner limite y orden al update

realmente depende, pero seria de la siguiente forma

Código SQL:
Ver original
  1. UPDATE acceso_sala_solicitud
  2.     SET id_estado_oym = 1
  3.     WHERE codigo IN
  4.     (
  5.         SELECT DISTINCT(t1.codigo) FROM ACCESO_SALA_FECHAS t1 GROUP BY t1.codigo HAVING
  6.         (
  7.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo) -
  8.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo AND id_estado_oym = 2)
  9.         ) != 0
  10.     ) AND STATUSGO = 'APR'
  11.     AND ROWNUM <= 100;

aqui lo que haces es traer todas las coincidencias (IN) y decirle despues que solo 10 tenga en cuenta.
pero si lo que quieres es optimizado y no haga un recorrido por toda la tabla y luego recien haga el rownum entonces seria en la siguiente parte

Código SQL:
Ver original
  1. UPDATE acceso_sala_solicitud
  2.     SET id_estado_oym = 1
  3.     WHERE codigo IN
  4.     (
  5.         SELECT DISTINCT(t1.codigo) FROM ACCESO_SALA_FECHAS t1 WHERE ROWNUM <= 100 GROUP BY t1.codigo HAVING
  6.         (
  7.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo) -
  8.             (SELECT COUNT(codigo) FROM ACCESO_SALA_FECHAS WHERE codigo = t1.codigo AND id_estado_oym = 2)
  9.         ) != 0
  10.     ) AND STATUSGO = 'APR';
__________________
Asunción Paraguay
Licenciado - Desarrollador Web - Gerente Desarrollo TI (BEPSA)
Espacio Geek - Comunidad Tecnologica
  #3 (permalink)  
Antiguo 16/05/2018, 07:56
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Poner limite y orden al update

Necesitas usar funciones analiticas.
ROW_NUMBER() OVER([PARTITION BY COLUMN_NAME] ORDER BY OTHER_COLUMN_NAME DESC) ORDEN

El uso de la funcion analitica ROW_NUMBER es la clave para solucionar tu problema DEFINITIVAMENTE.

Te mando un saludo grande,
Mario.
__________________
Y venció David al filisteo con honda y piedra; e hirió al filisteo y lo mató, sin tener David espada en su mano.



La zona horaria es GMT -6. Ahora son las 09:51.