🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #181470

[MySQL 5.0] Rzucanie errorami/wyjątkami w triggerach - da się?

#181470
From: Diabl0
Date: Wed, 11 Mar 2009 11:30
36 lines
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-mail

Show 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