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:
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:
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 <= 25Esse 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 DESCPoderia, 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