Não consigo fazer... Não sei

1 resposta
Z

Não tenho muito conhecimento de banco de dados Oracle.

Tenho uma tabela que tem 3 colunas:
DATA, CARDAPIO, OPCAO.

Quero fazer uma metodo que deleta os registros mais antigos.
Deixando sempre os 25 mais novos.

Valeu
:roll:

1 Resposta

S

Olá …

Estou repassando o que um colega meu me explicou!!

É exatamente isso que você tem que fazer, usar um SELECT junto com o DELETE, mas, algumas considerações devem ser feitas:

  • Uma tabela deve sempre ter uma chave primária para que esses tipo de problemas com ordenação seja feito de uma forma melhor e mais clara…

DELETE TABELA
WHERE DATA IN (SELECT DATA
FROM TABELA
ORDER BY DATA DESC)
AND ROWNUM <= 25

Esse select faz o seguinte:

  • No select mais interno estou buscando todas as datas ordenando-as de forma decrescente, ou seja, as mais recentes primeiro… assim que eu pegar todas as mais recentes, eu limito o número de linhas… ROWNUM <= 25, ou seja, estou pegando os primeiros 25 registros e, na cláusula WHERE DATA IN eu estou considerando todas as datas, ordenadas de forma decrescente.;… aí vem a pergunta: “Eu poderia fazer como abaixo?”

DELETE TABELA
WHERE ROWNUM <= 25
ORDER BY DATA DESC

Poderia, mas tem que tomar cuidado, pois, o oracle neste caso considera 25 registros e depois os ordena… é um saco entender isso… O exemplo acima tem um nome, chama-se “inline view”, ou seja, uma vieu (ou um select) dentro de outro.

Eu fiz um teste no MySQL da seguinte forma …

delete from defsug
order by datlibe desc
limit 25

Talvez a mesma logica funciona no Oracle!!

Espero ter ajudado …

Abraços

Criado 19 de maio de 2005
Ultima resposta 19 de mai. de 2005
Respostas 1
Participantes 2