Cómo puedo seleccionar en oracle sql en una Tabla de la primera x filas, a continuación, el siguiente de x, y así sucesivamente? Sé que podría utilizar la parte SUPERIOR/LÍMITE, luego me sale la primera x

select a from b limit 150 => obtener las 150 primeras filas.

Edit: ¿Por Qué? Me gustaría copiar las 150 primeras salidas a un archivo, a continuación, el siguiente 150 en otro archivo y así sucesivamente…

  • la pregunta es: ¿por qué?
  • Me gustaría copiar las 150 primeras salidas a un archivo, a continuación, el siguiente 150 en otro archivo y así sucesivamente…
  • con el código? o directamente de oracle?
  • a partir de oracle, o qué decir con el código?
  • un lenguaje de programación (no SQL), como C#, etc.
InformationsquelleAutor sabisabi | 2012-03-09

6 Comentarios

  1. 9

    En Oracle tiene la agradable rownum: es un pseudo columna. Que los números de los registros de un conjunto de resultados. El primer registro que cumpla con el, donde los criterios en una instrucción select se da rownum=1, y cada una de las subsiguientes registro de la reunión que los mismos criterios que aumenta rownum.

    SELECT 
        a, b
    FROM
        (SELECT rownum rn, a, b from table WHERE c=some_value ORDER BY some_column)
    WHERE 
        rn BETWEEN 150 AND 300;

    (gracias a @Marca Bannister)

    Si se incorpora la cláusula ORDER BY en una subconsulta y coloque el ROWNUM condición en la consulta de nivel superior, a continuación, puede forzar el ROWNUM condición para aplicar después de la orden de las filas.

    • hm no conseguirlo por qué escribe al final entre 150 y 300. Por qué 150/300?
    • es un ejemplo, usted puede poner los números que desee.
    • ese es el problema ^^, creo que esta solución no funciona para mí. Digamos que me gustaría tener los primeros 150, entonces el siguiente 150 y así sucesivamente… y mi tabla tengo 100000 filas. ¿Qué debo escribir para que entre? :/
    • No entiendo si se llama a un procedimiento almacenado. Si es así, usted podría pasar dos parámetros de rango (desde / hasta rownumbers), o simplemente hacer un bucle dentro del procedimiento para obtener los datos en fragmentos. Pero aún así, ¿por qué es que usted necesita chuncked de datos?
    • si quería copiar siempre 150 filas en un archivo. Para cada archivo consiguió en la final a sólo 150 filas.
    • Creo que vale la pena mencionar que no debe ser un order by en la consulta – de lo contrario cualquier rownum de selección basado en la voluntad de regresar de una selección aleatoria de n de los valores.
    • gracias, cambia la respuesta.
    • Personalmente me han vertido toda la cosa y, a continuación, utiliza un divisor de archivos de utiliity (muchas disponible en línea gratis) por lo que vale.

  2. 10

    LIMIT 150 o LIMIT 0,150 : 150 primeras filas

    LIMIT 150,150 : 150 filas

    LIMIT 300,150 : 150 filas

    y así sucesivamente

    • así que si tengo 100000 filas tengo que escribir un montón de cosas ^^… ?
    • configurar una variable de a = 1. LIMIT (a-1)*150,150. Incremento de un. (Este es pseudo SQL)
  3. 3

    Supongo que usted está tratando de hacer la paginación, si es así puedes hacerlo así:

    Vamos a pageSize ser 150

    SELECT * FROM
    (
        SELECT a.*, rownum r__
        FROM
        (
            SELECT * FROM tblName c
        ) a
        WHERE rownum < ((pageNumber * pageSize) + 1 )
    )
    WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
    • pageNumber es el valor de todas las filas en la tabla de la mano derecha?
    • No. Número de página es el número de página correspondiente. es decir, página 1, página 2, etc. cuando la paginación a través de los registros. page = 150 registros, página 2 = 150 registros y así sucesivamente.
  4. 0
    1. Primer lugar, obtener el id del último elemento de su selección de la parte superior de las filas por:

    (a) de la Consulta SQL de la siguiente manera:

    Select top 1 id from (SELECT TOP 150 * FROM (select top 150 * from outlet order by id asc)as d order by id desc) as b order by id asc
    1. Guardar id seleccionado en un objeto de Sesión de ViewState es decir, LastOutletID

    2. Declarar un int PageSize = 150 y también agregar a la Sesión objeto de ViewState

    (b) SqlQuery como Sigue:

    Select top 150 * from (SELECT TOP 150 * FROM (select top PageSize * de la toma de corriente donde id > LastOutletID order by id asc)como d order by id desc) como b order by id asc

    1. Ahora si desea seleccionar next top filas, siga el paso 1 para obtener el último elemento de identificación y guardar, a continuación, sólo añadir 150 a PageSize le dará siguiente 151 a 300 filas
  5. 0

    Solución para SQL Server:
    1) Obtener el total de número de fila en la tabla.

    Por ejemplo. select count(1) from MYTABLE — 500 filas

    2) el Uso de la CTE para asignar lógico número de fila para cada fila en la tabla.

    3) Seleccione el número de filas con el número de fila de intervalo y ENTRE la cláusula.

    CON EL CTE COMO
    (SELECCIONE
    ROW_NUMBER() OVER(order by MyColumn1, MyColumn2, MyColumn3) COMO la Fila#,
    t.*
    FROM MYTABLE t
    )

    select * from CTE donde la Fila# entre 150 y 300
    Orden por MyColumn1, MyColumn2, MyColumn3

    4) Repita los pasos 2) y 3) con el siguiente número de la fila en el intervalo hasta la fila recuento total se alcanza.

  6. 0

    Principio con Oracle 12, usted tiene FETCH y OFFSET.

    Por su ejemplo, donde usted quiere poner 150 filas en un solo archivo y los próximos 150 filas en otro archivo:

    Spool file1.txt
    select a from b
    order by a
    Fetch first 150 rows only;
    Spool off
    Spool file2.txt
    select a from b
    offset 150 rows
    Fetch next 150 rows only;
    spool off

    Este enlace muestra de la vía férrea diagrama de la fila de la limitación de la cláusula de Oracle 12.2 de la documentación.

    Los ejemplos aquí también incluyen el «orden» en ellos, lo que hace un montón de sentido si usted está buscando para la parte SUPERIOR de algo.

    Versiones anteriores de Oracle habría requerido el uso de rownum y el orden-por como se describe por otras respuestas aquí.

Dejar respuesta

Please enter your comment!
Please enter your name here