Article View: pl.comp.bazy-danych
Article #181470[MySQL 5.0] Rzucanie errorami/wyjątkami w triggerach - da się?
From: Diabl0
Date: Wed, 11 Mar 2009 11:30
Date: Wed, 11 Mar 2009 11:30
36 lines
2449 bytes
2449 bytes
Witam Problem dość abstrakcyjny, i nie udało mi się znaleźć żadnych materiałów na ten temat (być może ze względu na wciąż małą znajomość zagadnienia "programowania" bazy danych). Ale po kolei Piszę implementację drzewa metodą Depesza (http://www.depesz.com/various/various-sqltrees.php - metoda 5) w MySQL'u. Pomysł jest kopią implementacji dla PostgreSQL (Michał Szych - http://www.scms.net.pl/tree/implementacja_metody_4.html). Całość jest zrealizowana na kluczach obcych i wyzwalaczach. Aktualnie wygląda to następująco: http://webkod.pl/124/ Teoretycznie wszystko jest gotowe - powiązania dodawane są przez trigger - gałęzie drzewa usuwają się kaskadowo, - przesuwanie gałęzi (trigger przy update) Brakuje tylko jednego - obsługi przypadku gdy ktoś wpadnie na pomysł przesunięcia gałęzi do jednego z swoich potomków (np. próba przeniesienia kategorii 1-1 do 1-1-3-2). Na razie nie są przebudowywane powiązania w tree_pos i trigger nic nie robi, ale pozostaje zmieniona wartość parent_id w tabeli tree. I tutaj niestety mam problem. Na razie rozwiązałem to przez brzydkie wywołanie UPDATE tree SET parent_id = OLD.parent_id WHERE id = OLD.id; które zwraca błąd: 1442 - Can't update table 'tree' in stored function/trigger because it is already used by statement which invoked this stored function/trigger Jednak IMHO jest to dość brzydkie i chciałbym to zrobić bardziej zgodnie ze sztuką. Stąd moje pytanie czy z poziomu triggera można cofnąć/anulować wykonywany update najlepiej wywołując przy tym jakiś własny błąd? -- Krzysztof Szatanik
Technical Details
Message-ID:
<gp87dd$52g$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: Diabl0 <nie@pytaj.pl> Newsgroups: pl.comp.bazy-danych Subject: [MySQL 5.0] Rzucanie errorami/wyjątkami w triggerach - da się? Date: Wed, 11 Mar 2009 12:30:51 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 36 Message-ID: <gp87dd$52g$1@inews.gazeta.pl> NNTP-Posting-Host: aud149.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1236771054 5200 83.27.11.149 (11 Mar 2009 11:30:54 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Wed, 11 Mar 2009 11:30:54 +0000 (UTC) X-User: diabl0 User-Agent: Thunderbird 2.0.0.19 (Windows/20081209) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit