Sql - 15. lecke

Főoldal → → tanulságai SQL lecke 15. A tárolt eljárások. Létrehozása, használata és ártalmatlanítása.

Általános szabály, hogy dolgozunk az adatbázist használja ugyanazt a kérelmet, vagy állítsa az egymást követő lekérdezések. A tárolt eljárások lehetővé teszik, hogy összekapcsolják a szekvencia lekérdezések, és mentse őket a szerverre. Ez egy nagyon kényelmes eszköz, és most nézd meg magad. Kezdjük a szintaxis:

CREATE ELJÁRÁS eljárás_neve (paraméterek) kezdődik nyilatkozatok végén

Paraméterek az adat, hogy helyezzük át az eljárást, amikor hívják, és a gazdasági szereplők - valójában szüksége van. Írjunk egy első eljárás és ellenőrizni a használhatóság. A 10. lecke, amikor új rekordokat az adatbázisban boltban, mi használjuk a standard kérelmet nyújtottak be a fajok:

INSERT INTO ügyfelek (név, e-mail) ÉRTÉK (Ivanov, Szergej ', '[email protected]');

mert ilyen kérelem fogjuk használni minden alkalommal, amikor szüksége lesz, hogy egy új ügyfél, célszerű intézményesíteni azt egy eljárásban:

CREATE ELJÁRÁS ins_cust (n CHAR (50), e CHAR (50)) kezdődik betét a vásárlók (név, e-mail) értéket (n, e); vég

Figyeljük meg, hogy meghatározzák: meg kell adni a nevét, a paraméterek és határozza meg annak típusát, és a testkezelések már használhatja a paraméter neveket. Egy kivétellel. Mint bizonyára emlékeznek rá, a pontosvessző végét jelzi a lekérdezést, majd elküldi elvégzésére, amely ebben az esetben elfogadhatatlan. Ezért, mielőtt írsz egy eljárásra van szükség, hogy újra az elválasztó; A „//” kérni, hogy ne küldjön idő előtt. Ez történt a segítségével DELIMITER // operátor.

Így adja meg az adatbázis, hogy most meg kell futtatni parancsokat után //. Emlékeztetni kell arra, hogy az újradefiniálása szeparátor egyetlen munkamenetben, azaz A következő alkalommal, amikor dolgozni MySql elválasztó lesz újra pontosvesszővel, és ha szükséges, akkor azt újra meg újra. Most leadhatja eljárás:

CREATE ELJÁRÁS ins_cust (n CHAR (50), e CHAR (50)) kezdődik betét a vásárlók (név, e-mail) értéket (n, e); end //

Így, az eljárást létre. Most, amikor be kell vezetnünk egy új ügyfél, egyszerűen hívja azt kell határozni a szükséges paramétereket. Hívni egy tárolt eljárást alkalmazott CALL utasítással. majd az eljárás nevét és paramétereit. Adjunk hozzá egy új vevő az asztalunkhoz vevők (fogyasztók):

hívja ins_cust (Sychov Valery ", '[email protected]') //

Egyetértenek abban, hogy ez így sokkal könnyebb, mint írni minden egyes alkalommal a teljes vizsgálatot. Ellenőrizze, hogy a beavatkozáshoz, hogy ha egy új vevő futva táblázat vevők (fogyasztók):

Úgy tűnt, az eljárás működik, és mindig működik, amíg nem távolítjuk el a DROP ELJÁRÁS nyilatkozat nazvanie_protsedury.

Amint az elején a leckét, az eljárás lehetővé teszi, hogy összekapcsolják a szekvencia lekérdezések. Lássuk, hogyan kell ezt csinálni. Emlékezz leckében 11 akartuk megtudni, hogy mennyire az árut szállító „Print House”? Ehhez kellett használni beágyazott lekérdezéseket, egyesület, számított oszlopok és nézetek. És ha azt akarjuk, hogy megtudja, mennyit hozott az áru másik szolgáltató? Mi lesz, hogy az új kéréseket, egyesületek stb Egyszerűen egyszer írni egy tárolt eljárást ehhez a művelethez.

Úgy tűnik, hogy a legegyszerűbb módja annak, hogy egy előre megírt a lecke bemutatása 11 és kérte fel, hogy összekapcsolják a tárolt eljárást, és elvégzik a gyártó azonosítóját (id_vendor) bemeneti paraméter, mint ez:

CREATE ELJÁRÁS sum_vendor (i int) kezdődik CREATE VIEW report_vendor AS SELECT magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity * prices.price AS summa FROM magazine_incoming árak WHERE magazine_incoming.id_product = prices.id_product ÉS id_incoming = ( SELECT id_incoming a bejövő AHOL id_vendor = i); SELECT SUM (summa) FROM report_vendor; end //

De mivel az eljárás nem működik. A lényeg az, hogy nem paramétereket lehet használni a kilátást. Tehát meg kell változtatni a sorrendjét néhány lekérdezést. Először hozzunk létre egy nézetet, amely megjeleníti a gyártó azonosítóját (id_vendor), a termék azonosító (id_product) száma (db), (ár), és az összeget (summa) a három asztal Supply (bejövő), az ellátási magazin (magazine_incoming) Ár ( árak):

CREATE VIEW report_vendor AS SELECT incoming.id_vendor, magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity * prices.price AS summa a bejövő, magazine_incoming árak WHERE magazine_incoming.id_product = prices.id_product ÉS magazine_incoming.id_incoming = bejövő .id_incoming;

Majd hozzon létre egy lekérdezést, amely összefoglalja az összeget a kínálat érdekes számunkra a szállító például id_vendor = 2:

SELECT SUM (Summa) SZÁRMAZÓ report_vendor AHOL id_vendor = 2;

Most tudjuk kombinálni a két lekérdezés egy tárolt eljárás, ahol a bemeneti paraméter azonosító szolgáltató (id_vendor), amely helyettesítheti a második kérelmet, de nem a nézetben:

CREATE ELJÁRÁS sum_vendor (i int) kezdődik CREATE VIEW report_vendor AS SELECT incoming.id_vendor, magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity * prices.price AS summa a bejövő, magazine_incoming árak WHERE magazine_incoming.id_product = árak .id_product ÉS magazine_incoming.id_incoming = incoming.id_incoming; SELECT SUM (Summa) SZÁRMAZÓ report_vendor AHOL id_vendor = i; end //

Ellenőrizze a műveletet az eljárás különböző bemenetek:

hívja sum_vendor (1) // hívja sum_vendor (2) // hívja sum_vendor (3) //

Mint látható, az eljárás után aktiválódik, majd egy hibaüzenetet jelenít meg azt mondja, hogy az ábrázolás report_vendor már létezik az adatbázisban. Ez azért történik, mert amikor hivatkozva az eljárás első alkalommal, hogy létrehoz egy nézetet. Ha telefonál, a második alkalommal, megpróbálja újra létrehozni egy nézetet, de már ott van, és így van egy hiba. A probléma elkerülése érdekében két módon.

Az első -, hogy a bemutató az eljárás. Azaz, ha létrehozunk egy nézetet, és az eljárás csak akkor alkalmazható rá, de nem hozza létre. Pre felejtse el a már létrehozott eljárások és teljesítmény:

DROP ELJÁRÁS sum_vendor // DROP VIEW report_vendor // CREATE VIEW report_vendor AS SELECT incoming.id_vendor, magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity * prices.price AS summa a bejövő, magazine_incoming, árak, AHOL magazine_incoming.id_product = prices.id_product ÉS magazine_incoming.id_incoming = incoming.id_incoming // Létrehozunk ELJÁRÁS sum_vendor (i int) kezdődik SELECT SUM (summa) FROM WHERE report_vendor id_vendor = i; end //

hívja sum_vendor (1) // hívja sum_vendor (2) // hívja sum_vendor (3) //

A második lehetőség - közvetlenül az eljárás, hogy adjunk egy parancsot, amely törli a nézetet, ha létezik:

CREATE ELJÁRÁS sum_vendor (i int) kezdődik DROP VIEW ha létezik report_vendor; CREATE VIEW report_vendor AS SELECT incoming.id_vendor, magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity * prices.price AS summa a bejövő, magazine_incoming árak WHERE magazine_incoming.id_product = prices.id_product ÉS magazine_incoming.id_incoming = bejövő .id_incoming; SELECT SUM (Summa) SZÁRMAZÓ report_vendor AHOL id_vendor = i; end //

Mielőtt ezt az opciót, akkor vegye ki belőle sum_vendor eljárást, majd ellenőrizze a működést:

Mint látható, az összetett lekérdezések vagy egy sorozat nagyon könnyű, ha készül egy tárolt eljárást, majd egyszerűen utalnak rá, jelezve a szükséges paramétereket. Ez jelentősen csökkenti a kódot, és amely kérelmeket logikusabb.

Ha ezen az oldalon volt hasznos az Ön számára, segíthet a fejlesztési azáltal az alábbi linkek webhelyére.

Kapcsolódó cikkek