Encontrar valor com ROWNUM específico

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Olá senhores,
estou com duvida se é possivel encontrar um valor através do ROWNUM.
Realizei a seguinte query.

Selecionar tudo

create table teste(num char(1));
insert into teste values('S');
insert into teste values('Q');
insert into teste values('L');
Então realizei a pesquisa.

Selecionar tudo

select cod,rownum from teste
Descobri que "S" estava na segunda linha então realizei.

Selecionar tudo

select * from teste where rownum = 2
Não retornou nada, não entendi, pois "S" estava na segunda linha.
Procurei algumas coisas na internet, mas me parece confuso ainda, algue poderia me esclarecer e me dizer se é possivel encontrar o valor "S".

Abraços, agradeço a atenção de todos.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Assim, ROWNUM é uma pseudo-coluna. É criada depois que as linhas vem do banco.
Exemplo: A primeira linha que veio, é ROWNUM=1... A segunda linha que veio, é ROWNUM=2, etc.

Então, se você coloca WHERE rownum=2, nunca vai chegar nenhuma linha, pois teria que vir 2 linhas pro rownum ser igual a 2... E no caso, não veio nenhuma.

Você pode fazer isso de outra forma assim:

Selecionar tudo

SELECT *
FROM (select a.*, ROWNUM R from teste a )
WHERE ROWNUM = 2
Tem como fazer isso SEM usaro sub-select...Neste caso, é necessário o uso de funções analíticas (https://glufke.net/oracle/download/funco ... TICAS.html )

:-o
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Obrigado dr_gori funcionou, só existia um probleminha na clausula WHERE do select externo.
Com ROWNUM ele não encontrava mas com R ele encontrou.
Agora vou estudar essas funções analiticas que você me indicou.

Obrigadão dr_gori, achei show o código vou estuda-lo

Abração
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Utilizei a seguinte query para rodar corretamente.

Selecionar tudo

SELECT *
FROM (select a.*, ROWNUM R from teste a )
WHERE R = 2
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes