Página 1 de 1

Encontrar valor com ROWNUM específico

Enviado: Seg, 07 Jan 2013 5:57 pm
por Rafael_Santos
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.

Re: Encontrar valor com ROWNUM específico

Enviado: Ter, 08 Jan 2013 11:56 am
por dr_gori
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

Re: Encontrar valor com ROWNUM específico

Enviado: Qua, 09 Jan 2013 4:23 pm
por Rafael_Santos
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

Re: Encontrar valor com ROWNUM específico

Enviado: Qua, 09 Jan 2013 4:24 pm
por Rafael_Santos
Utilizei a seguinte query para rodar corretamente.

Selecionar tudo

SELECT *
FROM (select a.*, ROWNUM R from teste a )
WHERE R = 2