abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 03:22 | Zajímavý článek

    V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …

    Ladislav Hagara | Komentářů: 0
    dnes 00:11 | Nová verze

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

    Ladislav Hagara | Komentářů: 2
    včera 17:44 | Nová verze

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 11
    26.4. 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 9
    26.4. 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 42
    25.4. 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 14
    25.4. 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 3
    25.4. 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    25.4. 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 850 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: PostgreSQL: GET DIAGNOSTICS ROW_COUNT

    xkucf03 avatar 29.5.2009 15:58 xkucf03 | skóre: 49 | blog: xkucf03
    PostgreSQL: GET DIAGNOSTICS ROW_COUNT
    Přečteno: 397×

    Mějme funkci pro změnu uživatelova hesla:

    CREATE OR REPLACE FUNCTION zmen_heslo("login" character varying, domena character varying, stare_heslo character varying, nove_heslo character varying)
      RETURNS text AS
    $BODY$DECLARE pocet integer;
    BEGIN
    UPDATE uzivatel
    SET heslo = md5($4)
    WHERE login = $1
    AND domena = $2
    AND heslo = md5($3);
    GET DIAGNOSTICS pocet = ROW_COUNT; IF pocet = 1 THEN RETURN 'Změna hesla pro ' || $1 || '@' || $2 || ' proběhla úspěšně.'; ELSE RAISE EXCEPTION 'Nesprávné heslo, nebo uživatel % neexistuje', $1 || '@' || $2; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER COST 100; ALTER FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) OWNER TO posta; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO public; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta; GRANT EXECUTE ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) TO posta_zmena_hesla; COMMENT ON FUNCTION zmen_heslo(character varying, character varying, character varying, character varying) IS 'Změní heslo uživatele.';

    Podle dokumentace by ROW_COUNT mělo vracet počet záznamů dotčených příkazem (updatem) – tedy 1, právě tehdy když uživatel existuje a zadal správě staré heslo.

    Problém je, pokud existují dva uživatelské účty se stejným heslem. ROW_COUNT je v takovém případě 2 a funkce skončí chybou.

    Můžu sice změnit podmínku na  IF pocet >= 1 THEN, ale to se mi nelíbí. Proč by ROW_COUNT mělo být dva? Vždyť když ten update pustím ručně, ukáže se mi správně: „1 rows affected“. Ve WHERE podmínkách se kontroluje login, doména a staré heslo a takový uživatel je tam jen jeden. Co s tím má společného, že existuje uživatel se stejným heslem (ale jiným jménem nebo doménou)?

    Pokud někdo potřebuje širší souvislosti, kompletní zdrojáky jsou tady: mercurial.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

    Řešení dotazu:


    Odpovědi

    okbob avatar 29.5.2009 17:37 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: PostgreSQL: GET DIAGNOSTICS ROW_COUNT

    cus

    ono ti to fungovat nemuze - mas tam kolizi promenne a sql identifikatoru, kterou sice resis, ale spatne. V plpgsql maji vyssi prioritu plpgsql promenne. Tudiz zapis WHERE ... domena = $2 je fakticky $2 = $2 a tudiz se domena fakticky netestuje. Tak jak jsi to napsal by to fungovalo treba v Oraclu, ale ne v postgresu. To inkriminovane misto uprav (ta sama chyba je i s promennou login.

    Pouzij kvalifikatory -

    UPDATE uzivatel SET heslo = .. WHERE uzivatel.login = "login" and uzivatel.domena = domena

    Pavel

    xkucf03 avatar 29.5.2009 22:18 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: PostgreSQL: GET DIAGNOSTICS ROW_COUNT

    Ahoj,

    díky moc, to bylo ono, přidal jsem uzivatel. a na proměnné se radši odkazuji pomocí názvu v uvozovkách, názvy jsem změnil, aby se nepletly se sloupci tabulky. Dřív stačilo zadat správné heslo a jakéhokoli uživatele… ale naštěstí díky podmínce pocet = 1 to neprošlo.

    Franta

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    okbob avatar 30.5.2009 09:00 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: PostgreSQL: GET DIAGNOSTICS ROW_COUNT

    Používat úvozvoky není zrovna dobrý nápad - stejně, tak jako používat klíčová slova jako identifikátory. Bohatě postačí označit proměnné nějakým prefixem - mezi komunitou se používá podtržítko (a pokud to je možné, tak používat kvantifikátory (nebo aliasy)).

    http://www.postgres.cz/index.php/PL/pgSQL#Doporu.C4.8Den.C3.AD_pro_n.C3.A1vrh_ulo.C5.BEen.C3.BDch_procedur_v_jazyce_PL.2FpgSQL

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.