Portál AbcLinuxu, 10. května 2025 12:02

Dotaz: MySQL 5.1 trigger before insert - podmínka

12.5.2012 21:56 malda
MySQL 5.1 trigger before insert - podmínka
Přečteno: 435×
Odpovědět | Admin
Hezký večer všem,

po dvou hodinách debugování už jsem celkem bezradný s následujícím problémem. Mám tabulku "majetek", do které vkládám jednotlivé záznamy, primární klíč je přes dva sloupce (cislo_inventarni a cislo_komponenty). Potřebuji triggerem zajistit, aby se při vložení záznamu provedla kontrola, zda-li již v databázi inventární číslo není - pokud je, tak se vyhledá max číslo komponenty a inkrementuje se, pokud není, tak se číslo komponenty nastaví na 0.

Následující kód funguje pro vložení již existujícího inventárního čísla (inkrementace čísla komponenty), ale nefunguje pro "nový záznam" - tam kde by číslo komponenty mělo být 0. (Při vložení vyhodí chybu že "cislo_komponenty nesmí být null").

Poradí někdo?

Díky, malda

Kód triggeru:
BEGIN
   DECLARE max_cislo_komponenta INT;

   SELECT MAX(cislo_komponenta) INTO max_cislo_komponenta FROM majetek WHERE cislo_inventarni = NEW.cislo_inventarni;

   IF max_cislo_komponenta = NULL THEN
       SET NEW.cislo_komponenta = 0;
   ELSE
       SET NEW.cislo_komponenta = (max_cislo_komponenta + 1);
   END IF;
   
END

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (malda (tazatel))
12.5.2012 22:45 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: MySQL 5.1 trigger before insert - podmínka
Odpovědět | | Sbalit | Link | Blokovat | Admin
Že by:
IF max_cislo_komponenta IS NULL THEN
?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
12.5.2012 23:12 malda
Rozbalit Rozbalit vše Re: MySQL 5.1 trigger before insert - podmínka
Perfektní, problem solved. Jaká hloupá chyba :-) Díky moc!
okbob avatar 13.5.2012 08:33 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: MySQL 5.1 trigger before insert - podmínka
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli si nezamknete tabulku "majetek", tak tam mate paradni race condition.
13.5.2012 11:26 malda
Rozbalit Rozbalit vše Re: MySQL 5.1 trigger before insert - podmínka
Tohle je pouze malá část kódu, určitě přidám transakci, bude tam toho ještě více.. Ale díky za upozornění :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.