Avatar billede speedpete Nybegynder
22. august 2007 - 10:27 Der er 9 kommentarer og
1 løsning

Trigger med betingelse

Jeg kender ikke meget til triggers, men har fået følgende til at virke (=det kører uden fejlmeddelelser), men det gør ikke hvad jeg ønsker. Her er først min kørende kode:

DELIMITER $$
DROP TRIGGER kontoBefore$$

CREATE TRIGGER kontoBefore
BEFORE INSERT ON Konto
FOR EACH ROW BEGIN
if exists (select * from Konto) then insert into newscount values (1); end if;
END;
$$

Hvad jeg ønsker er noget a la:

DELIMITER $$
DROP TRIGGER kontoBefore$$

CREATE TRIGGER kontoBefore
BEFORE INSERT ON Konto
FOR EACH ROW BEGIN
if exists (<rækker som gør at inserten ikke skal lykkes>)
then <triggeren skal afbryde med en fejl>;
end if;
END;
$$
Avatar billede barklund Nybegynder
22. august 2007 - 10:50 #1
Jeg tænkte, at det må da være muligt i MySQL som i alle andre sprog at lave noget RAISE EXCEPTION eller THROW ERROR - men nej, det tyder det faktisk ikke på, at man kan:

http://forums.mysql.com/read.php?98,62568,62657#msg-62657

Det ser lidt freaky ud - måske andre har nemmere metoder til det.
Avatar billede speedpete Nybegynder
22. august 2007 - 10:55 #2
Ja, jeg har også fundet en lignende tråd... såvidt jeg forstår skulle der være kommet fra 5.2, og jeg har 6.0, så forstår det ikke helt.
Avatar billede speedpete Nybegynder
22. august 2007 - 11:10 #3
Avatar billede barklund Nybegynder
22. august 2007 - 11:11 #4
Altså, der er jo gode gamle:

call error_table_cannot_insert_row_due_to_trigger_stuff();

Så får du en fejl der beskriver kald af en ikke-eksisterende funktion - og dennes navn indikerer fejlen :D

Okayokay, det er godt nok ikke så pænt, så der kommer nok lidt an på din samvittighed :)

--
Morten Barklund
Avatar billede speedpete Nybegynder
22. august 2007 - 11:13 #5
... det er vist også essensen af ovesntående link.
Avatar billede barklund Nybegynder
22. august 2007 - 11:17 #6
Ja, det kan tænkes. Jeg ville lave det via en metode, som du kaldte - og så enten indsatte den rækken og returnerede 0 eller indsatte ingenting og returnerede et andet tal forskelligt fra 0 alt efter "fejltypen". Det er IMO den pæneste løsning, men det kræver selvfølgelig at du kan rette alle inserts til funktionskald.
Avatar billede speedpete Nybegynder
22. august 2007 - 11:19 #7
Ja, det vil jeg lige tænke over. Vil du have pointsne?
Avatar billede barklund Nybegynder
22. august 2007 - 11:52 #8
Tja, vi kan da dele - du kom jo frem til nogenlunde det samme :)
Avatar billede speedpete Nybegynder
22. august 2007 - 12:47 #9
altså... jeg bruger ikke pointsne til noget, så værsgo.
Avatar billede barklund Nybegynder
22. august 2007 - 13:21 #10
Well, tak anyways :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester