Olá,
Neste artigo, irei demonstrar como fazer uso da pseudo-coluna ROWNUM para obter os dados desejados dentro de um intervalo específico de um resultado de uma consulta SQL.
A técnica consiste em usar a estrutura SQL abaixo:
SELECT [[colunas]]
FROM (SELECT [[colunas]], rownum rn
FROM (SELECT [[colunas]]
FROM [[sua query]]
ORDER BY [[colunas]])
WHERE rownum <= [[max row]])
WHERE rn >= [[min row]]
onde
[[min row]] e [[max row]] são os números das linhas do intervalo desejado. Para demonstrar esta técnica, irei criar uma tabela de teste como demonstrado a seguir:
SQL> create table teste as select level id,
2 substr(dbms_random.string('U',10),1,10) valor
3 from dual connect by level <= 10;
Tabela criada.
SQL> select * from teste order by valor;
ID VALOR
---------- ----------
5 EMXMUNCOSZ
9 GBXLYTGPPI
2 MQIFNZHVZC
6 NZPBZIGWXM
8 SMHWOOIMQF
3 TVKBNGOYVW
4 TXJTLIPJGT
10 VMPFTOKWKK
1 VZIYRALBQQ
7 WFZZJYYYPT
10 linhas selecionadas.
De acordo com o resultado acima, o que deverá ser feito para que possamos obter a quarta (4ª) e a quinta (5ª) linha da tabela (ID 6 e 8)?
SQL> SELECT id,valor,rownum
2 FROM (SELECT id,valor
3 FROM (SELECT id,valor
4 FROM teste
5 ORDER by valor));
ID VALOR ROWNUM
---------- ---------- ----------
5 EMXMUNCOSZ 1
9 GBXLYTGPPI 2
2 MQIFNZHVZC 3
6 NZPBZIGWXM 4
8 SMHWOOIMQF 5
3 TVKBNGOYVW 6
4 TXJTLIPJGT 7
10 VMPFTOKWKK 8
1 VZIYRALBQQ 9
7 WFZZJYYYPT 10
10 linhas selecionadas.
Então, de acordo com o resultado acima, sabemos que as linhas de ID 6 e 8 são as linhas que queremos obter. A seguir, irei aplicar a técnica como demonstrado abaixo:
SQL> set verify off
SQL> SELECT id,valor
2 FROM (SELECT id,valor, rownum rn
3 FROM (SELECT *
4 FROM (select id,valor from teste)
5 ORDER BY valor)
6 WHERE rownum <= &maxrow)
7 WHERE rn >= &minrow;
Informe o valor para maxrow: 5
Informe o valor para minrow: 4
ID VALOR
---------- ----------
6 NZPBZIGWXM
8 SMHWOOIMQF
2 linhas selecionadas.
Nenhum comentário:
Postar um comentário