Función de paginación de Oracle rownum

rownum pertenece a pseudoColumns en Oracle. Hay algunos detalles en el uso, así que sáquelo por separado.

ponerte a prueba

La tabla t_user tiene 20. ¿Cuántos registros se devolverán al ejecutar la siguiente instrucción?

La declaración es:

 select * from t_user where rownum > 10 ;

Respuesta a la pregunta 1

Contenido principal

rownum> 1 no devuelve ningún resultado

select * from t_user where rownum > 5;
La declaración no devuelve ningún resultado. ¿Por qué?

Descripción:
rownum comienza desde 1.
Saque los registros uno por uno y asigne rownum, y luego juzgue la condición del rownum.

Proceso:
Primero saque uno, asigne rownum = 1 y juzgue si cumple con rownum> 1.
Si no se junta, deséchelo.

Saca otro, porque el anterior fue descartado, este rownum sigue siendo 1, que
no cumple con las condiciones, así que continúa descartándolo.

Por analogía, el seguimiento no se cumplirá. Entonces no se devuelven registros.

rownum es mayor que el uso de condiciones

Algunas escenas realmente necesitan usar la condición de que rownum sea mayor que n, ¿cómo usarlo?

En realidad, es muy simple, solo agregue un alias de columna a rownum. El sql es el siguiente:

select 
* 
from 
(
	select 
	product_name,price,rownum as rn
	from t_product where rownum < 10
) a
where a.rn >5

Establecer una columna de la tabla en el número de serie 1-n

Algunas tablas no tienen una columna de número de serie. Después de agregar una columna, puede usar la siguiente declaración para establecer el valor del número de serie:

UPDATE t_user SET sequence = ROWNUM;

De esta manera, la columna de secuencia es el número de serie de 1-n.

Ejemplo de paginación de Oracle

Donde rownum en Oracle solo se puede escribir en mayúsculas o minúsculas. Entonces necesitas empacar 2 capas. Por ejemplo en mybatis:

select
*
from
(
  select
  b1.*,
  rownum rn
  (
    select
    *
    from
    t_user  
    where username like '%a%'
  ) b1
  where rownum &lt;= (#{pageSize,jdbcType=VARCHAR}*#{page,jdbcType=VARCHAR}) --第一层设置右边界
) b2
where rn &gt;= ((#{page,jdbcType=VARCHAR}-1)*#{pageSize,jdbcType=VARCHAR} +1) -- 第二层,设置左边界

Parte de respuesta

Respuesta a la pregunta 1

La tabla t_user tiene 20. ¿Cuántos registros se devolverán al ejecutar la siguiente instrucción?

¿Es 10? Por supuesto que no. En realidad, no se devuelven datos.
La razón está en este documento.

otro

referencias

documento rownum del sitio web oficial de Oracle:
https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RO WNUM-Pseudocolumn.html#GUID-2E40EC12-3FCF-4A4F-B5F2-6BC669021726

Centro de ayuda del sitio web oficial de Oracle (documento)

https://docs.oracle.com/en/
Ingrese el contenido de búsqueda para recuperar, por ejemplo, rownum de búsqueda.

Supongo que te gusta

Origin blog.csdn.net/enthan809882/article/details/114131454
Recomendado
Clasificación