itthon / Online szolgáltatások / SQL tárolt eljárások: létrehozás és használat. Tárolt eljárások Mi az az sql tárolt eljárás

SQL tárolt eljárások: létrehozás és használat. Tárolt eljárások Mi az az sql tárolt eljárás

Az SQL tárolt eljárások végrehajtható programmodulok, amelyek különféle objektumok formájában tárolhatók. Más szóval, ez egy objektum, amely SQL utasításokat tartalmaz. Ezek a tárolt eljárások végrehajthatók az alkalmazáskliensben, hogy megszerezzék jó teljesítmény. Ezenkívül az ilyen objektumokat gyakran más parancsfájlokból vagy akár más szakaszokból hívják meg.

Bevezetés

Sokan úgy vélik, hogy hasonlóak a különféle eljárásokhoz (illetve, kivéve az MS SQL-t). Talán ez igaz. Hasonló paraméterekkel rendelkeznek, és hasonló értékeket tudnak produkálni. Sőt, bizonyos esetekben összeérnek. Például kombinálják őket DDL és DML adatbázisokkal, valamint felhasználói funkciókkal (kódnéven UDF).

A valóságban az SQL tárolt eljárások rendelkeznek széleskörű előnyök, amelyek megkülönböztetik őket a hasonló folyamatoktól. Biztonság, programozási rugalmasság, termelékenység – mindez egyre több adatbázissal dolgozó felhasználót vonz. Az eljárások népszerűségének csúcspontja 2005-2010 között volt, amikor megjelent a Microsoft „SQL Server Management Studio” nevű programja. Segítségével az adatbázisokkal való munka sokkal könnyebbé, praktikusabbá és kényelmesebbé vált. Ez évről évre népszerűvé vált a programozók körében. Ma már teljesen ismerős program, amely az adatbázisokkal „kommunikáló” felhasználók számára egyenrangú az Excellel.

Egy eljárás meghívásakor azt azonnal maga a szerver dolgozza fel anélkül szükségtelen folyamatokés a felhasználói beavatkozás. Ezt követően bármilyen törlést, végrehajtást vagy módosítást végezhet. Mindezért a DDL operátor a felelős, aki egyedül végzi el a legösszetettebb műveleteket az objektumok feldolgozásához. Ráadásul mindez nagyon gyorsan megtörténik, és a szerver valójában nem töltődik be. Ez a sebesség és teljesítmény lehetővé teszi nagy mennyiségű információ nagyon gyors átvitelét a felhasználótól a szerverre és fordítva.

Ennek a technológiának az információkkal való munkavégzéshez való megvalósításához számos programozási nyelv létezik. Ide tartozik például az Oracle PL/SQL, az InterBase és Firebird rendszerek PSQL-je, valamint a klasszikus Microsoft Transact-SQL. Mindegyiket tárolt eljárások létrehozására és végrehajtására tervezték, ami lehetővé teszi a nagy adatbázis-feldolgozók számára, hogy saját algoritmusaikat használják. Erre azért is van szükség, hogy az ilyen információkat kezelők minden objektumot megvédhessenek harmadik felek illetéktelen hozzáférésétől, és ennek megfelelően bizonyos adatok létrehozásától, módosításától vagy törlésétől.

Termelékenység

Ezek az adatbázis-objektumok többféleképpen programozhatók. Ez lehetővé teszi a felhasználók számára, hogy kiválasszák a legmegfelelőbb módszert, így erőfeszítést és időt takarítanak meg. Ezenkívül az eljárás maga is feldolgozásra kerül, így elkerülhető a szerver és a felhasználó közötti kommunikációra fordított hatalmas idő. A modul átprogramozható és be is cserélhető a helyes irányt teljesen bármely pillanatban. Különösen érdemes figyelni az SQL tárolt eljárás elindításának sebességére: ez a folyamat gyorsabban megy végbe, mint a többi hasonló, ami kényelmessé és univerzálissá teszi.

Biztonság

Ez a fajta információfeldolgozás abban különbözik a hasonló folyamatoktól, hogy fokozott biztonságot garantál. Ezt az a tény biztosítja, hogy teljesen kizárható más felhasználók hozzáférése az eljárásokhoz. Ez lehetővé teszi az adminisztrátor számára, hogy önállóan végezzen műveleteket velük, anélkül, hogy félne az információk elfogásától vagy az adatbázishoz való jogosulatlan hozzáféréstől.

Adatátvitel

Az SQL tárolt eljárás és a kliens alkalmazás közötti kapcsolat a paraméterek és a visszatérési értékek használata. Ez utóbbinak nem kell átadnia az adatokat a tárolt eljárásnak, hanem ezeket az információkat (főleg a felhasználó kérésére) az SQL számára feldolgozzák. Miután a tárolt eljárás befejezte a munkáját, visszaküldi az adatcsomagokat (de ismételten opcionálisan) az őt hívó alkalmazásnak, különféle módszerek, melynek segítségével egy tárolt SQL-eljárás hívása és egy visszatérés is végrehajtható, pl.

Adatátvitel Output típusú paraméter használatával;

Adattovábbítás a return operátor segítségével;

Adattovábbítás a kiválasztási operátor segítségével.

Most nézzük meg, hogyan néz ki ez a folyamat belülről.

1. Hozzon létre egy EXEC tárolt eljárást SQL-ben

Eljárást létrehozhat az MS SQL-ben (Managment Studio). Az eljárás létrehozása után megjelenik az adatbázis programozható csomópontjában, amelyben a létrehozási eljárást az operátor végrehajtja. Az SQL tárolt eljárások végrehajtásához egy EXEC folyamatot használnak, amely magának az objektumnak a nevét tartalmazza.

Amikor létrehoz egy eljárást, először annak neve jelenik meg, majd egy vagy több hozzárendelt paraméter. A paraméterek opcionálisak lehetnek. A paraméter(ek), azaz az eljárás törzsének felírása után néhány szükséges műveletet el kell végezni.

A lényeg az, hogy egy testben lokális változók helyezkedhetnek el, és ezek a változók az eljárásokhoz képest is lokálisak. Más szóval, csak a Microsoft SQL Server eljárás törzsében tekinthetők meg. A tárolt eljárások ebben az esetben helyinek minősülnek.

Tehát egy eljárás létrehozásához szükségünk van az eljárás nevére és legalább egy paraméterre, mint az eljárás törzsére. Ne feledje, hogy ebben az esetben nagyszerű lehetőség egy eljárás létrehozása és végrehajtása az osztályozóban szereplő sémanévvel.

Az eljárás törzse bármilyen lehet, például tábla létrehozása, tábla egy vagy több sorának beszúrása, az adatbázis típusának és jellegének megállapítása stb. Az eljárási szerv azonban korlátozza bizonyos műveletek végrehajtását. Az alábbiakban felsorolunk néhány fontos korlátozást:

A szervezet nem hozhat létre más tárolt eljárást;

A test nem kelthet hamis benyomást a tárgyról;

A testnek nem szabad kiváltót létrehoznia.

2. Változó beállítása az eljárás törzsében

Lokális változókat állíthat be az eljárás törzséhez, és akkor azok kizárólag az eljárás törzsében lesznek. Célszerű a tárolt eljárástörzs elején változókat létrehozni. De az adott objektum törzsében bárhol beállíthat változókat.

Néha észreveheti, hogy egy sorban több változó van beállítva, és minden változó paramétert vessző választ el. Vegye figyelembe azt is, hogy a változó előtt @ előtag van. Az eljárás törzsében beállíthatja a változót, ahol csak akarja. Például a @NAME1 változó deklarálható az eljárástörzs végén. Egy deklarált változó értékének hozzárendeléséhez személyes adatok halmazát kell használni. Ellentétben azzal a helyzettel, amikor egynél több változót deklarálnak ugyanabban a sorban, ebben a helyzetben csak egy személyes adatkészlet kerül felhasználásra.

A felhasználók gyakran felteszik a kérdést: "Hogyan lehet több értéket hozzárendelni egy utasításhoz egy eljárás törzsében?" Jól. Érdekes kérdés, de sokkal könnyebb megtenni, mint gondolnád. Válasz: Olyan párok használata, mint például "Select Var = érték". Ezeket a párokat vesszővel elválasztva használhatja.

Számos példa mutat be embereket, akik egyszerű tárolt eljárást hoznak létre és hajtanak végre. Egy eljárás azonban képes olyan paramétereket elfogadni, hogy az őt hívó folyamat értékei közel állnak hozzá (de nem mindig). Ha egybeesnek, akkor megfelelő folyamatok indulnak el a testben. Például, ha létrehoz egy eljárást, amely elfogad egy várost és régiót a hívótól, és adatokat ad vissza arról, hogy hány szerző tartozik a megfelelő városhoz és régióhoz. Az eljárás lekérdezi az adatbázis szerzői tábláit, például a Pubokat a szerzők számának végrehajtásához. Például ezeknek az adatbázisoknak a beszerzéséhez a Google letölti az SQL-szkriptet az SQL2005 oldalról.

Az előző példában az eljárás két paramétert vesz igénybe, amelyeket angolul @State és @City néven nevezünk. Az adattípus megegyezik az alkalmazásban meghatározott típussal. Az eljárás törzsében @TotalAuthors belső változók találhatók, és ez a változó a szerzők számának megjelenítésére szolgál. Következik a lekérdezés kiválasztása szakasz, amely mindent kiszámít. Végül a számított érték kinyomtatásra kerül a kimeneti ablakban a print utasítás segítségével.

Hogyan hajtsunk végre egy tárolt eljárást SQL-ben

Az eljárás végrehajtásának két módja van. Az első mód paraméterek átadásával azt mutatja meg, hogy a vesszővel tagolt lista hogyan kerül végrehajtásra az eljárás neve után. Tegyük fel, hogy két értékünk van (mint az előző példában). Ezeket az értékeket a @State és @City eljárásparaméter-változók segítségével gyűjtjük össze. Ebben a paraméterátadási módszerben a sorrend fontos. Ezt a módszert ordinális argumentum átadásnak nevezzük. A második módszernél a paraméterek már közvetlenül hozzá vannak rendelve, és ebben az esetben a sorrend nem fontos. Ez a második módszer nevesített argumentumok átadásaként ismert.

Az eljárás kissé eltérhet a szokásostól. Minden ugyanaz, mint az előző példában, de csak itt vannak eltolva a paraméterek. Ez azt jelenti, hogy először a @City paraméter kerül tárolásra, a @State pedig az alapértelmezett érték mellé. Az alapértelmezett paraméter általában külön kiemelve van. Az SQL tárolt eljárások csak paraméterként kerülnek átadásra. Ebben az esetben, feltéve, hogy az "UT" paraméter helyettesíti az alapértelmezett "CA" értéket. A második végrehajtás során csak egy argumentumérték kerül átadásra a @City paraméterhez, és a @State paraméter az alapértelmezett "CA" értéket veszi fel. A tapasztalt programozók azt tanácsolják, hogy alapértelmezés szerint minden változónak a paraméterlista végén kell lennie. Ellenkező esetben a végrehajtás nem lehetséges, és akkor megnevezett argumentumok átadásával kell dolgozni, ami hosszabb és összetettebb.

4. SQL Server tárolt eljárások: Visszaküldési módszerek

Három fontos módja van az adatok küldésének egy úgynevezett tárolt eljárásban. Az alábbiakban felsoroljuk őket:

Egy tárolt eljárás értékét adja vissza;

Tárolt eljárási paraméter kimenet;

A tárolt eljárások egyikének kiválasztása.

4.1 Értékek visszaadása SQL tárolt eljárásokból

Ebben a technikában egy eljárás értéket rendel egy helyi változóhoz, és visszaadja azt. Egy eljárás közvetlenül is visszaadhat egy állandó értéket. A következő példában létrehoztunk egy eljárást, amely a szerzők teljes számát adja vissza. Ha összehasonlítja ezt az eljárást az előzőekkel, láthatja, hogy a nyomtatási érték megfordul.

Most nézzük meg, hogyan kell végrehajtani egy eljárást és kinyomtatni a visszatérési értékét. Az eljárás végrehajtásához egy változó beállítására és nyomtatásra van szükség, amely a teljes folyamat után megtörténik. Vegye figyelembe, hogy a print utasítás helyett használhat Select utasítást, például Select @RetValue vagy OutputValue utasítást.

4.2 SQL tárolt eljárási paraméterek kimenete

A válaszérték egyetlen változó visszaadására használható, amit az előző példában láttunk. Az Output paraméter használata lehetővé teszi, hogy egy eljárás egy vagy több változó értéket küldjön a hívónak. A kimeneti paramétert éppen ez jelzi kulcsszó"Kimenet" eljárás létrehozásakor. Ha egy paramétert kimeneti paraméterként adunk meg, akkor az eljárásobjektumnak értéket kell hozzárendelnie. Az SQL tárolt eljárások, amelyekre az alábbiakban példákat láthatunk, ebben az esetben összefoglaló információkkal térnek vissza.

Példánkban két kimeneti név lesz: @TotalAuthors és @TotalNoContract. A paraméterek listájában fel vannak tüntetve. Ezek a változók értékeket rendelnek hozzá az eljárás törzsén belül. Amikor kimeneti paramétereket használunk, a hívó az eljárás törzsében láthatja a beállított értéket.

Ezenkívül az előző forgatókönyvben két változót deklarálnak az MS SQL Server által a kimeneti paraméterben tárolt eljárások által tárolt értékek megtekintéséhez. Ezután az eljárás a „CA” paraméter normál értékének megadásával történik. A következő paraméterek kimeneti paraméterek, ezért a deklarált változók a megadott sorrendben kerülnek átadásra. Vegye figyelembe, hogy változók átadásakor a kimeneti kulcsszó is itt van beállítva. Az eljárás sikeres befejezése után a kimeneti paraméterek által visszaadott értékek megjelennek az üzenetmezőben.

4.3 Az SQL tárolt eljárások egyikének kiválasztása

Ezt a technikát arra használják, hogy egy értékkészletet adattáblaként (RecordSet) küldjenek vissza a hívó tárolt eljáráshoz. Abban SQL példa Egy @AuthID paraméterekkel rendelkező tárolt eljárás lekérdezi a Szerzők táblát az adott @AuthId paraméterrel visszaadott rekordok szűrésével. A Select utasítás dönti el, hogy mit küldjön vissza a tárolt eljárás hívójának. A tárolt eljárás végrehajtásakor az AuthId visszaadásra kerül. Ez az eljárás itt mindig csak egy rekordot ad vissza, vagy egyet sem. Egy tárolt eljárás azonban nem korlátozza egynél több rekord visszaküldését. Nem ritka, hogy olyan példákat látunk, amikor az adatok kiválasztott paraméterek felhasználásával kerülnek visszaadásra, kiszámított változókkal, több összeg megadásával.

Végül

A tárolt eljárás meglehetősen komoly szoftver modul, visszaküldése vagy továbbítása, valamint a szükséges változók beállítása a kliens alkalmazásnak köszönhetően. Mivel a tárolt eljárás önmagában fut a szerveren, elkerülhető a hatalmas mennyiségű adatcsere a szerver és a kliens alkalmazás között (bizonyos számításoknál). Ez lehetővé teszi az SQL szerverek terhelésének csökkentését, ami természetesen a tulajdonosaik számára előnyös. Az egyik altípus a T SQL tárolt eljárások, de ezek tanulmányozása szükséges azok számára, akik lenyűgöző adatbázisokat készítenek. Nagy, sőt hatalmas számú árnyalat is hasznos lehet a tárolt eljárások tanulmányozásakor, de erre inkább azoknak van szükségük, akik a programozásba terveznek bekapcsolódni, akár szakmailag is.

Tárolt eljárás egy speciális típusú Transact-SQL utasításcsomag, amelyet az SQL nyelv és az eljárási kiterjesztések használatával hoztak létre. A fő különbség a csomag és a tárolt eljárás között az, hogy az utóbbi adatbázis-objektumként kerül tárolásra. Más szavakkal, a tárolt eljárásokat a szerver oldalon tárolják, hogy javítsák a teljesítményt és az ismételhető feladatok konzisztenciáját.

Az adatbázismotor támogatja a tárolt eljárásokat és a rendszereljárásokat. A tárolt eljárások ugyanúgy jönnek létre, mint az összes többi adatbázis-objektum, azaz. DDL nyelv használatával. Rendszereljárások az adatbázismotor biztosítja, és a rendszerkatalógusban lévő információk eléréséhez és módosításához használhatók.

Tárolt eljárás létrehozásakor megadhat egy opcionális paraméterlistát. Így az eljárás minden meghívásakor elfogadja a megfelelő argumentumokat. A tárolt eljárások visszaadhatnak egy felhasználó által definiált információkat tartalmazó értéket, vagy hiba esetén egy megfelelő hibaüzenetet.

A tárolt eljárást előre lefordítják, mielőtt objektumként tárolnák az adatbázisban. Az eljárás előre lefordított formája az adatbázisban tárolódik, és minden meghívásakor használatos. A tárolt eljárások ezen tulajdonsága azt a fontos előnyt jelenti, hogy (majdnem minden esetben) kiküszöböli az ismételt eljárás-összeállításokat, és ennek megfelelő teljesítményjavulást ér el. A tárolt eljárások ezen tulajdonsága pozitív hatással van az adatbázisrendszer és az alkalmazások közötti adatcsere mennyiségére is. Különösen egy több ezer bájt méretű tárolt eljárás hívása lehet kevesebb, mint 50 bájt. Ha több felhasználó hajt végre ismétlődő feladatokat tárolt eljárásokkal, ezeknek a megtakarításoknak a kumulatív hatása meglehetősen jelentős lehet.

A tárolt eljárások a következő célokra is felhasználhatók:

    műveletnapló létrehozásához adatbázistáblákkal.

A tárolt eljárások használata olyan szintű biztonsági ellenőrzést biztosít, amely jóval túlmutat a felhasználók számára eltérő hozzáférési jogosultságokat biztosító GRANT és REVOKE utasítások által nyújtott biztonságon. Ez azért lehetséges, mert a tárolt eljárás végrehajtására vonatkozó jogosultság független a tárolt eljárásban található objektumok módosítására vonatkozó jogosultságtól, a következő részben leírtak szerint.

A táblaírási és/vagy olvasási műveletek naplóit létrehozó tárolt eljárások biztosítják további lehetőség az adatbázis biztonságának biztosítása. Az ilyen eljárások használatával az adatbázis-adminisztrátor figyelemmel kísérheti a felhasználók vagy alkalmazási programok által az adatbázison végrehajtott módosításokat.

Tárolt eljárások létrehozása és végrehajtása

A tárolt eljárások egy utasítás segítségével jönnek létre ELJÁRÁS LÉTREHOZÁSA, amelynek szintaxisa a következő:

CREATE PROC proc_name [((@param1) type1 [ VARYING] [= default1] )] (, ...) AS köteg | EXTERNAL NAME metódus_neve Szintaxis konvenciók

A séma_neve paraméter adja meg a séma nevét, amelyet a létrehozott tárolt eljárás tulajdonosa rendelt. A proc_name paraméter a tárolt eljárás nevét adja meg. A @param1 paraméter egy eljárásparaméter (formális argumentum), amelynek adattípusát a type1 paraméter határozza meg. Az eljárás paraméterei lokálisak az eljáráson belül, ahogy a helyi változók is helyiek a csomagon belül. Az eljárási paraméterek olyan értékek, amelyeket a hívó átad az eljárásnak, hogy felhasználja. A default1 paraméter a megfelelő eljárási paraméter alapértelmezett értékét adja meg. (Az alapértelmezett érték NULL is lehet.)

OUTPUT opció azt jelzi, hogy egy eljárásparaméter visszatérési paraméter, és egy tárolt eljárás értékének visszaadására használható a hívó eljáráshoz vagy rendszerhez.

Mint korábban említettük, egy eljárás előre lefordított formája az adatbázisban tárolódik, és minden meghívásakor használatos. Ha valamilyen oknál fogva a tárolt eljárást minden egyes meghívásakor le kell fordítani, az eljárás deklarálásakor használja a RECOMPILE opcióval. A WITH RECOMPILE opció használata megtagadja a tárolt eljárások egyik legfontosabb előnyét: az egyetlen fordításnak köszönhető teljesítménynövekedést. Ezért a WITH RECOMPILE beállítást csak akkor szabad használni, ha a tárolt eljárás által használt adatbázis-objektumokat gyakran módosítják.

EXECUTE AS záradék meghatározza azt a biztonsági környezetet, amelyben a tárolt eljárásnak a meghívása után végre kell hajtania. Ennek a kontextusnak a beállításával az adatbázismotor szabályozhatja a felhasználói fiókok kiválasztását a tárolt eljárás által hivatkozott objektumok hozzáférési engedélyeinek ellenőrzéséhez.

Alapértelmezés szerint csak a sysadmin rögzített kiszolgálói szerepkör és a db_owner vagy db_ddladmin rögzített adatbázis-szerepkör tagjai használhatják a CREATE PROCEDURE utasítást. De ezeknek a szerepköröknek a tagjai hozzárendelhetik ezt a jogot más felhasználókhoz az utasítás használatával A TÁMOGATÁS LÉTREHOZÁSI ELJÁRÁSA.

Az alábbi példa bemutatja, hogyan hozhat létre egy egyszerű tárolt eljárást a Project táblával való együttműködéshez:

HASZNÁLATA SampleDb; ELJÁRÁS LÉTREHOZÁSA Költségkeret növelése (@százalék INT=5) FRISSÍTÉSKÉNT Projekt SET Költségvetés = Költségvetés + Költségvetés * @százalék/100;

Ahogy korábban említettük, két csomag szétválasztásához használja a GO utasításokat. A CREATE PROCEDURE utasítás nem kombinálható más Transact-SQL utasításokkal ugyanabban a kötegben. A IncreaseBudget tárolt eljárás megnöveli az összes projekt költségvetését egy bizonyos százalékkal, amelyet a @percent paraméter határoz meg. Az eljárás egy alapértelmezett százalékos értéket (5) is meghatároz, amelyet akkor használ, ha ez az argumentum nincs jelen az eljárás futása során.

A tárolt eljárások hozzáférhetnek a nem létező táblákhoz. Ez a tulajdonság lehetővé teszi az eljáráskód hibakeresését anélkül, hogy először létrehozná a megfelelő táblákat, vagy csatlakozna a célkiszolgálóhoz.

Az elsődleges tárolt eljárásoktól eltérően, amelyek mindig az aktuális adatbázisban vannak tárolva, lehetséges olyan ideiglenes tárolt eljárások létrehozása, amelyek mindig az ideiglenes rendszeradatbázisban tárolódnak tempdb. Az ideiglenesen tárolt eljárások létrehozásának egyik oka lehet, hogy az adatbázishoz való kapcsolódás során ne kelljen ismételten végrehajtani egy bizonyos utasításcsoportot. Létrehozhat helyi vagy globális ideiglenes eljárásokat. Ehhez a helyi eljárás neve egyetlen # karakterrel (#proc_name), a globális eljárás neve pedig kettős karakterrel (##proc_name) van megadva.

A helyi ideiglenesen tárolt eljárást csak az azt létrehozó felhasználó hajthatja végre, és csak akkor, ha csatlakozik ahhoz az adatbázishoz, amelyben létrehozták. Egy globális ideiglenes eljárást minden felhasználó végrehajthat, de csak addig, amíg az utolsó kapcsolat, amelyen végrehajtják (általában az eljárás létrehozójának kapcsolata) meg nem szűnik.

Egy tárolt eljárás életciklusa két szakaszból áll: létrehozásából és végrehajtásából. Minden eljárást egyszer hoznak létre és többször hajtanak végre. A tárolt eljárás a segítségével kerül végrehajtásra VÉGREHAJTJA utasításokat olyan felhasználó, aki egy eljárás tulajdonosa, vagy VÉGREHAJTÁSI jogosultsággal rendelkezik az eljárás eléréséhez. Az EXECUTE utasítás szintaxisa a következő:

[] [@return_status =] (proc_name | @proc_name_var) ([[@parameter1 =] érték | [@parameter1=] @változó ] | ALAPÉRTÉKELÉS).. Szintaxis konvenciók

A return_status paraméter kivételével az EXECUTE utasítás minden paramétere ugyanazzal a logikai jelentéssel rendelkezik, mint a CREATE PROCEDURE utasítás ugyanazon paraméterei. A return_status paraméter egy egész szám változót ad meg, amely az eljárás visszatérési állapotát tárolja. Egy érték hozzárendelhető egy paraméterhez konstans (érték) vagy helyi változó (@változó) használatával. A megnevezett paraméterek értékeinek sorrendje nem fontos, de a névtelen paraméterek értékeit a CREATE PROCEDURE utasításban meghatározott sorrendben kell megadni.

DEFAULT záradék az eljárásdefinícióban megadott eljárásparaméter alapértelmezett értékét adja meg. Ha egy eljárás értéket vár egy olyan paraméterhez, amelyhez nincs alapértelmezett érték megadva, és a paraméter hiányzik, vagy a DEFAULT kulcsszó van megadva, hiba történik.

Ha az EXECUTE utasítás egy köteg első utasítása, az EXECUTE kulcsszó elhagyható. Biztonságosabb azonban, ha minden csomagban szerepelteti ezt a szót. Az EXECUTE utasítás használatát az alábbi példa mutatja be:

HASZNÁLATA SampleDb; VÉGREHAJTÁSA Költségkeret növelése 10;

Az EXECUTE utasítás ebben a példában végrehajtja az IncreaseBudget tárolt eljárást, amely az összes projekt költségvetését 10%-kal növeli.

Az alábbi példa bemutatja, hogyan hozhat létre tárolt eljárást az Employee és Works_on táblákban lévő adatok feldolgozásához:

A ModifyEmpId példaeljárás bemutatja a tárolt eljárások használatát a hivatkozási integritás fenntartásának folyamata részeként (ebben az esetben az Employee és Works_on táblák között). Hasonló tárolt eljárás használható egy trigger-definíción belül, amely valójában hivatkozási integritást biztosít.

A következő példa egy OUTPUT záradék használatát mutatja be egy tárolt eljárásban:

Ez a tárolt eljárás a következő utasítások segítségével hajtható végre:

DECLARE @quantityDeleteEmployee INT; VÉGREHAJTÁS DeleteEmployee @empId=18316, @OUTPUT; PRINT N"Törölt alkalmazottak: " + convert(nvarchar(30), @quantityDeleteEmployee);

Ez az eljárás megszámolja azoknak a projekteknek a számát, amelyeken a @empId személyi számmal rendelkező alkalmazott dolgozik, és a kapott értéket hozzárendeli a ©counter paraméterhez. Miután egy adott létszámhoz tartozó összes sort törölte az Employee és Works_on táblákból, a számított érték a @quantityDeleteEmployee változóhoz lesz rendelve.

A paraméterérték csak akkor kerül vissza a hívó eljárásba, ha az OUTPUT opció meg van adva. A fenti példában a DeleteEmployee eljárás átadja a @counter paramétert a hívó eljárásnak, így a tárolt eljárás egy értéket ad vissza a rendszernek. Ezért a @counter paramétert mind az OUTPUT opcióban meg kell adni egy eljárás deklarálásakor, mind az EXECUTE utasításban, amikor meghívjuk.

WITH RESULTS SETS az EXECUTE utasítás záradéka

Az SQL Server 2012 rendszerben az EXECUTE utasításhoz adja meg WITH RESULTS SETS záradék, amelyen keresztül bizonyos feltételek teljesülése esetén módosítható egy tárolt eljárás eredményhalmazának formája.

A következő két példa segít ennek a mondatnak a magyarázatában. Az első példa egy bevezető példa, amely megmutatja, hogyan nézhet ki az eredmény, ha a WITH RESULTS SETS záradékot kihagyjuk:

Az EmployeesInDept eljárás egy egyszerű eljárás, amely megjeleníti az adott részlegen dolgozó összes alkalmazott személyi számát és vezetéknevét. Az osztályszám egy eljárási paraméter, és hívásakor meg kell adni. Ennek az eljárásnak a végrehajtása egy két oszlopos táblát hoz létre, amelyek fejlécei megegyeznek az adatbázistábla megfelelő oszlopainak nevével, azaz. Azonosító és vezetéknév. Az eredményoszlopok fejléceinek (valamint adattípusának) módosításához az SQL Server 2012 az új WITH RESULTS SETS záradékot használja. Ennek a mondatnak az alkalmazását az alábbi példa mutatja be:

HASZNÁLATA SampleDb; EXEC EmployeesInDept "d1" EREDMÉNYHASZNÁLATOKKAL (( INT NOT NULL, [Vezetéknév] CHAR(20) NOT NULL));

Az így meghívott tárolt eljárás végrehajtásának eredménye a következő lesz:

Amint látható, az EXECUTE utasítás WITH RESULT SETS záradékának használatával tárolt eljárás futtatása lehetővé teszi az eljárás által előállított eredményhalmaz oszlopainak nevének és adattípusának megváltoztatását. Így ez az új funkció nagyobb rugalmasságot biztosít a tárolt eljárások végrehajtásában és eredményeik új táblában való elhelyezésében.

A tárolt eljárások szerkezetének megváltoztatása

Az adatbázismotor is támogatja az utasítást ELJÁRÁS MÓDOSÍTÁSA a tárolt eljárások szerkezetének módosítására. Az ALTER PROCEDURE utasítás általában a Transact-SQL utasítások módosítására szolgál egy eljáráson belül. Az ALTER PROCEDURE utasítás minden paramétere ugyanazt jelenti, mint a CREATE PROCEDURE utasítás ugyanazon paraméterei. Az utasítás használatának fő célja a meglévő tárolt eljárásjogok felülbírálásának elkerülése.

Az adatbázismotor támogatja CURSOR adattípus. Ez az adattípus a kurzorok deklarálására szolgál a tárolt eljárásokban. Kurzor egy programozási konstrukció, amely egy lekérdezés eredményeinek tárolására szolgál (általában sorok halmaza), és lehetővé teszi a felhasználók számára, hogy soronként jelenítsék meg az eredményeket.

A tárolt eljárások egy vagy csoportjának törléséhez használja a DROP ELJÁRÁS utasítás. Csak a db_owner és a sysadmin rögzített szerepkörök tulajdonosa vagy tagjai törölhetnek egy tárolt eljárást.

Tárolt eljárások és a közös nyelvi futtatókörnyezet

Az SQL Server támogatja a Common Language Runtime (CLR) szabványt, amely lehetővé teszi különböző adatbázis-objektumok (tárolt eljárások, felhasználó által definiált függvények, triggerek, felhasználó által definiált aggregációk és egyéni adattípusok) fejlesztését C# és Visual Basic használatával. A CLR lehetővé teszi ezen objektumok végrehajtását is a közös futásidejű rendszer használatával.

A közös nyelv futtatókörnyezete az opció használatával engedélyezhető és letiltható clr_enabled rendszer eljárása sp_configure, amely utasítással indul végrehajtásra ÚJRAKONFIGURÁLÁS. A következő példa bemutatja, hogyan használhatja az sp_configure rendszereljárást a CLR engedélyezéséhez:

HASZNÁLATA SampleDb; EXEC sp_configure "clr_enabled",1 RECONFIGURE

Egy eljárás CLR segítségével történő létrehozásához, összeállításához és mentéséhez a következő lépések sorozatát kell végrehajtania az alábbi sorrendben:

    Hozzon létre egy tárolt eljárást C# vagy Visual Basic nyelven, majd fordítsa le a megfelelő fordító segítségével.

    Az utasítások használata ÖSSZESZERELÉS LÉTREHOZÁSA, hozza létre a megfelelő végrehajtható fájlt.

    Hajtsa végre az eljárást az EXECUTE utasítás használatával.

Az alábbi ábrán a korábban vázolt lépések grafikus diagramja látható. Alább több Részletes leírás ez a folyamat.

Először hozza létre a szükséges programot egy fejlesztői környezetben, például a Visual Studioban. Fordítsa le a kész programot objektumkódra C# vagy Visual Basic fordító segítségével. Ez a kód egy dinamikus hivatkozási könyvtár (.dll) fájlban van tárolva, amely a CREATE ASSEMBLY utasítás forrásaként szolgál, amely létrehozza a közbenső végrehajtható kódot. Ezután adjon ki egy CREATE PROCEDURE utasítást a végrehajtó kód adatbázis-objektumként való mentéséhez. Végül futtassa az eljárást az ismerős EXECUTE utasítással.

Az alábbi példa egy C#-ban tárolt eljárás forráskódját mutatja be:

A System.Data.SqlClient használata; Microsoft.SqlServer.Server használatával; nyilvános részleges osztály StoredProcedures ( public static int CountEmployees() ( int sorok; SqlConnection kapcsolat = new SqlConnection("Context Connection=true"); connection.Open(); SqlCommand cmd = kapcsolat.CreateCommand(); cmd.CommandText = "select count(*) mint "Alkalmazottak száma" " + "Alkalmazotttól"; rows = (int)cmd.ExecuteScalar(); connection.Close(); return rows; ) )

Ez az eljárás egy lekérdezést valósít meg az Employee tábla sorainak megszámlálására. A program elején található direktívák használatával adja meg a program végrehajtásához szükséges névtereket. Ezen direktívák használata lehetővé teszi osztálynevek megadását a forráskódban anélkül, hogy kifejezetten megadná a megfelelő névtereket. Ezután meg kell határozni a StoredProcedures osztályt, amelyhez SqlProcedure attribútum, amely tájékoztatja a fordítót, hogy ez az osztály egy tárolt eljárás. A CountEmployees() metódus az osztálykódon belül van definiálva. Az adatbázis-rendszerrel való kapcsolat az osztály egy példányán keresztül jön létre SqlConnection. A kapcsolat megnyitásához a példány Open() metódusát kell használni. A CreateCommand() metódus lehetővé teszi egy osztály példányának elérését SqlCommnd, amelyhez a szükséges SQL-parancsot továbbítják.

A következő kódrészletben:

Cmd.CommandText = "Select count(*) mint "Alkalmazottak száma" " + "az alkalmazotttól";

egy SELECT utasítást használ az Employee tábla sorainak megszámlálására és az eredmény megjelenítésére. A parancsszöveg úgy adható meg, hogy a cmd változó CommandText tulajdonságát a CreateCommand() metódus által visszaadott példányra állítja. Következő az úgynevezett ExecuteScalar() metódus SqlCommand példány. Ez a módszer egy skaláris értéket ad vissza, amelyet egész adattípussá alakít, és hozzárendel a sorváltozóhoz.

Most már lefordíthatja ezt a kódot a Visual Studio segítségével. Ezt az osztályt hozzáadtam a CLRStoredProcedures nevű projekthez, így a Visual Studio egy azonos nevű összeállítást fog fordítani *.dll kiterjesztéssel. Az alábbi példa a tárolt eljárás létrehozásának következő lépését mutatja be: a végrehajtható kód létrehozását. A példában szereplő kód futtatása előtt ismernie kell a lefordított dll fájl helyét (általában a projekt Debug mappájában található).

HASZNÁLATA SampleDb; LÉPJEN EL AZ ASSEMBLY CLRStoredProcedures LÉTREHOZÁSÁRA A "D:\Projects\CLRStoredProcedures\bin\Debug\CLRStoredProcedures.dll" menüből AZ PERMISSION_SET = BIZTONSÁGOS.

A CREATE ASSEMBLY utasítás kezelt kódot vesz bemenetként, és létrehoz egy megfelelő objektumot, amelyen CLR-ben tárolt eljárásokat, felhasználó által definiált függvényeket és triggereket hozhat létre. Ennek az utasításnak a szintaxisa a következő:

CREATE ASSEMBLY összeállításnév [ ENGEDÉLYEZÉS tulajdonosi_neve ] FROM (dll_fájl) Szintaxis konvenciók

Az assembly_name paraméter határozza meg az összeállítás nevét. Az opcionális AUTHORIZATION záradék a szerepkör nevét adja meg ennek az összeállításnak a tulajdonosaként. A FROM záradék megadja azt az elérési utat, ahol a betöltendő összeállítás található.

PERMISSION_SET záradékkal a CREATE ASSEMBLY utasítás nagyon fontos kitétele, és mindig meg kell adni. Meghatározza az összeállítási kódhoz adott engedélyek készletét. A SAFE engedélykészlet a legszigorúbb. Az ezekkel a jogokkal rendelkező összeállítási kódok nem férhetnek hozzá külső rendszererőforrásokhoz, például fájlokhoz. Az EXTERNAL_ACCESS jogosultságkészlet lehetővé teszi az összeállítás kódjának, hogy hozzáférjen bizonyos külső rendszererőforrásokhoz, míg az UNSAFE jogosultságkészlet korlátlan hozzáférést biztosít az erőforrásokhoz az adatbázis-rendszeren belül és kívül egyaránt.

Az összeállítási kód információinak mentéséhez a felhasználónak képesnek kell lennie egy CREATE ASSEMBLY utasítás kiadására. Az összeállítás tulajdonosa az utasítást végrehajtó felhasználó (vagy szerepkör). A CREATE SCHEMA utasítás AUTHORIZATION záradékának használatával egy másik felhasználót tehet az összeállítás tulajdonosává.

Az adatbázismotor támogatja az ALTER ASSEMBLY és a DROP ASSEMBLY utasításokat is. ALTER ASEMBLY nyilatkozat az összeállítás frissítéséhez használt legújabb verzió. Ez az utasítás a megfelelő összeállításhoz társított fájlokat is hozzáadja vagy eltávolítja. DROP ASEMBLY utasítás Eltávolítja a megadott összeállítást és az összes kapcsolódó fájlt az aktuális adatbázisból.

Az alábbi példa bemutatja, hogyan hozhat létre tárolt eljárást a korábban implementált felügyelt kód alapján:

HASZNÁLATA SampleDb; GO ELJÁRÁS LÉTREHOZÁSA CountEmployees MINT KÜLSŐ NÉV CLRStoredProcedures.StoredProcedures.CountEmployees

A példa CREATE PROCEDURE utasítása abban különbözik az előző példákban szereplő utasítástól, hogy tartalmazza EXTERNAL NAME paraméter. Ez a beállítás azt határozza meg, hogy a kódot a közös nyelvi futási környezet hozza létre. Ebben a mondatban a név három részből áll:

összeállítás_neve.osztály_neve.módszerneve

    összeállítás_neve - az összeállítás nevét jelzi;

    osztály_neve - az általános osztály nevét jelzi;

    módszer_neve - opcionális rész, az osztályon belül definiált metódus nevét adja meg.

A CountEmployees eljárás végrehajtása az alábbi példában látható:

HASZNÁLATA SampleDb; DECLARE @count INT EXECUTE @count = Munkavállalók száma PRINT @count -- 7. visszaküldés

A PRINT utasítás az Employee tábla sorainak aktuális számát adja vissza.

A Microsoft SQL Serverben saját algoritmusai megvalósításához és automatizálásához ( számításokat) tárolt eljárásokat használhat, ezért ma arról lesz szó, hogyan jönnek létre, módosíthatók és törölhetők.

De először egy kis elmélet, hogy megértse, mik azok a tárolt eljárások, és miért van rájuk szükség a T-SQL-ben.

Jegyzet! Kezdő programozóknak ajánlom a következő hasznos anyagokat a T-SQL-ről:

  • A T-SQL nyelv részletesebb tanulmányozásához javaslom a - The T-SQL Programmer's Path című könyv elolvasását is. Oktatóanyag a Transact-SQL nyelvről;
  • Professzionális online kurzusok T-SQL-ről

Mik azok a tárolt eljárások a T-SQL-ben?

Tárolt eljárások– ezek olyan adatbázis-objektumok, amelyek egy algoritmust tartalmaznak SQL utasításkészlet formájában. Más szóval azt mondhatjuk, hogy a tárolt eljárások egy adatbázison belüli programok. A tárolt eljárások arra szolgálnak, hogy újrafelhasználható kódot tároljanak a szerveren, például írt egy bizonyos algoritmust, szekvenciális számítást vagy többlépéses SQL utasítást, és annak érdekében, hogy ne hajtsa végre az ebben az algoritmusban található összes utasítást minden alkalommal, formázhatja azt. mint tárolt eljárás. Ugyanakkor, amikor létrehoz egy SQL-eljárást, a szerver lefordítja a kódot, majd minden alkalommal, amikor ezt az SQL-eljárást futtatja, a szerver nem fordítja újra.

Egy tárolt eljárás SQL Serverben való futtatásához az EXECUTE parancsot a neve elé kell írni, és ezt a parancsot EXEC-re is rövidíthetjük. Egy SELECT utasításban tárolt eljárás meghívása például függvényként már nem fog működni, pl. eljárásokat külön indítják el.

A tárolt eljárásokban a függvényekkel ellentétben már lehetséges olyan adatmódosítási műveletek végrehajtása, mint: UNSERT, UPDATE, DELETE. Szinte bármilyen típusú SQL utasítást is használhat az eljárásokban, például CREATE TABLE táblák létrehozásához vagy EXECUTE, azaz. egyéb eljárások kihívása. Kivételt képeznek az utasítások többféle típusa, például: függvények, nézetek, triggerek létrehozása vagy módosítása, sémák létrehozása és számos más hasonló utasítás, például az adatbázis-kapcsolati környezetet (USE) sem lehet átkapcsolni egy tárolt eljárásban.

Egy tárolt eljárásnak lehetnek bemeneti és kimeneti paraméterei, visszaadhat táblázatos adatokat, vagy nem ad vissza semmit, csak a benne foglalt utasításokat hajtja végre.

Nagyon hasznosak a tárolt eljárások, amelyek segítségével számos műveletet automatizálhatunk vagy egyszerűsíthetünk, például folyamatosan kell különféle összetett analitikai jelentéseket készíteni pivot táblák segítségével, pl. PIVOT operátor. Hogy könnyebb legyen a lekérdezések megfogalmazása ezzel az operátorral ( mint tudod, a PIVOT szintaxisa meglehetősen összetett), Írhat egy eljárást, amely dinamikusan generál összefoglaló jelentéseket az Ön számára, például a „Dinamikus PIVOT T-SQL-ben” anyag példát ad ennek a funkciónak tárolt eljárás formájában való megvalósítására.

Példák a Microsoft SQL Server tárolt eljárásainak kezelésére

Példák forrásadatai

Az alábbi példák mindegyike a Microsoft SQL Server 2016 Express rendszerben fut. Ahhoz, hogy bemutathassuk, hogyan működnek a tárolt eljárások valós adatokkal, szükségünk van ezekre az adatokra, hozzuk létre. Például hozzunk létre egy teszttáblázatot, és adjunk hozzá néhány rekordot, tegyük fel, hogy ez lesz egy táblázat, amely a termékek listáját tartalmazza az árakkal.

Táblázat létrehozására vonatkozó utasítások CREATE TABLE TesztTable( INT IDENTITY(1,1) NOT NULL, INT NOT NULL, VARCHAR(100) NOT NULL, MONEY NULL) GO -- Utasítás az adatok hozzáadásához INSERT INTO TesztTable(CategoryID, Product Name, Price) ÉRTÉKEK (1 , "Egér", 100), (1, "Billentyűzet", 200), (2, "Telefon", 400) GO --Válassza ki a lekérdezést SELECT * FROM TestTable


Az adatok megvannak, most térjünk át a tárolt eljárások létrehozására.

Tárolt eljárás létrehozása T-SQL-ben - a CREATE PROCEDURE utasítás

A tárolt eljárások egy utasítás segítségével jönnek létre ELJÁRÁS LÉTREHOZÁSA, ezen utasítás után meg kell írni az eljárásod nevét, majd ha szükséges, zárójelben megadni a bemeneti és kimeneti paramétereket. Ezek után beírod az AS kulcsszót és megnyitod az utasításblokkot a BEGIN kulcsszóval, ezt a blokkot az END szóval zárod. Ebbe a blokkba beírod az összes utasítást, ami megvalósítja az algoritmusodat vagy valamilyen szekvenciális számítást, vagyis T-SQL-ben programozsz.

Például írjunk egy tárolt eljárást, amely hozzáad új bejegyzés, azaz új termék tesztasztalunkhoz. Ehhez három bemeneti paramétert adunk meg: @CategoryId – termékkategória azonosító, @ProductName – terméknév és @Price – termék ára, ezt a paramétert Lesz egy opcionális, pl. nem szükséges átadni az eljárásnak ( például még nem tudjuk az árat), erre a célra egy alapértelmezett értéket adunk meg a definíciójában. Ezek a paraméterek az eljárás törzsében vannak, azaz. a BEGIN...END blokkban ugyanúgy használhatók, mint a normál változók ( Mint tudják, a változókat @ jellel jelöljük). Ha kimeneti paramétereket kell megadni, akkor a paraméter neve után tüntesse fel az OUTPUT ( vagy röviden OUT).

A BEGIN...END blokkban írunk egy utasítást az adatok hozzáadására, valamint egy SELECT utasítást az eljárás végén, hogy a tárolt eljárás táblázatos adatokat adjon vissza a megadott kategóriába tartozó termékekről, figyelembe véve vegye figyelembe az új, most hozzáadott terméket. Ebben a tárolt eljárásban is hozzáadtam a bejövő paraméter feldolgozását, nevezetesen a törlést extra terek szövegsor elején és végén, hogy kiküszöbölje azokat a helyzeteket, amikor véletlenül több szóköz került beírásra.

Itt van az eljárás kódja ( Én is hozzászóltam).

Eljárás létrehozása ELJÁRÁS LÉTREHOZÁSA Teszteljárás (--beviteli paraméterek @CategoryId INT, @ProductName VARCHAR(100), @PÉNZár = 0) AS BEGIN és a szövegsor végén SET @ProductName = LTRIM(RTRIM(@ProductName)); --Új rekord hozzáadása INSERT INTO TestTable(CategoryId, Product Name, Price) VALUES (@CategoryId, @ProductName, @Price) --Az adatok visszaadása SELECT * FROM TestTable WHERE CategoryId = @CategoryId END GO


Tárolt eljárás futtatása T-SQL-ben - EXECUTE parancs

Futtathat egy tárolt eljárást, ahogy már megjegyeztem, az EXECUTE vagy EXEC paranccsal. A bejövő paraméterek egyszerűen listázva és az eljárás neve után a megfelelő értékek megadásával kerülnek átadásra az eljárásoknak ( a kimeneti paramétereknél az OUTPUT parancsot is meg kell adni). Előfordulhat azonban, hogy a paraméterek nevei nem adhatók meg, de ebben az esetben az értékek megadásának sorrendjét kell követni, pl. adja meg az értékeket a bemeneti paraméterek meghatározásának sorrendjében ( ez vonatkozik a kimeneti paraméterekre is).

Az alapértelmezett értékkel rendelkező paramétereket nem kell megadni, ezek az úgynevezett opcionális paraméterek.

Íme néhány különböző, de egyenértékű módszer a tárolt eljárások futtatására, különösen a teszteljárásunkra.

1. Hívja meg az eljárást az ár megadása nélkül EXECUTE TestProcedure @CategoryId = 1, @ProductName = "1. teszttermék" --2. Hívja meg az árat jelző eljárást EXEC TestProcedure @CategoryId = 1, @ProductName = "Teszttermék 2", @Price = 300 --3. Hívja meg az eljárást a paraméterek nevének megadása nélkül EXEC TestProcedure 1, "Test product 3", 400


Tárolt eljárás módosítása T-SQL - ALTER PROCEDURE utasításra

Az utasítások segítségével módosíthatja az eljárás algoritmusát ELJÁRÁS MÓDOSÍTÁSA. Más szóval, egy már létező eljárás megváltoztatásához csak az ELJÁRÁS LÉTREHOZÁSA helyett az ALTER PROCEDURE parancsot kell írnia, és minden mást szükség szerint módosítania kell.

Tegyük fel, hogy módosítani kell a teszteljárásunkat, mondjuk a @Price paramétert, pl. ár, akkor kötelezővé tesszük, ehhez eltávolítjuk az alapértelmezett értéket, és azt is képzeljük el, hogy már nem kell beszereznünk a kapott adatkészletet, ehhez egyszerűen eltávolítjuk a SELECT utasítást a tárolt eljárásból.

Módosítjuk az eljárást ALTER PROCEDURE TestProcedure (--Bejövő paraméterek @CategoryId INT, @ProductName VARCHAR(100), @PÉNZár) AS BEGIN --Utasítások, amelyek megvalósítják az algoritmust --A bejövő paraméterek feldolgozása --Fölös szóközök eltávolítása az elején és a szövegsorok vége SET @ProductName = LTRIM(RTRIM(@ProductName)); -- Adjon hozzá egy új rekordot INSERT INTO TestTable(CategoryId, Product Name, Price) VALUES (@Kategóriaazonosító, @Terméknév, @Ár) END GO

Tárolt eljárás törlése a T-SQL - DROP PROCEDURE utasításban

Ha szükséges, törölheti a tárolt eljárást, ezt az utasítások alapján teheti meg LEADÁSI ELJÁRÁS.

Például töröljük az általunk létrehozott teszteljárást.

DROP ELJÁRÁS Teszteljárás

A tárolt eljárások törlésekor érdemes megjegyezni, hogy ha az eljárásra más eljárások vagy SQL utasítások hivatkoznak, akkor azok a törlés után hibával meghiúsulnak, mivel az általuk hivatkozott eljárás már nem létezik.

Ennyivel rendelkezem, remélem, az anyag érdekes és hasznos volt számodra, viszlát!

Utolsó frissítés: 2017.08.14

Az adatműveletek gyakran olyan utasítások halmazát jelentik, amelyeket egy bizonyos sorrendben kell végrehajtani. Például egy termékvásárlás hozzáadásakor adatokat kell bevinni a rendelések táblájába. Mielőtt azonban ezt megtenné, ellenőriznie kell, hogy a vásárolt termék raktáron van-e. Előfordulhat, hogy több további feltételt is ellenőriznie kell. Valójában egy termék megvásárlásának folyamata több műveletet is magában foglal, amelyeket egy bizonyos sorrendben kell végrehajtani. És ebben az esetben optimálisabb lenne ezeket a műveleteket egyetlen objektumba foglalni - tárolt eljárás(tárolt eljárás).

Azaz lényegében a tárolt eljárások egyetlen egységként végrehajtott utasítások halmaza. Így a tárolt eljárások lehetővé teszik az összetett műveletek egyszerűsítését és egyetlen objektumban való elhelyezését. A termék vásárlásának folyamata megváltozik, ennek megfelelően elegendő az eljárási kód megváltoztatása. Vagyis az eljárás a kódkezelést is leegyszerűsíti.

A tárolt eljárások azt is lehetővé teszik, hogy korlátozza a táblázatokban lévő adatokhoz való hozzáférést, és ezáltal csökkentse az adatokkal kapcsolatos szándékos vagy nem szándékos nem kívánt műveletek valószínűségét.

És egy másik fontos szempont a teljesítmény. A tárolt eljárások általában gyorsabban futnak, mint a hagyományos SQL utasítások. Ennek az az oka, hogy az eljáráskódot az első indításakor egyszer lefordítják, majd lefordított formában elmentik.

Tárolt eljárás létrehozásához használja a CREATE PROCEDURE vagy a CREATE PROC parancsot.

Tehát a tárolt eljárás három Főbb jellemzők: kód egyszerűsítése, biztonság és teljesítmény.

Tegyük fel például, hogy van egy táblázat az adatbázisban, amely a termékekre vonatkozó adatokat tárolja:

TÁBLÁZAT LÉTREHOZÁSA Termékek (ID INT IDENTITY PRIMARY KEY, Product Name NVARCHAR(30) NOT NULL, Gyártó NVARCHAR(20) NOT NULL, ProductCount INT ALAPÉRTELMEZETT 0, Price MONEY NOT NULL);

Hozzon létre egy tárolt eljárást az adatok lekéréséhez ebből a táblázatból:

USE productsdb; ELJÁRÁS LÉTREHOZÁSA ProductSummary AS SELECT Product Name AS Termék, Gyártó, Ár a termékektől

Mivel a CREATE PROCEDURE parancsot külön csomagban kell meghívni, az aktuális adatbázist beállító USE parancsot egy GO parancs követi az új csomag meghatározásához.

Az eljárás nevét az AS kulcsszónak kell követnie.

Az eljárás törzsének a szkript többi részétől való elkülönítéséhez az eljárás kódját gyakran egy BEGIN...END blokkba helyezik:

USE productsdb; FOGYÁS ELJÁRÁS LÉTREHOZÁSA ProductSummary AS BEGIN SELECT Product Name AS Termék, Gyártó, Ár Termékek VÉGE;

Az eljárás hozzáadása után az SQL Server Management Studio adatbázis-csomópontjában láthatjuk az alcsomópontban Programozhatóság -> Tárolt eljárások:

Az eljárást pedig vizuális felületen keresztül is irányíthatjuk majd.

Az eljárás végrehajtása

Tárolt eljárás végrehajtásához hívja az EXEC vagy EXECUTE parancsot:

EXEC ProductSummary

Eljárás eltávolítása

Eljárás eltávolításához használja a DROP PROCEDURE parancsot:

HAJTÁS ELJÁRÁS ProductSummary

A munka célja– megtanulják az adatbázis-kiszolgálón tárolt eljárások létrehozását és használatát.

1. Dolgozza át az összes példát, és elemezze végrehajtásuk eredményeit az SQL Server Management Studio segédprogramban. Létrehozott eljárások jelenlétének ellenőrzése az aktuális adatbázisban.

2. Minden példa és feladat elvégzése a laboratóriumi munka során.

3. Egyéni feladatok elvégzése a lehetőségek szerint.

Magyarázatok a munka elvégzéséhez

A tárolt eljárásprogramozás elsajátításához egy példaadatbázist használunk, az úgynevezett DB_Books 1. számú laboratóriumi munkában jött létre. Példák és feladatok elvégzésekor ügyeljen az adatbázis, táblák és egyéb projektobjektumok nevének egyezésére.

Tárolt eljárások egy vagy több parancsból álló parancskészlet SQL utasítások vagy függvényeket, és összeállított formában adatbázisban tárolják.

A tárolt eljárások típusai

A rendszerben tárolt eljárások különféle adminisztratív műveletek végrehajtására szolgálnak. Szinte minden szerveradminisztrációs tevékenység az ő segítségükkel történik. Azt mondhatjuk, hogy a rendszerben tárolt eljárások olyan interfész, amely rendszertáblákkal való munkát biztosít. A rendszerben tárolt eljárások sp_ előtaggal rendelkeznek, és a rendszerben tárolódnak rendszer alapja adatokat, és bármely más adatbázissal összefüggésben meghívható.

Az egyéni tárolt eljárások bizonyos műveleteket hajtanak végre. A tárolt eljárások teljes értékű adatbázis-objektumok. Ennek eredményeként minden tárolt eljárás egy adott adatbázisban található, ahol végrehajtódik.

Az ideiglenesen tárolt eljárások csak rövid ideig léteznek, ezután a szerver automatikusan megsemmisíti azokat. Helyi és globális csoportokra oszthatók. A helyi ideiglenesen tárolt eljárások csak abból a kapcsolatból hívhatók meg, amelyben létrejöttek. Egy ilyen eljárás létrehozásakor olyan nevet kell adni neki, amely egyetlen # karakterrel kezdődik. Mint minden ideiglenes objektum, az ilyen típusú tárolt eljárások is automatikusan törlődnek, amikor a felhasználó megszakítja a kapcsolatot, vagy a kiszolgálót újraindítják vagy leállítják. A globális, ideiglenesen tárolt eljárások bármely olyan kiszolgálóról érkező kapcsolathoz elérhetők, amelyen ugyanaz az eljárás működik. Ennek meghatározásához adjon neki egy nevet, amely ## karakterekkel kezdődik. Ezek az eljárások a kiszolgáló újraindításakor vagy leállításakor törlődnek, vagy ha a létrejöttük környezetében lévő kapcsolat bezárul.

Tárolt eljárások létrehozása, módosítása

A tárolt eljárás létrehozása a következő problémák megoldását jelenti: hozzáférési jogok tervezése. Tárolt eljárás létrehozásakor ügyeljen arra, hogy az ugyanazokkal a hozzáférési jogokkal rendelkezik az adatbázis-objektumokhoz, mint az azt létrehozó felhasználó; tárolt eljárás paramétereinek meghatározása, a tárolt eljárásoknak lehetnek bemeneti és kimeneti paraméterei; tárolt eljáráskód fejlesztés. Az eljáráskód bármilyen SQL-parancs sorozatát tartalmazhatja, beleértve az egyéb tárolt eljárások hívását is.

Az operátor szintaxisa egy új létrehozásához vagy egy meglévő tárolt eljárás módosításához az MS SQL Server jelölésében:

( LÉTREHOZÁS | MÓDOSÍTÁS ) PROC[ EDURE] eljárásnév [ ;szám] [ ( @paraméter_neve adattípus ) [ VARYING ] [ = ALAPÉRTÉKELÉS ] [ OUTPUT ] ] [ ,... n] [ WITH (ÚJRACOMPILE | TITKOSÍTÁS | ÚJRACOMPILE, TITKOSÍTÁS ) ] [ REPLIKÁLÁSHOZ] AS sql_statement [ ... n]

Nézzük meg ennek a parancsnak a paramétereit.

Az sp_, #, ## előtagok használatával a létrehozott eljárás rendszerként vagy ideiglenesként definiálható. Amint a parancs szintaxisából látható, nem szabad megadni a tulajdonos nevét, aki a létrehozott eljárás tulajdonosa lesz, valamint annak az adatbázisnak a nevét, ahol annak elhelyezkednie kell. Ezért ahhoz, hogy a létrehozott tárolt eljárást egy adott adatbázisba helyezze, ki kell adnia a CREATE PROCEDURE parancsot az adott adatbázis környezetében. Ha ugyanazon adatbázis objektumaihoz egy tárolt eljárás törzséből ér el, használhat rövidített neveket, azaz az adatbázis nevének megadása nélkül. Ha más adatbázisokban található objektumokhoz kell hozzáférnie, az adatbázis nevének megadása kötelező.

A bemeneti és kimeneti adatok átadásához a létrehozott tárolt eljárás paraméterneveinek @ karakterrel kell kezdődniük. Egy tárolt eljárásban több paramétert is megadhat, vesszővel elválasztva. Az eljárás törzse nem használhat olyan helyi változókat, amelyek neve megegyezik az eljárás paramétereinek nevével. Egy tárolt eljárás paramétereinek adattípusának meghatározására bármely típus alkalmas SQL adatok, beleértve a felhasználó által meghatározottakat is. A CURSOR adattípus azonban csak tárolt eljárás kimeneti paramétereként használható, pl. megadva az OUTPUT kulcsszót.

Az OUTPUT kulcsszó jelenléte azt jelenti, hogy a megfelelő paraméter egy tárolt eljárás adatait adja vissza. Ez azonban nem jelenti azt, hogy a paraméter nem alkalmas értékek tárolt eljárásnak való átadására. Az OUTPUT kulcsszó megadása arra utasítja a szervert, hogy a tárolt eljárásból való kilépéskor az aktuális paraméterértéket rendelje hozzá ahhoz a helyi változóhoz, amely az eljárás hívásakor paraméterértékként volt megadva. Vegye figyelembe, hogy az OUTPUT kulcsszó megadásakor az eljárás hívásakor a megfelelő paraméter értéke csak helyi változó segítségével állítható be. A normál paraméterekhez engedélyezett kifejezések vagy állandók nem megengedettek. A VARYING kulcsszó az OUTPUT paraméterrel együtt használatos, amely CURSOR típusú. Meghatározza, hogy a kimenet az eredménykészlet lesz.

A DEFAULT kulcsszó azt az értéket képviseli, amelyet a megfelelő paraméter alapértelmezés szerint felvesz. Így egy eljárás meghívásakor nem kell kifejezetten megadni a megfelelő paraméter értékét.

Mivel a szerver gyorsítótárazza a lekérdezés végrehajtási tervet és a lefordított kódot, az eljárás legközelebbi meghívásakor a kész értékek kerülnek felhasználásra. Bizonyos esetekben azonban továbbra is szükséges az eljáráskód újrafordítása. A RECOMPILE kulcsszó megadása arra utasítja a rendszert, hogy minden egyes meghívásakor hozzon létre egy végrehajtási tervet a tárolt eljáráshoz.

A FOR REPLICATION paraméter akkor szükséges, ha adatokat replikál, és a létrehozott tárolt eljárást cikkként szerepelteti egy kiadványban. Az ENCRYPTION kulcsszó arra utasítja a szervert, hogy titkosítsa a tárolt eljáráskódot, amely védelmet nyújthat a tárolt eljárást megvalósító, védett algoritmusok használata ellen. Az AS kulcsszó magának a tárolt eljárástörzsnek az elejére kerül. Az eljárástörzs szinte az összes SQL-parancsot használhatja, tranzakciókat deklarálhat, zárakat állíthat be, és más tárolt eljárásokat hívhat. A tárolt eljárásból a RETURN paranccsal léphet ki.

Tárolt eljárás eltávolítása

ELJÁRÁS LEADÁSA (eljárás_neve) [,...n]

Tárolt eljárás végrehajtása

Tárolt eljárás végrehajtásához használja a következő parancsot: [ [ EXEC [ UTE] eljárásnév [ ;szám] [ [ @parameter_name= ] ( érték | @változónév) [ OUTPUT ] | [ ALAPÉRTÉKELÉS ] ] [ ,... n]

Ha nem a tárolt eljáráshívás az egyetlen parancs a kötegben, akkor az EXECUTE parancs szükséges. Ezenkívül ez a parancs szükséges egy eljárás meghívásához egy másik eljárás vagy trigger törzséből.

Az OUTPUT kulcsszó használata eljárás hívásakor csak azon paraméterek esetében megengedett, amelyeket az eljárás OUTPUT kulcsszóval létrehozásakor deklaráltak.

Ha a DEFAULT kulcsszót adjuk meg egy paraméterhez egy eljárás hívásakor, akkor a rendszer az alapértelmezett értéket használja. Természetesen a megadott DEFAULT szó csak azoknál a paramétereknél megengedett, amelyekhez alapértelmezett érték van megadva.

Az EXECUTE parancs szintaxisa azt mutatja, hogy a paraméternevek elhagyhatók egy eljárás meghívásakor. Ebben az esetben azonban a felhasználónak meg kell adnia a paraméterek értékeit abban a sorrendben, ahogyan azokat az eljárás létrehozásakor felsorolták. Nem rendelhet hozzá alapértelmezett értéket egy paraméterhez, ha egyszerűen kihagyja azt a felsorolás során. Ha ki akarunk hagyni olyan paramétereket, amelyeknek alapértelmezett értéke van, akkor a tárolt eljárás meghívásakor elegendő a paraméterneveket kifejezetten megadni. Ezen túlmenően, ilyen módon bármilyen sorrendben felsorolhatja a paramétereket és azok értékeit.

Vegye figyelembe, hogy egy eljárás hívásakor vagy a paraméternevek értékekkel, vagy csak a paraméternév nélküli értékek kerülnek megadásra. Ezek kombinálása nem megengedett.

A RETURN használata tárolt eljárásban

Lehetővé teszi, hogy egy adott feltételnek megfelelően bármikor kilépjen az eljárásból, valamint lehetővé teszi az eljárás eredményének számként történő közvetítését, amely alapján megítélheti az eljárás minőségét és helyességét. Példa paraméterek nélküli eljárás létrehozására:

ELJÁRÁS LÉTREHOZÁSA Count_Books AS SELECT COUNT (Code_book) FROM Books GO

1. Feladat.

EXEC Count_Books

Ellenőrizze az eredményt.

Példa egy eljárás létrehozására bemeneti paraméterrel:

ELJÁRÁS LÉTREHOZÁSA Count_Books_Pages @Count_pages AS INT AS SELECT COUNT (Code_book) FROM Books WHERE Oldalak>= @Count_pages GO

2. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancs segítségével

EXEC Count_Books_Pages 100

Ellenőrizze az eredményt.

Példa egy eljárás létrehozására bemeneti paraméterekkel:

ELJÁRÁS LÉTREHOZÁSA Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) AS SELECT COUNT (Code_book) FROM Books WHERE Oldalak>= @Count_pages AND Title_book LIKE @Title GO

3. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancs segítségével

EXEC Count_Books_Title 100 , "P%"

Ellenőrizze az eredményt.

Példa egy eljárás létrehozására bemeneti és kimeneti paraméterekkel:

ELJÁRÁS LÉTREHOZÁSA Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo INT OUTPUT AS SELECT @Itogo = COUNT (Code_book) FROM Books WHERE Oldalak>= @Count_pages AND Title_book LIKE @Title GO

4. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancskészletet:

Sql> @q deklarálása mint int EXEC Count_Books_Itogo 100, "P%", @q kimenet kiválasztása @q

Ellenőrizze az eredményt.

Példa egy eljárás létrehozására bemeneti paraméterekkel és RETURN:

ELJÁRÁS LÉTREHOZÁSA checkname @param INT ASIF (SELECT Name_author FROM authors WHERE Code_author = @param) = "Puskin A.S." VISSZA 1 EGYÉB VISSZA 2

5. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancsokkal:

DECLARE @return_status INT EXEC @return_status = checkname 1 KIVÁLASZTÁS "Visszaküldési állapot" = @return_status

Példa paraméterek nélküli eljárás létrehozására a Vásárlások tábla kulcsmezőjének értékének kétszeresére növelésére:

PROC LÉTREHOZÁSA update_proc AS UPDATE Vásárlások SET Code_purchase = Code_purchase* 2

6. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancs segítségével

EXEC update_proc

Példa egy eljárásra egy bemeneti paraméterrel, amellyel egy adott szerzőről minden információt meg lehet szerezni:

CREATE PROC select_author @k CHAR (30 ) AS SELECT * FROM Szerzők WHERE név_szerző= @k

7. feladat.

EXEC select_author "Pushkin A.S." vagy select_author @k= "Puskin A.S." vagy EXEC select_author @k= "Pushkin A.S."

Példa egy olyan eljárás létrehozására egy bemeneti paraméterrel és egy alapértelmezett értékkel, amely egy kulcsmező értékét a Vásárlások táblázatban meghatározott számú alkalommal (alapértelmezés szerint kétszeresére) növeli:

PROC LÉTREHOZÁSA update_proc @p INT = 2 AS UPDATE Vásárlások SET Code_purchase = Code_purchase * @p

Az eljárás nem ad vissza semmilyen adatot.

8. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancsokkal:

EXEC update_proc 4 vagy EXEC update_proc @p = 4 vagy EXEC update_proc -- az alapértelmezett érték kerül felhasználásra.

Példa egy eljárás létrehozására bemeneti és kimeneti paraméterekkel. Hozzon létre egy eljárást az adott időszak alatt teljesített megrendelések számának meghatározásához:

CREATE PROC count_purchases @d1 SMALLDATETIME, @d2 SMALLDATETIME, @c INT OUTPUT AS SELECT @c= COUNT (Code_purchase) FROM Purchases WHERE Date_order BETWEEN @d1 ÉS @d2 SET @c = ISNULL(@c, 0 )

9. feladat. Hozza létre ezt az eljárást a DB_Books adatbázis Tárolt eljárások részében az SQL Server Management Studio segédprogrammal. Futtassa a parancsokkal:

DECLARE @c2 INT EXEC vásárlások száma '01-jun-2006', '01-jul-2006', @c2 OUTPUT SELECT @c2

Lehetőségek a feladatokhoz laboratóriumi munka №4

Általános rendelkezések. Az SQL Server Management Studio alkalmazásban hozza létre új oldal a kódhoz (a „Kérés létrehozása” gomb). Programozottan tegye aktívvá a létrehozott DB_Books adatbázist a Use utasítás használatával. Hozzon létre tárolt eljárásokat az Eljárás utasítások létrehozása funkcióval, és határozza meg saját maga az eljárások nevét. Minden eljárás egy SQL-lekérdezést hajt végre, amelyet a második laborban hajtottak végre. Sőt, a lekérdezések SQL kódját meg kell változtatni, hogy a kereséshez használt mezők értékeit továbbíthassák.

Például a kiinduló feladat és kérés a 2. számú laboratóriumi munkában:

/*Válassza ki a beszállítói címtárból (Szállítási táblázat) azoknak a cégeknek a nevét, telefonszámait és INN-jét (Név_vállalat, Telefon és INN mezők), amelyek cégneve (Név_vállalat mező) „OJSC MIR”.

SELECT Cégnév, Telefon, INN FROM Szállítások WHERE Név_vállalat = "OJSC MIR"

*/ – Ebben a munkában a következő eljárás jön létre:

CREATE PROC select_name_company @comp CHAR (30 ) AS SELECT Név_vállalat, Telefon, INN FROM Szállítások WHERE Név_vállalat = @comp

– Az eljárás elindításához használja a következő parancsot:

EXEC select_name_company "JSC MIR"

Feladat lista

Hozzon létre egy új programot az SQL Server Management Studio-ban. Programozottan aktiválja az 1. számú laboratóriumi munkában létrehozott egyedi adatbázist a Use utasítás segítségével. Hozzon létre tárolt eljárásokat az Eljárás utasítások létrehozása funkcióval, és határozza meg saját maga az eljárások nevét. Minden eljárás egy SQL lekérdezést hajt végre, amely opciók szerint külön feladatok formájában jelenik meg.

1.opció

1. Jelenítse meg azon alkalmazottak listáját, akiknek legalább egy gyermekük van.

2. Jelenítse meg azoknak a gyerekeknek a listáját, akik ajándékot kaptak a megadott időszakban.

3. Jelenítse meg a kiskorú gyermekekkel rendelkező szülők listáját.

4. A megadott számnál nagyobb értékű ajándékok információinak megjelenítése dátum szerint rendezve.

2. lehetőség

1. Jelenítse meg a megadott típusú eszközök listáját.

2. Jelenítse meg a javított eszközök számát és a javítások teljes költségét a megadott technikustól.

3. Jelenítse meg az eszköztulajdonosok listáját és kérelmeik számát, a kérések száma szerint, csökkenő sorrendben.

4. Információk megjelenítése azokról a kézművesekről, akiknek rangja nagyobb a megadott számnál, vagy akiknek a felvételi dátuma kisebb, mint a megadott dátum.

3. lehetőség

2. Jelenítse meg azon értékesítési kódok listáját, amelyek a megadott számnál nagyobb összegért értékesítettek virágot.

3. Jelenítse meg az eladás dátumát, az összeget, az eladót és a virágot a megadott értékesítési kód szerint.

4. Jelenítse meg a virágok listáját és a fajtát a megadott számnál nagyobb magasságú vagy virágzó virágok esetén.

4. lehetőség

1. Jelenítse meg a gyógyszerek listáját a megadott használati javallattal.

2. Jelenítse meg azoknak a szállítási dátumoknak a listáját, amelyekre a megadott számnál több azonos nevű gyógyszert értékesítettek.

3. Jelenítse meg a szállítás dátumát, mennyiségét, a szállítótól kapott vezető teljes nevét és a gyógyszer nevét a megadott számnál nagyobb átvételi kóddal.

5. lehetőség

2. Jelenítse meg a meghatározott ok miatt leállított berendezések listáját.

3. Jelenítse meg az átvétel dátumát, a berendezés nevét, a felelős személy teljes nevét és a leírás dátumát a megadott időszakban leírt berendezések esetében.

4. Jelenítse meg a meghatározott típusú vagy egy bizonyos értéknél nagyobb átvételi dátumú berendezések listáját

6. lehetőség

1. Jelenítse meg a megadott számnál nagyobb súlyú ételek listáját.

2. Jelenítse meg azon termékek listáját, amelyek neve tartalmazza a megadott szórészletet.

3. Jelenítse meg a termék térfogatát, az étel nevét, a termék nevét az étel kódjával a megadott kezdőértéktől egy bizonyos végértékig.

4. Jelenítse meg egy adott értéknél nagyobb szénhidrátmennyiséget vagy egy meghatározott értéknél nagyobb kalóriamennyiséget tartalmazó étel elkészítési sorrendjét és annak az ételnek a nevét.

7. lehetőség

1. Jelenítse meg a megadott pozícióval rendelkező alkalmazottak listáját.

3. Jelenítse meg a regisztráció dátumát, a dokumentum típusát, az anyakönyvvezető teljes nevét és a szervezet nevét a megadott időszakban regisztrált dokumentumok esetén.

4. Jelenítse meg az adott dokumentumtípussal vagy a megadott értéknél nagyobb regisztrációs dátummal rendelkező regisztrált dokumentumok listáját.

8. lehetőség

1. Jelenítse meg az alkalmazottak listáját az elbocsátás meghatározott okával.

3. Jelenítse meg a regisztráció dátumát, az elbocsátás okát, a munkavállaló teljes nevét a megadott időszakban regisztrált dokumentumoknál.

9. lehetőség

1. Jelenítse meg azon alkalmazottak listáját, akik a megadott típusú szabadságot vették ki.

2. Jelenítse meg a dokumentumok listáját regisztrációs dátummal a megadott időszakban.

3. Jelenítse meg a regisztráció dátumát, a szabadság típusát, a munkavállaló teljes nevét a megadott időszakban regisztrált dokumentumoknál.

4. Jelenítse meg a regisztrált dokumentumok listáját a megadott tartományba eső dokumentumkóddal.

10. lehetőség

1. Jelenítse meg a megadott pozícióval rendelkező alkalmazottak listáját.

2. Jelenítse meg azoknak a dokumentumoknak a listáját, amelyek tartalma tartalmazza a megadott szórészletet.

3. Jelenítse meg a regisztráció dátumát, a dokumentum típusát, a feladó teljes nevét és a szervezet nevét a megadott időszakban regisztrált dokumentumok esetén.

4. Jelenítse meg a regisztrált bizonylatok listáját a megadott bizonylattípussal vagy egy bizonyos értéknél kisebb dokumentumkóddal.

11. lehetőség

1. Jelenítse meg a megadott pozícióhoz rendelt alkalmazottak listáját.

2. Jelenítse meg a dokumentumok listáját regisztrációs dátummal a megadott időszakban.

3. Jelenítse meg a regisztráció dátumát, beosztását, a munkavállaló teljes nevét a megadott időszakban regisztrált dokumentumoknál.

4. Jelenítse meg a regisztrált dokumentumok listáját a megadott tartományba eső dokumentumkóddal.

12. lehetőség

3. Jelenítse meg azoknak a személyeknek a listáját, akik felszerelést béreltek, és kéréseik számát, a kérések száma szerint, csökkenő sorrendben.

13. lehetőség

1. Jelenítse meg a megadott típusú berendezések listáját. 2. Jelenítse meg az adott alkalmazott által leírt berendezések listáját.

3. Jelenítse meg a leszerelt berendezések mennyiségét berendezés típusa szerint csoportosítva.

4. Információk megjelenítése azokról az alkalmazottakról, akiknek a felvételi dátuma egy bizonyos dátumnál nagyobb.

14. lehetőség

1. Nyomtassa ki a virágok listáját a megadott levéltípussal.

2. Jelenítse meg azoknak a nyugtakódoknak a listáját, amelyekért virágot adtak el egy bizonyos értéknél nagyobb összegért.

3. Jelenítse meg a beérkezés dátumát, összegét, a szállító nevét és a színeket egy adott szállítói kóddal.

4. Jelenítse meg a virágok listáját és a fajtát egy bizonyos számnál nagyobb magasságú vagy virágzó virágok esetén.

15. lehetőség

1. Jelenítse meg azon ügyfelek listáját, akik a megadott időszakban bejelentkeztek a szobákba.

2. Jelenítse meg az egyes ügyfelek szobáiért fizetett teljes összeget.

3. Jelenítse meg az érkezés dátumát, szobatípusát, a megadott időszakban regisztrált ügyfelek teljes nevét.

4. Jelenítse meg a regisztrált ügyfelek listáját egy bizonyos típusú szobákban.

16. lehetőség

1. Jelenítse meg a megadott típusú berendezések listáját.

2. Jelenítse meg az adott ügyfél által bérelt berendezések listáját.

3. Jelenítse meg azoknak a személyeknek a listáját, akik felszerelést béreltek, és kéréseik számát, a kérések száma szerint, csökkenő sorrendben.

4. Információk megjelenítése az ügyfelekről cím szerint rendezve.

17. lehetőség

1. Jelenítse meg azoknak az értéktárgyaknak a listáját, amelyek vételára nagyobb, mint egy bizonyos érték, vagy a jótállási idő meghaladja a megadott számot.

2. Jelenítse meg az olyan anyagi javak helyeinek listáját, amelyek neve tartalmazza a megadott szót.

3. Jelenítse meg az értékek összegét egy kóddal a megadott tartományban.

4. Jelenítse meg a pénzügyileg felelős személyek listáját a foglalkoztatás dátumával a megadott tartományban.

18. lehetőség

1. Jelenítse meg az adott technikus által végzett javítások listáját.

2. Jelenítse meg azoknak a munkaszakaszoknak a listáját, amelyeknek a címe tartalmazza a megadott szót.

3. Jelenítse meg a javítási munkaszakaszok költségének összegét a megadott tartományba eső kóddal.

4. Jelenítse meg a művezetők listáját a felvétel dátumával a megadott tartományban.

19. lehetőség

1. Jelenítse meg a gyógyszerek listáját egy adott indikációval.

2. Jelenítse meg azoknak a számlaszámoknak a listáját, amelyekért bizonyos számú gyógyszert adtak el.

3. A megadott számú bizonylaton tüntesse fel az eladás dátumát, az összeget, a pénztáros nevét és a gyógyszert.

4. Jelenítse meg azoknak a gyógyszereknek a listáját és mértékegységeit, amelyeknél a csomagolásban lévő mennyiség nagyobb, mint a megadott szám, vagy a gyógyszerkód kisebb, mint egy bizonyos érték.

20. lehetőség

1. Jelenítse meg a megadott pozícióval rendelkező alkalmazottak listáját.

2. Jelenítse meg azoknak a dokumentumoknak a listáját, amelyek tartalma tartalmazza a megadott szórészletet.

3. A megadott időszakban nyilvántartásba vett iratok esetében jelenítse meg a nyilvántartásba vétel dátumát, dokumentumtípusát, a végrehajtó teljes nevét és a végrehajtás tényét.

4. Jelenítse meg a regisztrált bizonylatok listáját a megadott bizonylattípussal vagy bizonylatkóddal egy bizonyos tartományban.