A tárolt eljárások mysql, mysql

MySQL tárolt eljárás egy rutin, amely az adatbázisban tárolt. Ez tartalmazza a nevét, a paraméter lista, és az SQL. Minden népszerű adatbázis-kezelő rendszerek támogatják a tárolt eljárásokat. Ők vezették be MySQL 5.

Kétféle rutinok: tárolt eljárások és függvények visszatérési értékek, amelyek használják a többi SQL (például pi ()).

A fő különbség az, hogy a funkció továbbra is használható, mint bármely más kifejezést belül SQL. és a tárolt eljárást kell hívni a CALL utasítással.

Milyen előnyei vannak a tárolt eljárások?

  • A tárolt eljárások gyors. MySQL szerver előnye az, hogy használ-gyorsítótár és az előre meghatározott üzemeltetők. A fő növekedés sebessége lehetővé teszi a csökkentés a hálózati forgalom. Ha vannak ismétlődő feladatok, amelyek megkövetelik ellenőrzése, feldolgozása ciklusok többüzemeltetős, és nem igényel felhasználói beavatkozást, akkor végre egy egységes eljárás hívás, amely tárolja a szerver;
  • MySQL tárolt eljárások egyetemesek. Írásakor a tárolt eljárást az SQL működni fog minden platformon, amely a MySQL. Ez az SQL előnye más nyelvek, mint a Java. C vagy PHP;
  • A forráskód a tárolt eljárások mindig elérhető az adatbázisban. Jó gyakorlat társítani az adatokat a folyamatokat, amelyek kezelni őket.

létrehozása eljárások

Alapértelmezésben az eljárást társított adatbázis jelenleg használatban van. Társítani eljárást egy adott adatbázishoz, adja meg a létrehozását tárolt eljárás: imya_bazy_dannyh.imya_hranimoy_protsedury. Teljes szintaxis:

Mielőtt MySQL végre hívást a tárolt eljárást. meg kell, hogy bizonyos információkat.

Ellenőrzése MySQL verzió

Az alábbi parancs megjeleníti a MySQL verzió:

Ellenőrizze az aktuális felhasználó jogosultságait

Parancsok CREATE ELJÁRÁS és a CREATE FUNCTION szükséges felhasználói jogosultság CREATE rutin. Akkor is kell a SUPER kiváltság. ez függ az értéke DEFINER. amely a továbbiakban ismertetünk. Ha bináris naplózás be van kapcsolva a CREATE FUNCTION. előírhatja, hogy a SUPER kiváltság. Alapértelmezésben a MySQL automatikusan biztosítja az alkotónak rutinok kiváltságokat ALTER rutin és a végrehajtás. Ez a viselkedés megváltoztatható, ha kikapcsolja a rendszert változó automatic_sp_privileges:

Kiválasztása Adatbázis

Most válassza ki az adatbázisból „hr” és megjelenik egy lista a táblázatok:

A választás a szeparátor

Elválasztó - a karakter vagy a karakterlánc, hogy használják, zárja be az SQL utasítást. (;) Alapértelmezés szerint a pontosvessző használják elválasztó. De ez problémát okoz a tárolt eljárások és triggerek MySQL. mert van egy csomó szereplők, és minden kell pontosvesszővel végződnek. Ezért, mint egy elválasztó fogja használni a kettős dollár jel - $$. Ahhoz, hogy később újra felhasználni, elválasztó „” parancs „az elválasztó; $$”. Az alábbiakban a kódot megváltoztatni a határoló:

Most az alapértelmezett DELIMITER - "$$". Egy egyszerű parancs SQL:

Most futtassuk a következő parancsot, hogy újra set „” mint egy elválasztó:

Példa MySQL eljárás

Létrehozunk egy egyszerű MySQL nevezett eljárás job_data. teljesítése során ez fog megjelenni az összes adatot az asztalon „munkahely”:

Magyarázat:
  • A parancs CREATE ELJÁRÁS létrehoz egy tárolt eljárást;
  • A következő rész - „job_data” a neve az eljárás;
  • eljárás nevek nem nagybetűk, tehát job_data egyenértékű JOB_DATA;
  • Nem tudja használni a két eljárás azonos nevű ugyanabban az adatbázisban;
  • Használhatja a neveket a formátum „név-protsedury.imya-bázis-adatokat,” például „hr.job_data”;
  • Nevei eljárások bonthatók. Ha a név van osztva, akkor tartalmazhat szóközt;
  • Maximális eljárás neve hossz 64 karakter;
  • Kerülje a nevek beépített MySQL függvények;
  • Az utolsó része a „CREATE ELJÁRÁS” - zárójelek listáját tartalmazza paramétereket. Mivel ez az eljárás nincsenek paraméterei, a lista üres;
  • A következő rész a SELECT * FROM JOBS; $$ - ez az utolsó nyilatkozatot a szintaktikai MySQL tárolt eljárásokat. A pontosvessző (;) itt nem kötelező, mint az igazi vége az üzemeltető $$.

Eszközök létrehozására MySQL eljárások

Írhatsz egy eljárást a MySQL parancssori eszköz segítségével vagy MySQL Workbench.

MySQL parancssori eszköz:

Válassza a „Start” menü „Client MySQL parancssori”:

A tárolt eljárások mysql, mysql

Látni fogja a következő képernyő:

A tárolt eljárások mysql, mysql

A tárolt eljárások mysql, mysql

Most meg lehet írni és futtatni a saját eljárásokat lásd a következő példát:

A tárolt eljárások mysql, mysql

MySQL Workbench (5.3 CE):

Kattintson a „Start» «MySQL Workbench»:

A tárolt eljárások mysql, mysql

Akkor látni fogja a következő képernyő:

A tárolt eljárások mysql, mysql

Írja be a hitelesítő adatait:

A tárolt eljárások mysql, mysql

A tárolt eljárások mysql, mysql

Ezt követően, kattintson a jobb gombbal az elemre «rutinok» és egy új pop-up ablak jelenik meg a képernyőn:

A tárolt eljárások mysql, mysql

Ezt követően a képernyőn megjelenik a következő ablak, ahol lehet létrehozni saját eljárást MySQL:

A tárolt eljárások mysql, mysql

Miután az írási folyamat, nyomja meg az «Apply» és a következő ablak jelenik meg a képernyőn:

A tárolt eljárások mysql, mysql

A tárolt eljárások mysql, mysql

Most kattintson a «Befejezés» és kezdi az eljárást:

A tárolt eljárások mysql, mysql

eljárás hívás

CALL utasítás segítségével hívja eljárást, amelyet az adatbázisban tárolt. A szintaxis a következő:

MySQL tárolt eljárások, amelyek nem veszik érveket, nevezhetjük zárójelek nélkül. Ezért CALL job_data () egyenértékű CALL job_data.

Csináljuk ezt az eljárást:

SHOW CREATE ELJÁRÁS

Ez a kijelentés egy kiterjesztése a MySQL. Visszaadja az exact string, hogy lehet használni, hogy újra létrehozni a megadott tárolt eljárást. A szintaxis a következő:

Nézzük megvalósítható MySQL tárolt eljárás hívás:

MySQL: blokkok jellemzők

A szintaxis a CREATE ELJÁRÁS nyilatkozat megengedett az olyan mondatokat, amelyeket jellemzőit írják le az eljárást. Blocks után feltüntetett zárójelben, de az eljárás előtt testet. Ezek az egységek nem kötelező.

Jellemzői COMMENT - kiterjesztése a MySQL. Arra használják, hogy leírja a tárolt eljárások, és ez az információ megjelenik a kezelő SHOW CREATE ELJÁRÁS.

NYELV jellemző azt jelzi, hogy az eljárás a test van írva az SQL.

nem mérvadó,

Ez az információ jellemző. Az eljárás akkor tekinthető „determinisztikus”, ha mindig ugyanazt az eredményt ugyanazon bemeneti paraméterek, különben „nem határoztuk meg”.

TARTALMAZ SQL | NO SQL | Olvasás SQL DATA | Módosítja SQL DATA

TARTALMAZ SQL azt jelenti, hogy nincs alkalmazások adatait olvasni vagy írni egy tárolt eljárást MySQL. Például, a nyilatkozatok SET @x = 1 vagy DO RELEASE_LOCK ( 'ABC'). kerülnek végrehajtásra, de nem olvasni vagy írni az adatokat. Ez az alapértelmezett, ha nincs más érték jellemzőit.

NO SQL azt jelenti, hogy az eljárás nem tartalmaz SQL.

Olvasás SQL DATA - rutin kijelentéseket tartalmaz, hogy olvassa el az adatok (például SELECT), de nem tartalmazhat olyan kijelentéseket, hogy írni az adatokat.

Szerint módosítja SQL DATA-eszközökkel. alprogramot tartalmazó kijelentéseket adatokat írni (például beszúrni vagy törölni).

Minden felsorolt ​​jellemzők blokkok alapértékeket. A következő két állítás így ugyanazt az eredményt:

ugyanazt a dolgot:

Mielőtt a MySQL paramétereket. nézd meg néhány alkatrész MySQL szereplők.

MySQL: összetett utasításokat

Ebben a részben megnézzük az első négy üzemeltetők által a CREATE ELJÁRÁS nyilatkozat paramétereket.

A szintaxis egy összetett utasítás BEGIN. VÉGE

Akkor használják, ha azt szeretné, hogy maradjon a alprogram (pl MySQL tárolt eljárásokat. Funkció, trigger, vagy esemény) több, mint az egyik szolgáltató. A szintaxis a következő:

spisok_operatorov egy vagy több kezelő, egészen a pontosvessző (;). Önmagában a lista operátorok nem szükséges, így egy üres állítás BEGIN END érvényes.

Címkék szereplők

Címkék - engedélyt elvégezni a BEGIN blokk. END és REPEAT, és bár hurok szereplők. A szintaxis a következő:

Alkalmazása során a címkék az alábbi szabályok érvényesek:
  • begin_label kell zárni egy vastagbél;
  • begin_label nélkül is használható metki_kontsa. Ha END_LABEL jelen van, meg kell tartoznak azonos blokk, mint a begin_label;
  • END_LABEL nem lehet használni anélkül, hogy metki_nachala;
  • címkék, amelyek ugyanabban a fészkelő szinten kell osztani;
  • címkék nem lehet hosszabb, mint 16 karakter.

a DECLARE

Meghatározására használt különböző helyi elemek MySQL létre egy tárolt eljárást. Például, a helyi változókat, feltételeit, a feldolgozók, kurzorok. DECLARE használjuk csak egy összetett utasítás BEGIN. END és kell az elején, mielőtt az összes többi szereplővel szemben.

Változókat a tárolt programok

Ahhoz, hogy megadja az alapértelmezett érték a változó a default blokk. Az érték lehet beállítani, mint egy expressziós; ez nem feltétlenül kell állandó. Ha az alapértelmezett blokk hiányzik, a kezdeti érték egyenlő NULL.

Példa: A lokális változók

Helyi deklaráljuk belül MySQL tárolt eljárásokat. Ezek csak akkor érvényesek, az END blokk. BEGIN. ahol bejelentették őket. Lokális változók tetszőleges SQL adattípus. Az alábbi példa bemutatja a használatát lokális változók egy tárolt eljárásban:

Most az alábbi eljárást:

Példa: A felhasználó által definiált változók

A MySQL tárolt eljárások fellebbezni egyéni változók révén történik jel (@) neve előtt egyéni változó (például @x és @y). Az alábbi példa bemutatja a használatát felhasználói változók belsejében tárolt eljárást:

MySQL: eljárás paraméterek

A következőkben a szintaxis a CREATE ELJÁRÁS paraméterek:

Syntax:
  1. CREATE ELJÁRÁS eljárás_neve ().
  2. CREATE ELJÁRÁS eljárás_neve ([IN] érték_neve típus).
  3. CREATE ELJÁRÁS eljárás_neve ([OUT] érték_neve típus).
  4. CREATE ELJÁRÁS eljárás_neve ([INOUT] érték_neve típus).
  • Az első példában a paraméter lista üres.
  • A második példában a paraméter értéke IN továbbítja az eljárást. Ez az eljárás megváltoztathatja az értéket. De amikor az eljárás egy értéket ad vissza, akkor nem lesz látható a hívó ügynök.
  • Egy harmadik példa, a paraméter értékét az átadás vissza a hívó eljárás ügynök. A kezdeti érték NULL eljárást. és amikor az eljárás egy értéket ad vissza, egyértelmű, hogy a hívó fél az ügynök.
  • Egy negyedik példában a paramétert inicializálni INOUT kiváltó szert, ez lehet módosítani eljárás, és az eljárás visszatér, bármilyen változás történik MySQL tárolt eljárás lesz látható a hívó ügynök.

Az eljárás során az egyes paraméterek alapértelmezett paraméter. Ennek megváltoztatásához használja a paraméter nevét, hogy a kulcsszó OUT vagy INOUT.

MySQL eljárás: példa paraméter

Az alábbi eljárást használjuk paraméter „var1” (egész típusú), amely fogadja a számot a felhasználó. A szervezet az eljárás a SELECT utasításban. hogy sorait „munkahely” táblázatban. A sorok száma a felhasználó által megadott. A következő eljárással:

Válassza ki az első két sor a „munkahely” az asztal, az alábbi parancsot:

Most válassza ki az első öt sor a „munkahely” táblázat:

MySQL eljárás: példa paraméter OUT

További MySQL tárolt eljárás bemutatott olyan példa, amelyben a paramétert használjuk OUT. Mivel az eljárás része MySQL funkció MAX () beolvassa a maximális fizetés az oszlop MAX_SALARY „munkahelyek” táblázat:

A szervezet az eljárás paraméter kapja a legmagasabb fizetést MAX_SALARY oszlopban. Miután az eljárás hívása szót mondja a DBMS. hogy az érték jön a folyamatot. highest_salary - a neve a kimeneti paraméter a CALL utasítás, adtunk neki értékét a munkamenet a neve @M:

MySQL Eljárás: Paraméter Példa INOUT

A következő példa azt mutatja, egy egyszerű tárolt eljárást MySQL. amely felhasználja INOUT paraméter és az IN. A felhasználó megadja a „M” vagy „F” a paraméter (emp_gender) számláljuk az alkalmazottak száma a hím vagy nőstény a user_details táblázat. Paraméter INOUT (mfgender) az eredményt visszaküldi a felhasználónak. Itt a kód, és az eredmény az eljárás:

Most ellenőrizze a foglalkoztatottak száma, a férfi és női ebben a táblázatban:

MySQL: Flow Control operátorok

MySQL tartószerkezet áramlásának szabályozására tárolt adatok az IF programokat. CASE. ITERATE. Szabadságra. LOOP. MÍG és ismételje meg. RETURN is támogatja a MySQL tárolt eljárásokat.

MySQL: IF nyilatkozat

IF utasítás végrehajtja alapvető tervezési feltételeket, meg kell pontosvesszővel végződnek. Van is egy függvény IF (), amely eltér az üzemeltető IF. Itt látható a szintaxis a IF:

Ha ez a feltétel teljesül, a kimutatások megfelelő THEN vagy ELSE IF blokk.

Ha a feltétel nem teljesül, az üzemeltetők ELSE blokk végre. Minden utasítást, amely egy vagy több SQL; Tegyük fel, hogy az üzemeltető nem engedélyezett.

A következő példában át a paramétert user_id. kap egy felhasználói nevet. Ennek része az eljárásnak, használjuk az üzemeltető IF ELSE IF és más. hogy a felhasználó nevét a különböző felhasználói azonosítókat. felhasználónév lesz tárolva paraméter user_name INOUT:

Végre MySQL tárolt eljárás hívás:

MySQL: CASE nyilatkozat

CASE utasítás segítségével hozzon létre egy tárolt eljárás keretében MySQL bonyolult feltételes szerkezetek. CASE nyilatkozat nem tartalmazhat blokk ELSE NULL és be kell zárni END CASE. helyett END. szintaxis:

Magyarázat: Az első szintaxis

Érték - ez a kifejezés értékhez képest az egyes HA blokk. amíg azok egyenlő. Amikor az eredmények szerint van elvégezve megfelelő értékeket spisok_operatorov, blokkolhatja.

Ha az értékek nem egyeznek, akkor végre spisok_operatorov ELSE blokk. (Ha van).

Magyarázat: A második szintaxis

Mindkét expressziós egység keresése értékelt kritérium. amíg egyikük igaz. Ezen a ponton végezzük spisok_operatorov THEN megfelelő blokk.

Ha egyik kifejezések keresési feltétel nem teljesül, akkor fut spisok_operatorov ELSE blokk. ha van ilyen. Minden spisok_operatorov áll egy vagy több SQL; üres spisok_operatorov nem megengedett.

Van egy tábla az úgynevezett „munkahely”, az alábbi bejegyzéseket:

Számolja meg a személy, aki megfelel az alábbi feltételeknek:

  • MIN_SALARY> 10000
  • MIN_SALARY

Kapcsolódó cikkek