Egil.B Skrevet 24. oktober 2006 Del Skrevet 24. oktober 2006 Hei. Jeg har to tabeller, temp_data og data, hvor temp_data inneholder samtlige felt i data samt et boolsk godkjent. Tanken er at når man oppdaterer en rad i temp_data og godkjent blir satt til true, skal en trigger automatisk kopiere dataene over til tabell data, og samtidig slette den originale raden. Mens jeg arbeider med triggeren har jeg opprettet to tilsvarende tabeller, a og b, som inneholder feltene fornavn, mellom, og etter (samt grei i a). Har følgende trigger: mysql> CREATE TRIGGER flytt AFTER UPDATE ON a -> FOR EACH ROW -> BEGIN -> IF NEW.grei = true THEN -> INSERT INTO b(fornavn, mellom, etter) VALUES( -> NEW.fornavn, NEW.mellom, NEW.etter); -> DELETE FROM a WHERE a.fornavn = NEW.fornavn AND -> a.etter = NEW.etter -> AND a.mellom = NEW.mellom; -> END IF; -> END; -> // Prøver jeg deretter å sette grei til true får jeg følgende feilmelding (har bare en linje i tabellen): mysql> UPDATE a SET grei=true;ERROR 1442 (HY000): Can't update table 'a' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Hvordan omgår jeg dette problemet? Lenke til kommentar
roac Skrevet 24. oktober 2006 Del Skrevet 24. oktober 2006 (endret) Vet ikke om alt fungerer likt på MySQL som i andre databaser, men jeg ville lest ut innholdet til en tabellvariabel (evt en variabel for hver av feltene), kjørt en rollback transaction for å hindre oppdateringen i a, og så satt inn dataene i den andre tabellen. Edit: Har MySQL tabellvariable forresten? Endret 24. oktober 2006 av roac Lenke til kommentar
Egil.B Skrevet 25. oktober 2006 Forfatter Del Skrevet 25. oktober 2006 Men om jeg kjører en rollback, vil ikke da dataene fortsatt ligge i a, bare uendret? Den ene tabellen skal bare fungere som et buffer hvor en gitt linje blir slettet etter den er godkjent. Lenke til kommentar
roac Skrevet 25. oktober 2006 Del Skrevet 25. oktober 2006 Men om jeg kjører en rollback, vil ikke da dataene fortsatt ligge i a, bare uendret? Den ene tabellen skal bare fungere som et buffer hvor en gitt linje blir slettet etter den er godkjent. 7149848[/snapback] Sorry, så ikke i farten at du brukte en after trigger. Løsningen blir i så fall å bruke en before trigger isteden, ellers se tidligere innlegg. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå