Funcao LAST - Oracle

13 respostas
P

E ae pessoal !!!

Alguem sabe se existe uma funcao semelhante ao LAST do MS Access no Oracle 9i ?
Esta funcao retorna o ultimo registro incluido entre uma colecao de registros selecionados.

Falow!!!

13 Respostas

RodrigoSol

Uma sugestão:

select * from usuario where rowid = (select max(rowid) from usuario)
F

“RodrigoSol”:
Uma sugestão:

select * from usuario where rowid = (select max(rowid) from usuario)

Eu não sei o que a função LAST retorna, mas se é a ultimo registro inserido na tabela (foi o que intendi) não da pra fazer assim não. O oracle não garante que este “MAX” do Rowid seja o ultimo registro inserido.

[]'s

RodrigoSol

troque rowid por rownum.

rownum é o numero da linha do cursor resultante da sua pesquisa.

[]'s

F

Ja rodou este SQL?

Ele não traz nada. Sinceramente a menos que a versão 9i tenha algo pronto, trazer o ultimo registro no oracle sem ter uma chave para isso da uma dor de cabeça.

[]'s

RodrigoSol

:arrow: Você pode colocar um timestamp na hora de inserir o registro.

MarcusGoncalves

psilva,
para as tabelas que tem uma sequence como chave, você pode fazer isso:

select u.* from usuario u where u.sq_usuario = (select max(us.sq_usuario) from usuario us)

Ou seguir a sugestão do Rodrigo com timestamp.

RodrigoSol

“MarcusGonçalves”:
psilva,
para as tabelas que tem uma sequence como chave, você pode fazer isso:

select u.* from usuario u where u.sq_usuario = (select max(us.sq_usuario) from usuario us)

Ou seguir a sugestão do Rodrigo com timestamp.

Uma questão simples que gera um transtorno grande demais!

Vou pesquisar… acho que tem um lugar no dicionario de dados do oracle que ele guarda isso…

até.

F

“RodrigoSol”:
“MarcusGonçalves”:
psilva,
para as tabelas que tem uma sequence como chave, você pode fazer isso:

select u.* from usuario u where u.sq_usuario = (select max(us.sq_usuario) from usuario us)

Ou seguir a sugestão do Rodrigo com timestamp.

Uma questão simples que gera um transtorno grande demais!

Vou pesquisar… acho que tem um lugar no dicionario de dados do oracle que ele guarda isso…

até.

Rodrigo,

Se tu achar posta ai :D.

Como eu disse…acho meio dificil a não ser que a Oracle colocou isso na nova versão 10G. O que tb não acredito.
Essa discução ja rolou muito pano pra manga na lista de Oracle_Br no Yahoo. E nada de concreto alem de se usar uma sequence sendo gravada em um registro para após fazer essa busca.

O problema é que o Oracle não grava em ordem os registros. Isso vai da “cabeça” do banco na hora de fazer o insert.

Agora voltando ao post. Qual a tua chave primaria? Não tem como buscar por ela?

[]'s

RodrigoSol

Não dá mesmo…

O pior é que em todas as alternativas podemos ter problemas…

Segundo algumas informações que eu achei e que não tenho certeza da veracidade, o problema de usar timestamp é que existe possibilidade muito remota em um servidor com muitos processadores de ficar igual.

Usando sequence ou alguma outra chave você garante a ordem, mas pode ter problemas de performace em tabelas muito grandes…

Tome índices… :lol:

[]’s

F

“RodrigoSol”:
“fabgp2001”:

Rodrigo,

Se tu achar posta ai :D.

Não dá mesmo…

O pior é que em todas as alternativas podemos ter problemas…

Segundo algumas informações que eu achei e que não tenho certeza da veracidade, o problema de usar timestamp é que existe possibilidade muito remota em um servidor com muitos processadores de ficar igual.

Usando sequence ou alguma outra chave você garante a ordem, mas pode ter problemas de performace em tabelas muito grandes…

Tome índices… :lol:

[]’s

É mas alguem sabe pq o Oracle não implementa isso?

[]'s

Luca

Olá

A chave deve incluir o timestamp, mas não deve ser formada exclusivamente pelo timestamp.

[]s
Luca

RodrigoSol

“Luca”:
Olá

A chave deve incluir o timestamp, mas não deve ser formada exclusivamente pelo timestamp.

[]s
Luca

Se eu usasse uma sequence, por exemplo, por que eu deveria incluir um campo timestamp?

Luca

Olá

Não quiz dizer que não possa usar outras alternativas. Só quiz enfatizar que a solução do timestamp é boa mas que o timestamp sozinho não serve para chave pela possibilidade de coincidência.

Na área de EDI há mensagens que podem ser iguais, isto é, o mesmo conteúdo pode ser enviado mais de uma vez. Exemplo: pedidos de entrega da industria automobilística que são reenviados várias vezes. Os pedidos precisam ser todos armazenados e comparados para verificar qual o mais recente e se o conteúdo é o mesmo.

Uma das possibilidades de solução é criar uma chave tipo sopa contendo o timestamp e outros ingredientes de modo a ter certeza que as mensagens estão na ordem de chegada.

[]s
Luca

Criado 11 de março de 2004
Ultima resposta 12 de mar. de 2004
Respostas 13
Participantes 5