Kimble Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 Jeg har en del enheter som rapporterer inn status til et system. I databasen har jeg følgelig en statustabell. Av praktiske årsaker vil jeg ikke lagre statusoppdateringer fra en enhet oftere enn f.eks. hver halvtime. Nå har jeg aldri brukt triggere før, men tenkte at det måtte være egnet her. Planen er å ha en trigger som kjøres før en insert og sjekker hvor mange minutter det er siden sist oppdatering. Dersom det viser seg at det er mindre enn 30 minutter siden sist oppdatering vil jeg avbryte INSERT spørringen. Jeg har søkt meg grønn på Google uten å finne ut om det er mulig. Noen som har noen tips? For meg er det en ganske åpenbar ting å bruke triggere til så jeg har vanskelig for å tro at det er umulig. Lenke til kommentar
blackbrrd Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 En måte hadde jo vært å lage en funksjon som lagde en INSERT statement HVIS det var mer enn 30 minutter siden sist oppdatering. Et annet alternativ er å gi en throwe en Exception, men da vil hele transaksjonen mest sannsynlig bli rollbacket? Lenke til kommentar
Kimble Skrevet 27. oktober 2008 Forfatter Del Skrevet 27. oktober 2008 blackbrrd skrev: En måte hadde jo vært å lage en funksjon som lagde en INSERT statement HVIS det var mer enn 30 minutter siden sist oppdatering. Endte opp med å gjøre nettopp det. Irriterer meg litt for det hadde vært en utrolig mye mer gjennomsiktig løsning dersom triggere hadde fungert slik jeg vil Da hadde ikke folk som skulle programmere mot databasen visst om funksjonene i det hele tatt, bare brukt insert på vanlig måte. En annen ulempe er at hvis det blir nødvendig å logge flere parametere så må både tabellen og funksjonen oppdateres. blackbrrd skrev: Et annet alternativ er å gi en throwe en Exception, men da vil hele transaksjonen mest sannsynlig bli rollbacket? Ser at det blir anbefalt flere steder, men det må jo være tidens mest skitne løsning. Lenke til kommentar
blackbrrd Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 Personlig synes jeg det hadde vært rimelig skittent hvis jeg gjorde en INSERT og den ikke kom i databasen uten noen feilmelding. Lenke til kommentar
Kimble Skrevet 27. oktober 2008 Forfatter Del Skrevet 27. oktober 2008 blackbrrd skrev: Personlig synes jeg det hadde vært rimelig skittent hvis jeg gjorde en INSERT og den ikke kom i databasen uten noen feilmelding. Du har sannsynligvis rett i det. Regner med at det ikke er mulig for at de vanlige operasjonene skal oppføre seg forutsigbart. Lenke til kommentar
Manfred Skrevet 28. oktober 2008 Del Skrevet 28. oktober 2008 Kan ikke se hvorfor en Exception skal være skittent i denne sammenhengen. Da får applikasjonen som prøver å kjøre den beskjed om at det er noe galt og hva det er. Lenke til kommentar
blackbrrd Skrevet 28. oktober 2008 Del Skrevet 28. oktober 2008 exceptions skal brukes når du har et unntak, derav navnet. her er det ventet at de fleste inserts skal kastes.... Lenke til kommentar
Kimble Skrevet 28. oktober 2008 Forfatter Del Skrevet 28. oktober 2008 Manfred skrev: Kan ikke se hvorfor en Exception skal være skittent i denne sammenhengen. Da får applikasjonen som prøver å kjøre den beskjed om at det er noe galt og hva det er. Det vil vel bli et problem dersom den opersjonen inngår i en transaksjon. Det vil være dumt å få rullet tilbake andre operasjoner pga. noe som egentlig ikke er en feil. Uansett, løste saken med en lagret prosedyre og er ganske fornøyd med løsningen Lenke til kommentar
Wabby Skrevet 6. november 2008 Del Skrevet 6. november 2008 Trigger kan også fint returnere verdier så du kan fint få tilbakemelding dersom den oppdager at update er mindre enn 30 min siden. Men om jeg ville brukt en trigger til dette vet jeg ikke. Liker å bruke Triggere til: - Oppdatere history tabeller - lage actions dersom noe kommer i spesielle statuser - Legge evt sperrer for ulovlige kombinasjoner (f.eks dersom det kunne vært fare for overlappinger). Men alt er opp mot hvordan du vil styre reglene. Lenke til kommentar
blackbrrd Skrevet 6. november 2008 Del Skrevet 6. november 2008 Hvorfor bruke triggers for å sperre for ulovlige kombinasjoner? Kan du ikke bruke en check constraint? Liker å bruke triggers for å oppdatere aggregate tabeller (som f.eks lagerantall) Lenke til kommentar
kaffenils Skrevet 7. november 2008 Del Skrevet 7. november 2008 blackbrrd skrev: Hvorfor bruke triggers for å sperre for ulovlige kombinasjoner? Kan du ikke bruke en check constraint? Det kan jo være at input skal sjekkes mot verdier i andre tabeller. Tenker da ikke på foreign keys, men f.eks. status, quotas etc. Lenke til kommentar
siDDis Skrevet 15. november 2008 Del Skrevet 15. november 2008 blackbrrd skrev: Hvorfor bruke triggers for å sperre for ulovlige kombinasjoner? Kan du ikke bruke en check constraint? *host* MySQL støtter ikkje check constraints Lenke til kommentar
Manfred Skrevet 15. november 2008 Del Skrevet 15. november 2008 Hva med en stored procedure da, forresten? Det er jo litt "finere" å bruke, da du også kan gjøre endringer på noen felter og slikt uten å måtte gjøre om på annet enn SP-ene dine... 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å