PDA

View Full Version : [MYSQL] Trigger che elimina ogni riga dopo x giorni


miao84
08-01-2010, 20:21
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??:mc:

SerMagnus
09-01-2010, 10:42
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

miao84
09-01-2010, 13:31
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?

SerMagnus
09-01-2010, 14:49
in quel caso lo puoi fare tramite trigger, utilizzando una condizione AFTER INSERT

Broadband
09-01-2010, 16:08
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 :D

miao84
16-01-2010, 13:20
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 :D

Scusa se ti rispondo solo ora...se me lo posti mi fai un favore, grazie!:)

Broadband
19-01-2010, 10:34
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;


Ciao questo script elimina 1k tuple (le piu' vecchie in ordine cronologico) dalla tabella TABLE quando TABLE supera 2k entry.

Spero ti sia utile ciao :D

miao84
19-01-2010, 17:12
grazie ancora Broadband

miao84
21-02-2010, 13:20
mi sapete dire dove sbaglio in questo trigger? sto usando phpmyadmin per il mio db mysql


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;


la sintassi mi sembra giusta,ma da quest'errore:

#1064 - Errore di sintassi nella query SQL vicino a 'DECLARE vis NUMBER; BEGIN SELECT COUNT(*) INTO vis FROM visita WHERE effettuat' linea 3

miao84
21-02-2010, 17:23
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:

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.

probabilmente perchè l'azione che deve svolgere il trigger è sulla tabella che lancia il trigger stesso....capisco che è una cosa un po avanzata, ma qualcuno può aiutarmi???:mc:

miao84
22-02-2010, 09:41
up:mc: