Syntax
popis
vytvoří uložený postup. Ve výchozím nastavení je rutinaspojené s výchozí databází. Chcete-li routineexplicitně přiřadit k dané databázi, zadejte název jako db_name.sp_namepři jeho vytvoření.
při vyvolání rutiny se provede implicitní použití db_name(andundone při ukončení rutiny). Příčiny rutiny majípři spuštění dané výchozí databáze. Použijte příkazyinstalované rutiny jsou zakázány.,
po vytvoření uloženého postupu jej vyvoláte použitím příkazu CALL
(viz volání).
pro provedení příkazu CREATE PROCEDURE
není nutné mít oprávnění CREATE ROUTINE
. Ve výchozím nastavení MariaDBautomatically udělujeALTER ROUTINE
aEXECUTE
oprávnění therotine creator. Viz také uložená rutinní oprávnění.,
DEFINER
a ZABEZPEČENÍ SQL klauzule určit kontext zabezpečení tobe používá při kontrole přístupových oprávnění v běžné době provádění, u později. Vyžaduje super privilegium nebo z MariaDB 10.5.2 nastavené uživatelské oprávnění.
v Případě, že rutina název je stejný jako název vestavěný SQLfunction, musíte použít mezeru mezi jméno a followingparenthesis při definování rutiny, nebo dojde k chybě syntaxe. To platí i při pozdějším vyvolání rutiny., Z tohoto důvodu předpokládáme, že je lepší vyhnout se opětovnému použití názvů existujících sqlfunctions pro vlastní uložené rutiny.
režim IGNORE_SPACE SQL se vztahuje na vestavěné funkce, nikoli na úložiště. Vždy je přípustné mít mezery za rutinním názvem, bez ohledu na to, zda je povoleno IGNORE_SPACE.
seznam parametrů uzavřený v závorkách musí být vždy přítomen.Pokud neexistují žádné parametry, měl by být použit prázdný seznam parametrů (). Názvy parametrů nejsou velká a malá písmena.,
každý parametr může být deklarován pro použití jakéhokoli platného datového typu, kromě toho, že atribut COLLATE nelze použít.
pro platné identifikátory, které lze použít jako názvy postupů, viz Názvy identifikátorů.
IN / OUT / INOUT
každý parametr je IN
parametr ve výchozím nastavení. Určete jinak fórech parametru, použijte klíčové slovo OUT
nebo INOUT
před jméno parametru.
parametrIN
předává hodnotu do postupu., Postup by mohlmodifikovat hodnotu, ale změna není pro volajícího viditelnákdyž se postup vrátí. Parametr OUT
předává hodnotu z parametruprocedure zpět volajícímu. Jeho počáteční hodnota je NULL v rámcipostup a jeho hodnota je viditelná volajícímu, když se procedurereturns. ParametrINOUT
je inicializován volajícím, může být zmodifikován postupem a jakákoli změna provedená postupem je volajícímu viditelná, když se postup vrátí.,
Pro každého OUT
nebo INOUT
parametr, projít uživatelsky definovaná proměnná vCALL
prohlášení, že vyvolá postup, takže můžete získat itsvalue při řízení se vrátí. Pokud voláte na procedurefrom do jiné uložené procedury nebo funkce, můžete také projít aroutine parametr nebo lokální rutiny proměnné jako IN
nebo INOUT
parametr.
deterministický / ne deterministický
DETERMINISTIC
a NOT DETERMINISTIC
platí pouze pro funkce., Zadání DETERMINISTC
nebo NON-DETERMINISTIC
v procedurách nemá žádný účinek. Výchozí hodnota je NOT DETERMINISTIC
. Funkce jsou DETERMINISTIC
když vždy vrátí stejnou hodnotu pro stejný vstup. Například funkce zkrácení nebo podřetězu. Každá funkce zahrnující data je tedy vždy NOT DETERMINISTIC
.,
OBSAHUJE SQL/NE SQL/ČTE SQL DATA/MODIFIES SQL DATA
CONTAINS SQL
NO SQL
READS SQL DATA
MODIFIES SQL DATA
jsou informativní ustanovení, která řekne serveru, co funkce dělá. MariaDB v žádném případě nekontroluje, zda je uvedená klauzule správná. Pokud není zadána žádná z těchto doložek, použije se ve výchozím nastavení CONTAINS SQL
.
MODIFIES SQL DATA
znamená, že funkce obsahuje příkazy, které mohou upravovat data uložená v databázích., K tomu dochází, pokud funkce obsahuje příkazy jako DELETE, UPDATE, INSERT, REPLACE nebo DDL.
READS SQL DATA
znamená, že funkce čte data uložená v databázích, ale nemění Žádná data. K tomu dochází, pokud jsou použity příkazy SELECT, ale nejsou provedeny žádné operace zápisu.
CONTAINS SQL
znamená, že funkce obsahuje alespoň jeden příkaz SQL, ale nečte ani nepíše Žádná data uložená v databázi. Příklady zahrnují SET nebo DO.,
NO SQL
neznamená nic, protože MariaDB v současné době nepodporuje žádný jiný jazyk než SQL.
routine_body se skládá z platného příkazu SQL procedury. To můžebýt jednoduché prohlášení, jako je SELECT nebo INSERT, nebo to může být acompound prohlášení napsané pomocí začátku a konce. Složené prohlášenímohou obsahovat prohlášení, smyčky a další řídicí strukturuurestatements. Podrobnosti syntaxe naleznete v programových a složených prohlášeních.
MariaDB umožňuje rutiny obsahovat příkazy DDL, například CREATE
andDROP., MariaDB také umožňuje uložené procedury (ale ne uložené funkce)obsahovat příkazy transakce SQL, jako je COMMIT
.
Další informace o příkazech, které nejsou povoleny instored rutiny, viz uložená rutinní omezení.
Vyvolání uložená procedura z v rámci programů
Pro informace o vyvolání uložených procedur z v rámci programů napsaných v jazyce, který má MariaDB/MySQL rozhraní, viz VOLÁNÍ.
nebo nahradit
MariaDB počínaje 10.1.,3
volitelné OR REPLACE
klauzule se používá, to se chová jako zkratku pro:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
s výjimkou toho, že všechny existující oprávnění pro postup nejsou klesl.
sql_mode
MariaDB ukládá sql_mode systémové proměnné jsou nastavení, které je v platnosti v době, kdy rutina je vytvořen, a vždy provede rutina se toto nastavení v platnosti, bez ohledu na server SQL režimu v účinku, když rutina je volána.
znakové množiny a koláže
parametry postupu lze deklarovat libovolnou znakovou sadou / kolizí., Pokud znaková sada a kollace nejsou specificky nastaveny, použije se výchozí nastavení databáze v době vytvoření. Pokud databáze výchozí nastavení změnit později, uložené procedury character set/řazení nebude změněn ve stejnou dobu; uložené procedury musí být zrušen a znovu vytvořen k zajištění stejné znakové sady/řazení jako databáze se používá.
Oracle Režimu
MariaDB počínaje 10.3
Z MariaDB 10.3, podmnožina Oracle PL/SQL jazyk byl podporován kromě tradičního SQL/PSM-založené MariaDB syntaxe., Podrobnosti o změnách při spuštění režimu Oracle naleznete v režimu Oracle z MariaDB 10.3.
příklady
následující příklad ukazuje jednoduchý uložený postup, který používá parametr OUT
. Používá příkaz oddělovač pro nastavení nového oddělovače po dobu trvání procesu-viz oddělovače v klientovi mysql.,
Znakové sady a řazení:
VYTVOŘIT NEBO NAHRADIT:
Viz Také
- Identifikátor Jména
- Uložené Procedury Přehled
- ZMĚNIT POSTUP
- POSTUP
- VYTVOŘIT POSTUP
- ZOBRAZIT POSTUP STAV
- Uložené Rutiny Oprávnění
- Informace o Schématu RUTINY Tabulky