|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
[MYSQL] Trigger che elimina ogni riga dopo x giorni
Ho da poco imparato ad usare i trigger, e vorrei eliminare in modo automatico (tipo ogni 30 giorni) tuple di tabelle che contengono delle colonne con una data...quindi cancellare date vecchie di almeno 30 giorni....mi aiutate a crearlo??
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
quello che chiedi non è possibile, i trigger si attivano solo su determinati eventi su di una tabella.
puoi risolvere tramite cron lanciando una query o una storedprocedure |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
ok la questione del tempo non è fondamentale, principalmente devo svuotare ogni tanto la tabella....se la condizione fosse che la tabella ha raggiunto una dimensione di tuple >=30?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
in quel caso lo puoi fare tramite trigger, utilizzando una condizione AFTER INSERT
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 156
|
Ciao ho fatto esattamente la stessa cosa 1 mesetto... come ti hanno risposto usa AFTER INSERT.
SE non hai urgenza quando lunedi' sono a lavoro ti posto il codice. Ciao
__________________
Corsair r300 | Be Quiet 630W 80+ | Asrock Extreme 6 | i5 [email protected] | Artic cooling Freezer 13 | 2x4GB Corsair low profile | SSD M4 128 GB | SSD EVO 256GB | Sapphire nitro 390X |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 156
|
Codice:
create or replace TRIGGER
logtrigger
BEFORE INSERT ON TABLE
DECLARE
x number;
BEGIN
select count(*) into x from table where logtype='info';
if (x>2000) THEN
delete from table where date in ( select date from (select date from table where logtype='info' order by logdate asc) where rownum<=1000);
end if;
END;
Spero ti sia utile ciao
__________________
Corsair r300 | Be Quiet 630W 80+ | Asrock Extreme 6 | i5 [email protected] | Artic cooling Freezer 13 | 2x4GB Corsair low profile | SSD M4 128 GB | SSD EVO 256GB | Sapphire nitro 390X |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
grazie ancora Broadband
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
mi sapete dire dove sbaglio in questo trigger? sto usando phpmyadmin per il mio db mysql
Codice:
CREATE TRIGGER svuota_visita AFTER INSERT ON visita DECLARE vis NUMBER; BEGIN SELECT COUNT(*) INTO vis FROM visita WHERE effettuata='1'; IF vis >= 4 THEN DELETE FROM visita WHERE effettuata='1' AND data_visita=max(data_visita); END IF; END; #1064 - Errore di sintassi nella query SQL vicino a 'DECLARE vis NUMBER; BEGIN SELECT COUNT(*) INTO vis FROM visita WHERE effettuat' linea 3 |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
sono riuscito ad inserire il trigger, solo che ora durante l'esecuzione del programma, se arrivo al fatidico numero in cui entro nell'if del trigger mi da:
Codice:
java.sql.SQLException: Can't update table 'visita' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 239
|
up
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:23.



















