ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
MySQL (44) - parametry uložených procedurMySQL, procedury a jejich uložené parametry.
Uložené procedury v jakékoli databázi by měly je pramalý význam,
kdyby se jim nedaly posílat parametry. My se dnes podíváme na to, jak
se to dělá, jaké to má výhody a taky nezapomeneme na nějaké typické
scénáře, kdy se parametry uložených procedur používají. Aktuálně
Třebaže to nesouvisí jen s uloženými procedurami, dovolím si
připomenout, že v době psaní tohoto článku vyšla OSTRÁ verze MySQL 5.0.
Takže stahujte,
čtěte co
je nového nebo upgradujte
stávající verzi na novou.
Pozn.: Nemůžete však čekat, že se
MySQL 5 objeví zakrátko na všech systémech, k nimž snad máte přístup.
Administrátoři bývají s nasazováním nových verzí opatrní a nechávají
uběhnout několik verzí, než nasadí novou řadu produktu na "svůj"
server. Asi vědí proč. Parametry uložených procedurPodobně jako funkce v programovacích jazycích, mohou i uložené procedury v MySQL přebírat parametry. Možná si ještě vzpomínáte na proceduru z minulého dílu: create procedure
sp_VratSoftware()
Moc užitečná nám skutečně není, protože vždy vrátí celou tabulku. Možná byste ale chtěli vrátit jen jeden jediný řádek - vybraný například podle identifikátoru. Se vstupním parametrem je to hračka: delimiter $$
Jak vidíte, je vstupní parametr předán v závorkách za názvem procedury. Každý ze vstupních parametrů uložené procedury musí mít specifikovaný typ. Když říkám každý, znamená to, že vstupních parametrů může být i více. V takovém případě jsou odděleny čárkou. To hezky dokresluje následující příklad: delimiter $$
Volání procedur s parametryRovněž velmi jednoduché je uloženou proceduru s parametry zavolat. Naši proceduru s jedním parametrem bychom zavolali takto: call sp_vratradek(1)
A tu druhou, se dvěma parametry pomocí něčeho jako: call sp_vratradek(10,
20)
Je potřeba si uvědomit, že MySQL testuje počet předaných parametrů, takže si musíte při volání uložené procedury být jisti, že jste zadali právě tolik parametrů, kolik jich procedura skutečně má (!) a ne méně ani více. K mojí velké nelibosti však zároveň musím dodat, že MySQL netestuje typ předaných parametrů, takže následující příkaz: call sp_vratradek('Tohle
přece není číslo');
mi funguje tak, že vstupní parametr je zkonvertován na číslo a
příkaz je proveden (s jedním warning). Mnohem raději bych viděl to, že
příkaz skončí chybou, protože pokus o předání řetězce namísto čísla
signalizuje obvykle nějaký problém a nemělo by to být v tichosti
ignorováno. Vynechání parametruPřestože jsem o pár řádků výše tvrdil, že parametry nemůžete vynechat, lze je "skoro" vynechat, pokud namísto nich dosadíte hodnotu NULL. Při psaní procedury s tím však musíte počítat a sestavit logiku tak, aby hodnota NULL dělala to, co chcete. Například volání call sp_vratradek(NULL);
bude sice syntakticky správně, ale procedura v takovém případě nikdy
nic nevrátí (jedna hodnota NULL se nikdy nemůže rovnat ničemu jinému
včetně jiné hodnoty NULL). Možná je to to, co byste zamýšleli, možná
ne. Je třeba na to při návrhu procedury myslet. Typické použití vstupních parametrůJak jsme již viděli, vstupní parametr může být použit pro podmínku WHERE příkazu SELECT. To je dosti typické. Stejně tak jej lze použít v klauzuli ORDER BY k nastavení sloupce, podle něhož se bude řadit: delimiter $$
To už tak typické není, protože o této možnosti někteří programátoři
neví. Připomeňme, že to celé může fungovat díky tomu, že klauzule ORDER BY
přijímá číslo sloupce jako parametr. Procedury tohoto typu bývají
ideálními kandidáty na řazení tabulek při klepnutí na záhlaví, protože
obyčejně není problém zjistit si pořadové číslo sloupce, na nějž se
kliklo.
Pozn.: Má to i nevýhody. Při
pokusu seřadit výsledek pomocí neexistujícího sloupce celý dotaz selže,
takže pozor na to. Další obvyklou technikou je použít uloženou proceduru na vkládání dat do nějaké tabulky. Ilustruje to následující příklad: delimiter $$
Jakou to má výhodu oproti prostému příkazu INSERT? Především, při
opakovaném spuštění bude tento příkaz rychlejší než prostá sada
INSERTů. Podle mých zkušeností o 25-30%. A navíc, časem se můžeme
rozhodnout, že při vložení nového řádku chceme udělat ještě něco jiného
(protokolovat, například) a není problém to do procedury dopsat. Mnohem širší uplatnění uložených procedur však souvisí s faktem, že mohou obsahovat určitou logiku - podmínky, smyčky, lokální proměnné a tak dále. O těchto věcech bude řeč v dalším díle našeho seriálu.
Související články
Předchozí Celou kategorii (seriál) Další
MySQL (1) - pestrý svět databází
MySQL (2) - Instalujeme databázi MySQL MYSQL (3) Instalujeme MySQL podruhé MySQL (4) - něco terminologie MySQL (5) - tajuplné SQL MySQL (6) - Ukládáme řetězce MySQL (7) - hrátky s čísly MySQL (8) - Ukládání datumů MySQL (9) - Další datové typy MySQL (10) - tvorba databáze. Základy DDL MySQL (11) - vytváříme tabulky MySQL (12) - tipy k tvorbě tabulek MySQL (13) - Vkládáme data MySQL (14) - Upravujeme data MySQL (15) - Odstraňujeme data MySQL (16) - Tipy a triky k manipulaci s daty MySQL (17) - vybíráme data MySQL (18) - Filtrujeme data MySQL (19) - Řadíme data MySQL (20) - spojení více tabulek MySQL (21) - klauzule JOIN MySQL (22) - tipy a triky ke spojování tabulek MySQL (23) - relace 1:N a N:N MySQL (24) - Seskupujeme záznamy MySQL (25) - hrátky se seskupenými záznamy MySQL (26) - Poddotazy MySQL (27) - Složitější dotazy MySQL (28) - Dotazy pro pokročilé MySQL (29) - Vracení nejvyšších záznamů MySQL (30) - průběžné součty MySQL (31) - Indexy MySQL (32) - ještě k indexům MySQL (33) - Příkaz UNION MySQL (34) - větvení kódu a pivotní tabulky MySQL (35) - vestavěné funkce MySQL (36) - Regulární výrazy MySQL (37) - použití fulltextového vyhledávání MySQL (38) - Fulltext a praxe MySQL (39) - typy tabulek v MySQL MySQL (40) - další typy tabulek MySQL (41) - Transakce MySQL (42) - ještě k transakcím MySQL (43) - Uložené procedury MySQL (45) - větvení kódu uložených procedur MySQL (46) - Triggery MySQL (47) - Triggery a praxe MySQL (48) - UDF MySQL (49) - pohledy MySQL (50) - Pohledy podruhé MySQL (51) - Metadata MySQL (52) - A co zálohování? MySQL (53) - SELECT INTO OUTFILE MySQL (54) - zálohování MySQL z webu MySQL (55) - zálohování MySQL z pohledu správce MySQL (56) - Obnova zálohovaných dat MySQL (57) - Ach, ta čeština MySQL (58) - čeština v praxi MySQL (59) - české řazení MySQL (60) - řádkový klient MySQL (61) - Oprávnění MySQL (62) - Oprávnění podruhé MySQL (63) - jemné nastavení práv MySQL (64) - nad dotazy čtenářů MySQL (65) - Ladíme server MySQL (66) - Ještě k ladění serveru MySQL - (67) MySQL (68) - Závěr MySQL (69) - Prepared Statements Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |