szintaxis
leírás
tárolt eljárást hoz létre. Alapértelmezés szerint egy rutin vanaz alapértelmezett adatbázishoz kapcsolódik. A routine hozzárendeléseegy adott adatbázishoz implicit módon adja meg a nevet db_name-ként.sp_namewhen létrehozásakor.
a rutin meghívásakor implicit USE db_name (andundone, amikor a rutin megszűnik) kerül végrehajtásra. Az okok a rutin, hogyaz adott alapértelmezett adatbázis végrehajtása közben. A parancsok használata aa beépített rutinok nem engedélyezettek.,
tárolt eljárás létrehozásakor a CALL
utasítás használatával hívja fel (lásd a hívást).
a CREATE PROCEDURE
utasítás végrehajtásához a CREATE ROUTINE
jogosultság szükséges. Alapértelmezés szerint a Mariadbautomatikusan megadja a ALTER ROUTINE
és EXECUTE
jogosultságokat a theroutine creator számára. Lásd még: tárolt rutin jogosultságok.,
a DEFINER
és az SQL biztonsági záradékok meghatározzák a hozzáférési jogosultságok rutin végrehajtási időben történő ellenőrzésekor használt biztonsági kontextust, amelyet később leírtak. Szükség van a SUPER privilege, vagy, MariaDB 10.5.2, a beállított felhasználói jogosultság.
Ha a rutinnév megegyezik a beépített SQLfunction nevével, akkor a rutin meghatározásakor a név és a következő szóközt kell használnia, vagy szintaktikai hiba lép fel. Ez akkor is igaz, ha később meghívja a rutinot., Ezért miazt sugallják, hogy jobb, ha elkerüljük a meglévő SQLfunctions nevének újbóli használatát a saját tárolt rutinokhoz.
az IGNORE_SPACE SQL mód a beépített funkciókra vonatkozik, nem pedig a storedroutinokra. Mindig megengedhető, hogy egy rutin név után legyen szóköz, függetlenül attól, hogy az IGNORE_SPACE engedélyezve van-e.
a zárójelben szereplő paraméterlistának mindig jelen kell lennie.Ha nincsenek paraméterek, akkor a () üres paraméterlistáját kell használnihasználni. A paraméternevek nem ESET érzékenyek.,
minden paraméter lehet nyilvánítani, hogy bármilyen érvényes adattípus, kivéve, hogya COLLATE attribútum nem használható.
az érvényes azonosítók eljárásnevekként való használatához lásd: Azonosító nevek.
IN/OUT/INOUT
minden paraméter alapértelmezés szerint egyIN
paraméter. Más fora paraméter megadásához használja a OUT
vagy INOUT
kulcsszót a paraméter neve előtt.
An IN
paraméter átad egy értéket egy eljárásba., Az eljárás lehetmódosítsa az értéket, de a módosítás nem látható a hívó számáraamikor az eljárás visszatér. Egy OUT
paraméter egy értéket ad át a hívónak. A kezdeti értéke NULL aeljárásban, értéke pedig a hívó számára látható, amikor az eljáráselőfordul. EgyINOUT
paramétert inicializál a hívó, lehet módosítható az eljárás, és minden változás az eljárás által isvisible a hívó, Ha az eljárás visszatér.,
minden OUT
vagy INOUT
paraméter, adja át a felhasználó által definiált változót aCALL
utasítás, amely meghívja az eljárást, hogy megkaphassa annak értékét, amikor az eljárás visszatér. Ha az eljárást egy másik tárolt eljárásból vagy funkcióból hívja, akkor az aroutine paramétert vagy a helyi rutinváltozót IN
vagy INOUT
paraméterként is átadhatja.
determinisztikus / nem determinisztikus
DETERMINISTIC
és NOT DETERMINISTIC
csak funkciókra alkalmazható., A DETERMINISTC
vagy NON-DETERMINISTIC
eljárásokban történő meghatározásának nincs hatása. Az alapértelmezett érték NOT DETERMINISTIC
. A funkciók DETERMINISTIC
, amikor mindig ugyanazt az értéket adják vissza ugyanazon bemenethez. Például csonka vagy szubsztráló funkció. Az adatokat érintő bármely funkció tehát mindig NOT DETERMINISTIC
.,
SQL/NO SQL/READS SQL DATA/MODIFIES SQL DATA
CONTAINS SQL
, NO SQL
, READS SQL DATA
és MODIFIES SQL DATA
tájékoztató záradékok ez megmondja a szervernek, hogy mit csinál a funkció. A MariaDB semmilyen módon nem ellenőrzi, hogy a megadott záradék helyes-e. Ha ezen kikötések egyike sincs megadva, a CONTAINS SQL
alapértelmezés szerint használatos.
MODIFIES SQL DATA
azt jelenti, hogy a funkció olyan állításokat tartalmaz, amelyek módosíthatják az adatbázisokban tárolt adatokat., Ez akkor történik, ha a funkció olyan kijelentéseket tartalmaz, mint a Törlés, frissítés, beszúrás, csere vagy DDL.
READS SQL DATA
azt jelenti, hogy a függvény adatbázisokban tárolt adatokat olvas, de semmilyen adatot nem módosít. Ez akkor történik, ha a Select kimutatásokat használják, de nincs írási művelet végrehajtva.
CONTAINS SQL
azt jelenti, hogy a funkció legalább egy SQL utasítást tartalmaz, de nem olvas vagy ír semmilyen adatbázisban tárolt adatot. A példák közé tartozik a SET vagy a DO.,
NO SQL
nem jelent semmit, mert a MariaDB jelenleg nem támogat más nyelvet, mint az SQL.
a routine_body egy érvényes SQL procedure utasításból áll. Ez lehet egy egyszerű kijelentés, mint a SELECT vagy INSERT, vagy lehet acompound nyilatkozatot írt BEGIN and END. Az összetett kijelentések tartalmazhatnak nyilatkozatokat, hurkokat és egyéb vezérlőszerkezeteket. A szintaxis részleteit lásd: Programmatic and Compound Statements.
MariaDB lehetővé teszi, hogy a rutinok tartalmazzanak DDL kijelentéseket, mint például a CREATE
andDROP., A MariaDB lehetővé teszi, hogy a tárolt eljárások (de nem tárolt funkciók)SQL tranzakciós nyilatkozatokat tartalmazzanak, mint például a COMMIT
.
további információkat a kijelentéseket, amelyek nem engedélyezettek instored rutinok, lásd tárolt rutin korlátozások.
Hivatkozva tárolt eljárás belül programok
további információ hivatkozva tárolt eljárások belül programok olyan nyelven írták, hogy van egy MariaDB/MySQL felület, lásd: HÍVÁS.
vagy cserélje ki a
MariaDB-t 10, 1-től kezdve.,3
Ha az opcionális OR REPLACE
záradékot használják, akkor a következő parancsikonként működik:
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
azzal a kivétellel, hogy az eljárás bármely meglévő jogosultsága nem csökken.
sql_mode
MariaDB tárolja az sql_mode rendszerváltozó beállítást, amely a rutin létrehozásakor érvényes, és mindig végrehajtja a rutint ezzel a beállítással, függetlenül a kiszolgáló SQL módjától, amikor a rutin meghívásra kerül.
karakterkészletek és Collations
az eljárás paraméterei bármely karakterkészlettel/kollációval deklarálhatók., Ha a karakterkészlet és az összesítés nincs külön beállítva, akkor az adatbázis alapértékei a létrehozáskor lesznek használva. Ha az adatbázis alapértelmezett változás egy későbbi szakaszban, a tárolt eljárás karakterkészlet/leválogatással nem változik egyszerre; a tárolt eljárást kell csökkent, majd újra annak érdekében, ugyanaz karakterkészlet/leválogatással, mint az adatbázist használják.
Oracle Mode
MariaDB kezdve 10.3
MariaDB 10.3, egy részhalmaza Oracle PL / SQL nyelv már támogatott mellett a hagyományos SQL / PSM-alapú MariaDB szintaxis., Lásd Oracle mód MariaDB 10.3 a részleteket változások futtatásakor Oracle módban.
példák
a következő példa egy egyszerű tárolt eljárást mutat be, amely egy OUT
paramétert használ. A DELIMITER paranccsal új határolót állít be a folyamat időtartamára-lásd a határolókat a mysql kliensben.,
karakterkészletet, majd leválogatással:
LÉTRE, VAGY CSERÉLJE ki:
Lásd
- Azonosító, Név
- Tárolt Eljárás Áttekintése
- ALTER ELJÁRÁS
- CSEPP ELJÁRÁS
- SHOW LÉTRE ELJÁRÁS
- SHOW ELJÁRÁS ÁLLAPOTA
- Tárolt Rutin Jogosultságok
- Információ Séma RUTINOK Táblázat