Jinsi ya kuandika kwa usahihi taratibu zilizohifadhiwa kwenye Seva ya SQL. Taratibu zilizohifadhiwa Je, ni utaratibu uliohifadhiwa

Utaratibu uliohifadhiwa - kitu cha hifadhidata, ambayo ni seti ya maagizo ya SQL ambayo yanakusanywa mara moja na kuhifadhiwa kwenye seva. Taratibu zilizohifadhiwa zinafanana sana na taratibu za lugha za kiwango cha juu, zinaweza kuwa na vigezo vya pembejeo na pato na vigezo vya ndani, zinaweza kufanya mahesabu ya nambari na uendeshaji kwenye data ya tabia, matokeo ambayo yanaweza kupewa vigezo na vigezo. Taratibu zilizohifadhiwa zinaweza kufanya shughuli za hifadhidata za kawaida (zote DDL na DML). Kwa kuongeza, taratibu zilizohifadhiwa huruhusu matanzi na matawi, yaani, wanaweza kutumia maagizo ili kudhibiti mchakato wa utekelezaji.

Taratibu zilizohifadhiwa ni sawa na kazi zilizoainishwa na mtumiaji (UDFs). Tofauti kuu ni kwamba vitendaji vilivyoainishwa na mtumiaji vinaweza kutumika kama usemi mwingine wowote katika taarifa ya SQL, wakati taratibu zilizohifadhiwa lazima ziitwe kwa kutumia kitendakazi cha CALL:

Utaratibu wa KUPIGA SIMU(...)

TEKELEZA utaratibu(…)

Taratibu zilizohifadhiwa zinaweza kurudisha matokeo mengi, ambayo ni, matokeo ya swali la SELECT. Seti kama hizo za matokeo zinaweza kuchakatwa kwa kutumia vishale, taratibu zingine zilizohifadhiwa ambazo hurejesha kielekezi cha seti ya matokeo, au programu. Taratibu zilizohifadhiwa zinaweza pia kuwa na vigeu vilivyotangazwa vya kuchakata data na vielekezi, ambavyo hukuruhusu kuzunguka safu mlalo nyingi kwenye jedwali. Kiwango cha SQL hutoa IF, LOOP, REPEAT, CASE, na vingine vingi vya kufanya kazi navyo. Taratibu zilizohifadhiwa zinaweza kukubali vigeu, kurudisha matokeo, au kurekebisha vigeu na kuvirudisha, kulingana na mahali ambapo kigezo kinatangazwa.

Utekelezaji wa taratibu zilizohifadhiwa hutofautiana kutoka kwa DBMS moja hadi nyingine. Wachuuzi wengi wa hifadhidata huwaunga mkono kwa namna moja au nyingine. Kulingana na DBMS, taratibu zilizohifadhiwa zinaweza kutekelezwa katika lugha mbalimbali za programu, kama vile SQL, Java, C au C++. Taratibu zilizohifadhiwa ambazo hazijaandikwa katika SQL zinaweza au haziwezi kutekeleza hoja za SQL peke yake.

Nyuma

    Kushiriki mantiki na programu zingine. Taratibu zilizohifadhiwa zinajumuisha utendaji; hii hutoa muunganisho wa ufikiaji na usimamizi wa data katika programu tofauti.

    Kuwatenga watumiaji kutoka kwa meza za hifadhidata. Hii hukuruhusu kutoa ufikiaji wa taratibu zilizohifadhiwa, lakini sio data ya meza yenyewe.

    Hutoa utaratibu wa ulinzi. Kama ilivyo kwa nukta iliyotangulia, ikiwa unaweza kupata data tu kupitia taratibu zilizohifadhiwa, hakuna mtu mwingine anayeweza kufuta data yako kupitia amri ya SQL DELETE.

    Utekelezaji ulioboreshwa kutokana na kupungua kwa trafiki ya mtandao. Kwa kutumia taratibu zilizohifadhiwa, maswali mengi yanaweza kuunganishwa.

Dhidi ya

    Kuongezeka kwa mzigo kwenye seva ya hifadhidata kutokana na ukweli kwamba kazi nyingi hufanywa kwa upande wa seva, na chini kwa upande wa mteja.

    Itabidi ujifunze mengi. Utahitaji kujifunza syntax ya usemi ya MySQL ili kuandika taratibu zako zilizohifadhiwa.

    Unanakili mantiki ya programu yako katika sehemu mbili: msimbo wa seva na msimbo kwa taratibu zilizohifadhiwa, na hivyo kutatiza mchakato wa upotoshaji wa data.

    Uhamiaji kutoka DBMS moja hadi nyingine (DB2, SQL Server, nk) inaweza kusababisha matatizo.

Madhumuni na Faida za Taratibu Zilizohifadhiwa

Taratibu zilizohifadhiwa huboresha utendakazi, huongeza uwezo wa kupanga programu, na kusaidia vipengele vya usalama wa data.

Badala ya kuhifadhi swala linalotumiwa mara kwa mara, wateja wanaweza kurejelea utaratibu unaolingana uliohifadhiwa. Wakati utaratibu uliohifadhiwa unaitwa, yaliyomo ndani yake huchakatwa mara moja na seva.

Mbali na kutekeleza swala, taratibu zilizohifadhiwa pia hukuruhusu kufanya mahesabu na kudhibiti data - kubadilisha, kufuta, kutekeleza taarifa za DDL (sio katika DBMS zote!) na kuita taratibu zingine zilizohifadhiwa, na kufanya mantiki ngumu ya shughuli. Taarifa moja inakuwezesha kupiga script tata iliyo katika utaratibu uliohifadhiwa, kuepuka kutuma mamia ya amri kwenye mtandao na, hasa, haja ya kuhamisha kiasi kikubwa cha data kutoka kwa mteja hadi kwa seva.

Katika DBMS nyingi, mara ya kwanza utaratibu uliohifadhiwa unapoendeshwa, hukusanywa (huchanganuliwa na mpango wa ufikiaji wa data hutolewa). Katika siku zijazo, usindikaji wake ni kasi zaidi. Oracle DBMS hutafsiri msimbo wa kiutaratibu uliohifadhiwa katika kamusi ya data. Kuanzia na Oracle 10g, kinachojulikana kama mkusanyiko wa asili wa msimbo wa utaratibu uliohifadhiwa katika C na kisha kwenye msimbo wa mashine ya mashine inayolengwa unasaidiwa, baada ya hapo, wakati utaratibu uliohifadhiwa unapoitwa, msimbo wake wa kitu kilichokusanywa hutekelezwa moja kwa moja.

Uwezo wa kupanga

Utaratibu ulioundwa uliohifadhiwa unaweza kuitwa wakati wowote, ambao hutoa modularity na kuhimiza utumiaji wa nambari tena. Mwisho hufanya hifadhidata iwe rahisi kutunza, kwani inajitenga na kubadilisha sheria za biashara. Unaweza kurekebisha utaratibu uliohifadhiwa kwa mujibu wa sheria mpya wakati wowote. Baada ya hayo, programu zote zinazoitumia zitatii kiotomatiki sheria mpya za biashara bila marekebisho ya moja kwa moja.

Usalama

Matumizi ya taratibu zilizohifadhiwa hukuruhusu kupunguza au kuondoa kabisa ufikiaji wa moja kwa moja wa mtumiaji kwenye meza za hifadhidata, na kuwaacha watumiaji ruhusa tu ya kutekeleza taratibu zilizohifadhiwa ambazo hutoa ufikiaji usio wa moja kwa moja na uliodhibitiwa madhubuti kwa data. Kwa kuongeza, baadhi ya DBMS zinaunga mkono usimbaji fiche wa maandishi (ufungaji) wa utaratibu uliohifadhiwa.

Vipengele hivi vya usalama huruhusu muundo wa hifadhidata kutengwa na mtumiaji, kuhakikisha uadilifu na utegemezi wa hifadhidata.

Uwezekano wa vitendo kama vile sindano ya SQL umepunguzwa kwa sababu taratibu zilizohifadhiwa zilizoandikwa vyema hukagua vigezo vya ingizo kabla ya kupeleka hoja kwa DBMS.

Utekelezaji wa Taratibu Zilizohifadhiwa

Taratibu zilizohifadhiwa kwa kawaida huundwa kwa kutumia lugha ya SQL au utekelezaji wake mahususi katika DBMS iliyochaguliwa. Kwa mfano, kwa madhumuni haya, katika Microsoft SQL Server DBMS kuna lugha ya Transact-SQL, katika Oracle - PL/SQL, katika InterBase na Firebird - PSQL, katika PostgreSQL - PL/pgSQL, PL/Tcl, PL/Perl, PL/Python, katika IBM DB2 - SQL/PL (Kiingereza), katika Informix - SPL. MySQL inafuata kiwango cha SQL:2003 kwa ukaribu kabisa, lugha yake ni sawa na SQL/PL.

Baadhi ya DBMS huruhusu matumizi ya taratibu zilizohifadhiwa zilizoandikwa katika lugha yoyote ya programu ambayo inaweza kuunda faili za kujitegemea zinazoweza kutekelezwa, kwa mfano, C++ au Delphi. Katika istilahi za Seva ya Microsoft SQL, taratibu kama hizo huitwa taratibu zilizopanuliwa zilizohifadhiwa na ni vitendaji vilivyomo katika Win32 DLL. Na, kwa mfano, katika Interbase na Firebird, kazi zinazoitwa kutoka kwa DLL/SO zina jina tofauti - UDF (Kazi Iliyoainishwa ya Mtumiaji). MS SQL 2005 ilianzisha uwezo wa kuandika taratibu zilizohifadhiwa katika lugha yoyote ya .NET, na taratibu zilizopanuliwa zilizohifadhiwa zimepangwa kuachwa katika siku zijazo. Oracle DBMS, kwa upande wake, inaruhusu kuandika taratibu zilizohifadhiwa katika Java. Katika IBM DB2, kuandika taratibu na kazi zilizohifadhiwa katika lugha za kawaida za programu ni njia ya jadi, inayoungwa mkono tangu mwanzo, na upanuzi wa utaratibu wa SQL uliongezwa kwa DBMS hii tu katika matoleo ya marehemu, baada ya kuingizwa katika kiwango cha ANSI. Informix pia inasaidia taratibu katika Java na C.

Katika Oracle DBMS, taratibu zilizohifadhiwa zinaweza kuunganishwa katika kinachojulikana vifurushi. Kifurushi kina sehemu mbili - vipimo vya kifurushi, ambacho kinaelezea ufafanuzi wa utaratibu uliohifadhiwa, na mwili wa kifurushi, ambao una utekelezaji wake. Kwa hivyo, Oracle hukuruhusu kutenganisha kiolesura cha msimbo wa programu kutoka kwa utekelezaji wake.

Katika IBM DB2 DBMS, taratibu zilizohifadhiwa zinaweza kuunganishwa katika moduli.

Sintaksia

UNDA UTARATIBU `p2`()

SQL SECURITY DEFINER

MAONI "Taratibu"

CHAGUA "Hujambo Ulimwengu!";

Sehemu ya kwanza ya msimbo huunda utaratibu uliohifadhiwa. Inayofuata ina vigezo vya hiari. Kisha inakuja jina na, hatimaye, mwili wa utaratibu yenyewe.

Tabia 4 za utaratibu uliohifadhiwa:

Lugha: Kwa madhumuni ya kubebeka, chaguomsingi ni SQL.

Kuamua: ikiwa utaratibu daima unarudi matokeo sawa na huchukua vigezo sawa vya pembejeo. Hii ni kwa ajili ya mchakato wa kurudia na usajili. Thamani chaguo-msingi sio DETERMINISTIC.

Usalama wa SQL: haki za mtumiaji huangaliwa wakati wa simu. INVOKER ndiye mtumiaji anayeita utaratibu uliohifadhiwa. DEFINER ndiye "muundaji" wa utaratibu. Thamani chaguo-msingi ni DEFINER.

Maoni: Kwa madhumuni ya uhifadhi, thamani chaguomsingi ni ""

Kuita Utaratibu uliohifadhiwa

PIGA_jina_la_utaratibu_uliohifadhiwa (param1, param2, ....)

CALL procedure1(10 , "string parameter" , @parameter_var);

Kurekebisha Utaratibu Uliohifadhiwa

MySQL ina taarifa ya ALTER PROCEDURE ya kubadilisha taratibu, lakini inafaa tu kwa kubadilisha sifa fulani. Ikiwa unahitaji kubadilisha vigezo au mwili wa utaratibu, unapaswa kufuta na kuifanya upya.

Kuondolewakuhifadhiwataratibu

UTARATIBU WA KUONDOA IKIWA IPO p2;

Hii ni amri rahisi. Taarifa ya IF EXISTS inapata hitilafu ikiwa utaratibu kama huo haupo.

Chaguo

TENGENEZA UTARATIBU proc1(): orodha tupu ya vigezo

UTENGENEZA UTARATIBU proc1 (KWA jina la DATA-TYPE): kigezo kimoja cha ingizo. Neno IN ni hiari kwa sababu vigezo chaguo-msingi ni IN (ndani).

TUNZA UTARATIBU proc1 (jina la OUT DATA-TYPE): kigezo kimoja kimerejeshwa.

UNDA UTARATIBU proc1 (INOUT varname DATA-TYPE): kigezo kimoja, ingizo na kurejesha.

Sintaksia ya tamko tofauti inaonekana kama hii:

TANGAZA jina la msingi DATA-TYPE DEFAULT thamani-msingi;

Taratibu zilizohifadhiwa za SQL ni moduli za programu zinazoweza kutekelezwa ambazo zinaweza kuhifadhiwa kwa namna ya vitu mbalimbali. Kwa maneno mengine, ni kitu ambacho kina taarifa za SQL. Taratibu hizi zilizohifadhiwa zinaweza kutekelezwa katika mteja wa programu ili kupata utendaji mzuri. Kwa kuongeza, vitu vile mara nyingi huitwa kutoka kwa maandiko mengine au hata kutoka kwa sehemu nyingine.

Utangulizi

Watu wengi wanaamini kuwa wao ni sawa na taratibu mbalimbali (kwa mtiririko huo, isipokuwa MS SQL). Labda hii ni kweli. Wana vigezo sawa na wanaweza kuzalisha maadili sawa. Aidha, katika baadhi ya matukio wanagusa. Kwa mfano, zimeunganishwa na hifadhidata za DDL na DML, pamoja na kazi za mtumiaji (codenamed UDF).

Kwa kweli, taratibu zilizohifadhiwa za SQL zina faida nyingi ambazo huwatenganisha na michakato inayofanana. Usalama, kubadilika kwa programu, tija - yote haya huvutia watumiaji zaidi na zaidi wanaofanya kazi na hifadhidata. Umaarufu wa kilele wa taratibu ulitokea mwaka 2005-2010, wakati programu kutoka kwa Microsoft inayoitwa "SQL Server Management Studio" ilitolewa. Kwa msaada wake, kufanya kazi na hifadhidata imekuwa rahisi zaidi, zaidi ya vitendo na rahisi. Kuanzia mwaka hadi mwaka, huyu alipata umaarufu kati ya watengeneza programu. Leo ni programu inayojulikana kabisa, ambayo kwa watumiaji ambao "wanawasiliana" na hifadhidata ni sawa na Excel.

Utaratibu unapoitwa, huchakatwa mara moja na seva yenyewe bila michakato isiyo ya lazima au uingiliaji wa mtumiaji. Baada ya hayo, unaweza kutekeleza kufuta, kutekeleza, au kurekebisha. Opereta wa DDL anajibika kwa haya yote, ambaye peke yake hufanya vitendo ngumu zaidi kusindika vitu. Kwa kuongezea, haya yote hufanyika haraka sana, na seva haijapakiwa. Kasi na utendaji huu hukuruhusu kuhamisha haraka kiasi kikubwa cha habari kutoka kwa mtumiaji hadi kwa seva na kinyume chake.

Ili kutekeleza teknolojia hii ya kufanya kazi na habari, kuna lugha kadhaa za programu. Hizi ni pamoja na, kwa mfano, PL/SQL kutoka Oracle, PSQL katika mifumo ya InterBase na Firebird, pamoja na Microsoft Transact-SQL ya kawaida. Zote zimeundwa kwa ajili ya kuunda na kutekeleza taratibu zilizohifadhiwa, ambayo inaruhusu wasindikaji wa database kubwa kutumia algorithms yao wenyewe. Hii pia ni muhimu ili wale wanaosimamia habari hizo waweze kulinda vitu vyote kutoka kwa upatikanaji usioidhinishwa na wahusika wa tatu na, ipasavyo, uundaji, urekebishaji au ufutaji wa data fulani.

Tija

Vipengee hivi vya hifadhidata vinaweza kupangwa kwa njia mbalimbali. Hii inaruhusu watumiaji kuchagua aina ya njia inayotumika ambayo inafaa zaidi, kuokoa juhudi na wakati. Kwa kuongeza, utaratibu unashughulikiwa yenyewe, ambayo huepuka wakati mkubwa unaotumiwa kwenye mawasiliano kati ya seva na mtumiaji. Pia, moduli inaweza kupangwa upya na kubadilishwa katika mwelekeo unaotaka wakati wowote kabisa. Inastahili kuzingatia kasi ambayo utaratibu wa kuhifadhiwa wa SQL unazinduliwa: mchakato huu hutokea kwa kasi zaidi kuliko wengine sawa na hiyo, ambayo inafanya kuwa rahisi na ya ulimwengu wote.

Usalama

Aina hii ya usindikaji wa habari inatofautiana na michakato sawa kwa kuwa inahakikisha usalama ulioongezeka. Hii inahakikishwa na ukweli kwamba upatikanaji wa taratibu na watumiaji wengine unaweza kutengwa kabisa. Hii itamruhusu msimamizi kufanya shughuli nao kwa kujitegemea, bila hofu ya kuingilia habari au ufikiaji usioidhinishwa wa hifadhidata.

Uhamisho wa data

Uhusiano kati ya utaratibu uliohifadhiwa wa SQL na programu ya mteja ni matumizi ya vigezo na maadili ya kurejesha. Mwisho sio lazima kupitisha data kwa utaratibu uliohifadhiwa, lakini habari hii (hasa kwa ombi la mtumiaji) inashughulikiwa kwa SQL. Baada ya utaratibu uliohifadhiwa kukamilisha kazi yake, hutuma pakiti za data nyuma (lakini tena kwa hiari) kwa programu iliyoiita, kwa kutumia mbinu mbalimbali ambazo zinaweza kutumika kupiga utaratibu uliohifadhiwa wa SQL au kurejesha, kwa mfano:

Kuhamisha data kwa kutumia parameter ya aina ya Pato;

Kupitisha data kwa kutumia operator wa kurudi;

Kupitisha data kwa kutumia opereta iliyochaguliwa.

Sasa hebu tuone jinsi mchakato huu unavyoonekana kutoka ndani.

1. Unda utaratibu uliohifadhiwa wa EXEC katika SQL

Unaweza kuunda utaratibu katika MS SQL (Studio ya Usimamizi). Baada ya utaratibu kuundwa, itaorodheshwa katika node inayoweza kupangwa ya database, ambayo utaratibu wa uumbaji unafanywa na operator. Ili kutekeleza, taratibu zilizohifadhiwa za SQL hutumia mchakato wa EXEC ambao una jina la kitu chenyewe.

Unapounda utaratibu, jina lake linaonekana kwanza, ikifuatiwa na vigezo moja au zaidi vilivyopewa. Vigezo vinaweza kuwa vya hiari. Baada ya parameter (s), yaani, mwili wa utaratibu, umeandikwa, baadhi ya shughuli muhimu zinahitajika kufanywa.

Jambo ni kwamba mwili unaweza kuwa na vigezo vya ndani vilivyomo ndani yake, na vigezo hivi pia ni vya ndani kuhusiana na taratibu. Kwa maneno mengine, zinaweza tu kutazamwa ndani ya mwili wa utaratibu wa Seva ya Microsoft SQL. Taratibu zilizohifadhiwa katika kesi hii zinachukuliwa kuwa za ndani.

Kwa hivyo, ili kuunda utaratibu, tunahitaji jina la utaratibu na angalau parameter moja kama mwili wa utaratibu. Kumbuka kuwa chaguo kubwa katika kesi hii ni kuunda na kutekeleza utaratibu na jina la schema kwenye kiainishaji.

Mwili wa utaratibu unaweza kuwa wa aina yoyote, kama vile kuunda meza, kuingiza safu moja au zaidi ya meza, kuanzisha aina na asili ya hifadhidata, na kadhalika. Walakini, mwili wa utaratibu huzuia shughuli fulani kufanywa ndani yake. Baadhi ya vikwazo muhimu vimeorodheshwa hapa chini:

Mwili haupaswi kuunda utaratibu mwingine wowote uliohifadhiwa;

Mwili haupaswi kuunda hisia ya uwongo ya kitu;

Mwili haupaswi kuunda vichochezi vyovyote.

2. Kuweka kutofautiana katika mwili wa utaratibu

Unaweza kufanya vigezo vya ndani kwa mwili wa utaratibu, na kisha watakaa ndani ya mwili wa utaratibu. Ni mazoezi mazuri ya kuunda vigezo mwanzoni mwa mwili wa utaratibu uliohifadhiwa. Lakini pia unaweza kuweka vijiwezo mahali popote kwenye mwili wa kitu fulani.

Wakati mwingine unaweza kuona kwamba vigezo kadhaa vimewekwa kwenye mstari mmoja, na kila parameter ya kutofautiana hutenganishwa na comma. Pia kumbuka kuwa kutofautisha kumewekwa awali na @. Katika mwili wa utaratibu unaweza kuweka kutofautisha popote unapotaka. Kwa mfano, kigezo cha @NAME1 kinaweza kutangazwa karibu na mwisho wa chombo cha utaratibu. Ili kugawa thamani kwa tofauti iliyotangazwa, seti ya data ya kibinafsi hutumiwa. Tofauti na hali ambapo kutofautiana zaidi ya moja kunatangazwa kwenye mstari huo, katika hali hii seti moja tu ya data ya kibinafsi hutumiwa.

Watumiaji mara nyingi huuliza swali: "Jinsi ya kugawa maadili mengi katika taarifa moja kwenye mwili wa utaratibu?" Vizuri. Ni swali la kuvutia, lakini ni rahisi kufanya kuliko unavyofikiri. Jibu: Kwa kutumia jozi kama vile "Chagua Var = thamani". Unaweza kutumia jozi hizi kwa kuzitenganisha kwa koma.

Mifano mbalimbali zinaonyesha watu wanaunda utaratibu rahisi uliohifadhiwa na kuutekeleza. Walakini, utaratibu unaweza kukubali vigezo ili mchakato wa kuiita utakuwa na maadili karibu nayo (lakini sio kila wakati). Ikiwa zinapatana, basi michakato inayolingana huanza ndani ya mwili. Kwa mfano, ikiwa utaunda utaratibu ambao utakubali jiji na eneo kutoka kwa mpigaji simu na kurudisha data kuhusu waandishi wangapi ni wa jiji na eneo linalolingana. Utaratibu utauliza jedwali la waandishi wa hifadhidata, kama vile Pubs, ili kutekeleza hesabu hii ya waandishi. Ili kupata hifadhidata hizi, kwa mfano, Google hupakua hati ya SQL kutoka kwa ukurasa wa SQL2005.

Katika mfano uliopita, utaratibu unachukua vigezo viwili, ambavyo kwa Kiingereza kitaitwa kwa kawaida @State na @City. Aina ya data inalingana na aina iliyofafanuliwa kwenye programu. Mwili wa utaratibu una vigezo vya ndani @TotalAuthors, na utofauti huu hutumika kuonyesha idadi ya waandishi. Inayofuata inakuja sehemu ya uteuzi wa hoja, ambayo huhesabu kila kitu. Hatimaye, thamani iliyohesabiwa inachapishwa kwenye dirisha la pato kwa kutumia taarifa ya kuchapisha.

Jinsi ya kutekeleza utaratibu uliohifadhiwa katika SQL

Kuna njia mbili za kufanya utaratibu. Njia ya kwanza inaonyesha, kwa kupitisha vigezo, jinsi orodha iliyotenganishwa kwa koma inatekelezwa baada ya jina la utaratibu. Wacha tuseme tuna maadili mawili (kama katika mfano uliopita). Thamani hizi hukusanywa kwa kutumia vigezo vya vigezo vya @State na @City. Katika njia hii ya kupitisha vigezo, utaratibu ni muhimu. Njia hii inaitwa kupitisha hoja ya kawaida. Kwa njia ya pili, vigezo tayari vimepewa moja kwa moja, na katika kesi hii utaratibu sio muhimu. Njia hii ya pili inajulikana kama kupitisha hoja zilizopewa jina.

Utaratibu unaweza kutofautiana kidogo kutoka kwa kawaida. Kila kitu ni sawa na katika mfano uliopita, lakini hapa tu vigezo vinabadilishwa. Hiyo ni, @City inahifadhiwa kwanza, na @State inahifadhiwa karibu na dhamana chaguo-msingi. Kigezo chaguo-msingi kawaida huangaziwa kando. Taratibu zilizohifadhiwa za SQL hupitishwa kama vigezo tu. Katika kesi hii, zinazotolewa, parameter "UT" inachukua nafasi ya thamani ya default "CA". Katika utekelezaji wa pili, thamani moja tu ya hoja hupitishwa kwa kigezo cha @City, na kigezo cha @State kinachukua dhamana ya chaguo-msingi ya "CA". Watengenezaji programu wenye uzoefu wanashauri kwamba vigezo vyote vinapaswa kupatikana hadi mwisho wa orodha ya vigezo kwa chaguo-msingi. Vinginevyo utekelezaji hauwezekani, halafu itabidi ufanye kazi na kupitisha hoja zilizotajwa, ambazo ni ndefu na ngumu zaidi.

4. Taratibu Zilizohifadhiwa za Seva ya SQL: Mbinu za Kurudisha

Kuna njia tatu muhimu za kutuma data kwa utaratibu unaoitwa kuhifadhiwa. Zimeorodheshwa hapa chini:

Rudisha thamani ya utaratibu uliohifadhiwa;

Utaratibu uliohifadhiwa pato la parameter;

Kuchagua moja ya taratibu zilizohifadhiwa.

4.1 Kurudisha thamani kutoka kwa taratibu zilizohifadhiwa za SQL

Katika mbinu hii, utaratibu unapeana thamani kwa utofauti wa ndani na kuirejesha. Utaratibu unaweza pia kurudisha thamani moja kwa moja. Katika mfano ufuatao, tuliunda utaratibu ambao unarudisha jumla ya idadi ya waandishi. Ikiwa unalinganisha utaratibu huu na uliopita, unaweza kuona kwamba thamani ya kuchapisha imebadilishwa.

Sasa hebu tuone jinsi ya kutekeleza utaratibu na kuchapisha thamani yake ya kurudi. Utekelezaji wa utaratibu unahitaji kuweka kutofautiana na uchapishaji, ambao unafanywa baada ya mchakato huu wote. Kumbuka kuwa badala ya taarifa ya kuchapisha, unaweza kutumia kauli ya Chagua, kama vile Chagua @RetValue pamoja na OutputValue.

4.2 Pato la Kigezo cha Utaratibu uliohifadhiwa wa SQL

Thamani ya majibu inaweza kutumika kurudisha kigezo kimoja, ambacho ndicho tulichoona katika mfano uliopita. Kutumia kigezo cha Pato huruhusu utaratibu wa kutuma thamani moja au zaidi tofauti kwa mpigaji simu. Parameta ya pato imeteuliwa kwa usahihi na neno hili muhimu "Pato" wakati wa kuunda utaratibu. Ikiwa parameta imepewa kama pato la pato, basi kitu cha utaratibu lazima kipe thamani yake. Taratibu zilizohifadhiwa za SQL, mifano ambayo inaweza kuonekana hapa chini, katika kesi hii kurudi na maelezo ya muhtasari.

Katika mfano wetu kutakuwa na majina mawili ya pato: @TotalAuthors na @TotalNoContract. Zinaonyeshwa kwenye orodha ya vigezo. Vigezo hivi vinapeana maadili ndani ya mwili wa utaratibu. Tunapotumia vigezo vya pato, mpigaji simu anaweza kuona thamani iliyowekwa ndani ya mwili wa utaratibu.

Pia, katika hali ya awali, vigeu viwili vinatangazwa ili kuona thamani ambazo Seva ya MS SQL ilihifadhi taratibu zilizowekwa katika kigezo cha kutoa. Kisha utaratibu unafanywa kwa kusambaza thamani ya kawaida ya parameter "CA". Vigezo vifuatavyo ni vigezo vya pato na hivyo vigezo vilivyotangazwa vinapitishwa kwa utaratibu maalum. Kumbuka kwamba wakati wa kupitisha vigezo, neno kuu la pato pia limewekwa hapa. Baada ya utaratibu kukamilika kwa mafanikio, maadili yaliyorejeshwa na vigezo vya pato huonyeshwa kwenye sanduku la ujumbe.

4.3 Kuchagua mojawapo ya taratibu zilizohifadhiwa za SQL

Mbinu hii inatumika kurudisha seti ya thamani kama jedwali la data (RecordSet) kwa utaratibu uliohifadhiwa wa kupiga simu. Katika mfano huu, utaratibu uliohifadhiwa wa SQL na vigezo vya @AuthID huuliza jedwali la Waandishi kwa kuchuja rekodi zilizorejeshwa kwa kutumia parameta hiyo ya @AuthId. Taarifa ya Chagua huamua ni nini kinafaa kurejeshwa kwa mpigaji simu wa utaratibu uliohifadhiwa. Wakati utaratibu uliohifadhiwa unatekelezwa, AuthId inarudishwa. Utaratibu huu hapa daima hurejesha rekodi moja tu au hakuna kabisa. Lakini utaratibu uliohifadhiwa hauna vikwazo vyovyote vya kurudisha rekodi zaidi ya moja. Sio kawaida kuona mifano ambapo data inarejeshwa kwa kutumia vigezo vilivyochaguliwa vinavyohusisha vigeu vilivyokokotwa kwa kutoa jumla nyingi.

Hatimaye

Utaratibu uliohifadhiwa ni moduli kubwa ya mpango ambayo inarudi au kupita, na pia huweka vigezo muhimu kwa shukrani kwa programu ya mteja. Kwa sababu utaratibu uliohifadhiwa hujiendesha kwenye seva, kiasi kikubwa cha kubadilishana data kati ya seva na programu ya mteja (kwa baadhi ya mahesabu) inaweza kuepukwa. Hii inakuwezesha kupunguza mzigo kwenye seva za SQL, ambazo, bila shaka, hufaidika wamiliki wao. Moja ya aina ndogo ni taratibu zilizohifadhiwa za T SQL, lakini utafiti wao ni muhimu kwa wale wanaounda hifadhidata za kuvutia. Pia kuna idadi kubwa, hata kubwa ya nuances ambayo inaweza kuwa muhimu wakati wa kusoma taratibu zilizohifadhiwa, lakini hii inahitajika zaidi kwa wale wanaopanga kushiriki katika programu, ikiwa ni pamoja na kitaaluma.

Utaratibu uliohifadhiwa ni aina maalum ya kifurushi cha taarifa ya Transact-SQL iliyoundwa kwa kutumia lugha ya SQL na viendelezi vya kiutaratibu. Tofauti kuu kati ya kifurushi na utaratibu uliohifadhiwa ni kwamba mwisho huhifadhiwa kama kitu cha hifadhidata. Kwa maneno mengine, taratibu zilizohifadhiwa zimehifadhiwa kwenye upande wa seva ili kuboresha utendaji na uthabiti wa kazi zinazoweza kurudiwa.

Injini ya Hifadhidata inasaidia taratibu zilizohifadhiwa na taratibu za mfumo. Taratibu zilizohifadhiwa zinaundwa kwa njia sawa na vitu vingine vyote vya database, i.e. kwa kutumia lugha ya DDL. Taratibu za mfumo hutolewa na Injini ya Hifadhidata na inaweza kutumika kupata na kurekebisha habari katika katalogi ya mfumo.

Unapounda utaratibu uliohifadhiwa, unaweza kufafanua orodha ya hiari ya vigezo. Kwa njia hii, utaratibu utakubali hoja zinazofaa kila wakati unapoitwa. Taratibu zilizohifadhiwa zinaweza kurudisha thamani iliyo na maelezo yaliyofafanuliwa na mtumiaji au, ikitokea hitilafu, ujumbe unaofaa wa hitilafu.

Utaratibu uliohifadhiwa hukusanywa kabla ya kuhifadhiwa kama kitu kwenye hifadhidata. Fomu iliyokusanywa mapema ya utaratibu huhifadhiwa kwenye hifadhidata na hutumiwa kila wakati inapoitwa. Sifa hii ya taratibu zilizohifadhiwa hutoa faida muhimu ya kuondoa (karibu katika hali zote) makusanyo ya utaratibu unaorudiwa na kufikia uboreshaji wa utendaji unaolingana. Mali hii ya taratibu zilizohifadhiwa pia ina athari nzuri kwa kiasi cha data iliyobadilishwa kati ya mfumo wa database na maombi. Hasa, kupiga utaratibu uliohifadhiwa ambao ni ka elfu kadhaa kwa ukubwa unaweza kuhitaji chini ya ka 50. Watumiaji wengi wanapofanya kazi zinazojirudia kwa kutumia taratibu zilizohifadhiwa, athari limbikizi ya akiba hizi inaweza kuwa muhimu sana.

Taratibu zilizohifadhiwa pia zinaweza kutumika kwa madhumuni yafuatayo:

    kuunda logi ya vitendo na meza za hifadhidata.

Kutumia taratibu zilizohifadhiwa hutoa kiwango cha udhibiti wa usalama ambacho huenda zaidi ya usalama unaotolewa kwa kutumia taarifa za GRANT na BATILISHA, ambazo huwapa watumiaji haki tofauti za ufikiaji. Hili linawezekana kwa sababu uidhinishaji wa kutekeleza utaratibu uliohifadhiwa hautegemei idhini ya kurekebisha vitu vilivyomo katika utaratibu uliohifadhiwa, kama ilivyoelezwa katika sehemu inayofuata.

Taratibu zilizohifadhiwa ambazo huunda kumbukumbu za uandishi wa jedwali na/au shughuli za kusoma hutoa chaguo la ziada kwa usalama wa hifadhidata. Kwa kutumia taratibu kama hizi, msimamizi wa hifadhidata anaweza kufuatilia marekebisho yaliyofanywa kwenye hifadhidata na watumiaji au programu za programu.

Kuunda na Kutekeleza Taratibu Zilizohifadhiwa

Taratibu zilizohifadhiwa zinaundwa kwa kutumia taarifa TENGENEZA UTARATIBU, ambayo ina syntax ifuatayo:

TUNDA PROC proc_name [((@param1) type1 [ VARYING] [= default1] )] (, ...) AS bechi | EXTERNAL NAME method_name Kanuni za Sintaksia

Kigezo cha schema_name kinabainisha jina la schema ambalo limepewa na mmiliki wa utaratibu uliohifadhiwa ulioundwa. Kigezo cha proc_name kinabainisha jina la utaratibu uliohifadhiwa. Kigezo cha @param1 ni kigezo cha utaratibu (hoja rasmi) ambayo aina yake ya data imedhamiriwa na kigezo cha type1. Vigezo vya utaratibu ni vya kawaida ndani ya utaratibu, kama vile anuwai za kawaida ziko ndani ya kifurushi. Vigezo vya utaratibu ni maadili ambayo hupitishwa na mpigaji kwa utaratibu wa matumizi ndani yake. Kigezo chaguo-msingi 1 kinabainisha thamani chaguo-msingi ya kigezo cha utaratibu unaolingana. (Thamani chaguo-msingi pia inaweza kuwa NULL.)

Chaguo la OUTPUT inaonyesha kuwa kigezo cha utaratibu ni kigezo cha kurejesha na kinaweza kutumika kurejesha thamani kutoka kwa utaratibu uliohifadhiwa hadi kwa utaratibu wa kupiga simu au mfumo.

Kama ilivyoelezwa hapo awali, fomu iliyokusanywa ya utaratibu huhifadhiwa kwenye hifadhidata na hutumiwa kila wakati inapoitwa. Ikiwa kwa sababu fulani utaratibu uliohifadhiwa unahitaji kukusanywa kila wakati unapoitwa, wakati wa kutangaza utaratibu, tumia NA chaguo la RECOMPILE. Kutumia chaguo la WITH RECOMPILE kunakanusha mojawapo ya manufaa muhimu zaidi ya taratibu zilizohifadhiwa: uboreshaji wa utendaji kutokana na mkusanyiko mmoja. Kwa hivyo, chaguo la WITH RECOMPILE linapaswa kutumika tu wakati vitu vya hifadhidata vinavyotumiwa na utaratibu uliohifadhiwa vinarekebishwa mara kwa mara.

TEKELEZA KAMA kifungu inafafanua muktadha wa usalama ambao utaratibu uliohifadhiwa unapaswa kutekelezwa baada ya kuitwa. Kwa kuweka muktadha huu, Injini ya Hifadhidata inaweza kudhibiti uteuzi wa akaunti za watumiaji ili kuthibitisha ruhusa za ufikiaji wa vitu vinavyorejelewa na utaratibu uliohifadhiwa.

Kwa chaguomsingi, ni wanachama pekee wa jukumu la seva isiyobadilika na db_owner au db_ddladmin majukumu yasiyobadilika ya hifadhidata wanaweza kutumia taarifa ya CREATE PROCEDURE. Lakini washiriki wa majukumu haya wanaweza kutoa haki hii kwa watumiaji wengine kwa kutumia taarifa RUZUKU TUNZA UTARATIBU.

Mfano hapa chini unaonyesha jinsi ya kuunda utaratibu rahisi uliohifadhiwa kufanya kazi na jedwali la Mradi:

TUMIA SampuliDb; NENDA UUNDE UTARATIBU WA Ongezeko la Bajeti (@percent INT=5) HUKU USASISHAJI WA Mradi SET Bajeti = Bajeti + Bajeti * @percent/100;

Kama ilivyoelezwa hapo awali, kutenganisha pakiti mbili, tumia maelekezo GO. Taarifa ya CREATE PROCEDURE haiwezi kuunganishwa na taarifa zingine za Transact-SQL katika kundi moja. Utaratibu uliohifadhiwa wa Ongezeko la Bajeti huongeza bajeti za miradi yote kwa asilimia fulani, ikibainishwa na kigezo cha @percent. Utaratibu pia unafafanua thamani ya asilimia chaguo-msingi (5) ambayo inatumika ikiwa hoja hii haipo wakati utaratibu unaendelea.

Taratibu zilizohifadhiwa zinaweza kufikia meza ambazo hazipo. Kipengele hiki hukuruhusu kutatua msimbo wa utaratibu bila kwanza kuunda jedwali zinazofaa au hata kuunganisha kwenye seva lengwa.

Tofauti na taratibu za msingi zilizohifadhiwa, ambazo huhifadhiwa kila wakati kwenye hifadhidata ya sasa, inawezekana kuunda taratibu zilizohifadhiwa za muda ambazo huhifadhiwa kila wakati kwenye hifadhidata ya mfumo wa muda tempdb. Sababu moja ya kuunda taratibu zilizohifadhiwa kwa muda inaweza kuwa kuepuka kutekeleza mara kwa mara kikundi maalum cha taarifa wakati wa kuunganisha kwenye hifadhidata. Unaweza kuunda taratibu za muda za ndani au kimataifa. Ili kufanya hivyo, jina la utaratibu wa ndani linatajwa na herufi moja # (#proc_name), na jina la utaratibu wa kimataifa linatajwa na herufi mbili (##proc_name).

Utaratibu wa ndani uliohifadhiwa wa muda unaweza tu kutekelezwa na mtumiaji aliyeuunda, na tu wakati umeunganishwa kwenye hifadhidata ambayo iliundwa. Utaratibu wa muda wa kimataifa unaweza kutekelezwa na watumiaji wote, lakini tu hadi uunganisho wa mwisho ambao unatekelezwa (kawaida uunganisho wa muundaji wa utaratibu) utakoma.

Mzunguko wa maisha ya utaratibu uliohifadhiwa una hatua mbili: uumbaji wake na utekelezaji wake. Kila utaratibu huundwa mara moja na kutekelezwa mara nyingi. Utaratibu uliohifadhiwa unafanywa kwa kutumia TIMIZA maagizo mtumiaji ambaye ni mmiliki wa utaratibu au ana haki ya KUTEKELEZA kufikia utaratibu huo. Taarifa ya EXECUTE ina syntax ifuatayo:

[] [@return_status =] (proc_name | @proc_name_var) ([[@parameter1 =] thamani | [@parameter1=] @variable ] | DEFAULT).. Mikataba ya sintaksia

Isipokuwa kigezo cha return_status, vigezo vyote vya taarifa ya EXECUTE vina maana ya kimantiki sawa na vigezo sawa vya taarifa ya CREATE PROCEDURE. Kigezo cha return_status kinabainisha kigezo kamili ambacho huhifadhi hali ya kurudi kwa utaratibu. Thamani inaweza kugawiwa kwa kigezo kwa kutumia kigezo kisichobadilika (thamani) au kigezo cha ndani (@variable). Mpangilio wa maadili ya vigezo vilivyotajwa sio muhimu, lakini maadili ya vigezo visivyo na jina lazima yatolewe kwa utaratibu ambao yamefafanuliwa katika taarifa ya CREATE PROCEDURE.

Ibara ya DEFAULT hutoa thamani chaguo-msingi kwa kigezo cha utaratibu ambacho kilibainishwa katika ufafanuzi wa utaratibu. Wakati utaratibu unatarajia thamani ya kigezo ambacho hakuna thamani chaguo-msingi imefafanuliwa na kigezo kinakosekana au neno kuu la DEFAULT limebainishwa, hitilafu hutokea.

Wakati taarifa ya TEKELEZA ni taarifa ya kwanza ya kundi, neno kuu la EXECUTE linaweza kuachwa. Hata hivyo, ni salama zaidi kujumuisha neno hili katika kila pakiti. Matumizi ya taarifa ya EXECUTE yanaonyeshwa katika mfano hapa chini:

TUMIA SampuliDb; TIMIZA Ongezeko la Bajeti 10;

Taarifa ya EXECUTE katika mfano huu inatekeleza utaratibu uliohifadhiwa wa IncreaseBudget, ambao huongeza bajeti ya miradi yote kwa 10%.

Mfano hapa chini unaonyesha jinsi ya kuunda utaratibu uliohifadhiwa wa kuchakata data katika Jedwali la Mfanyakazi na Kazi_kwenye:

Utaratibu wa mfano wa ModifyEmpId unaonyesha matumizi ya taratibu zilizohifadhiwa kama sehemu ya mchakato wa kudumisha uadilifu wa marejeleo (katika kesi hii kati ya Jedwali la Mfanyakazi na Works_on). Utaratibu sawa uliohifadhiwa unaweza kutumika ndani ya ufafanuzi wa kichochezi, ambao hutoa uadilifu wa marejeleo.

Mfano ufuatao unaonyesha matumizi ya kifungu cha OUTPUT katika utaratibu uliohifadhiwa:

Utaratibu huu uliohifadhiwa unaweza kutekelezwa kwa kutumia maagizo yafuatayo:

TANGAZA @quantityDeleteMfanyakazi INT; TEKELEZA Futa Mfanyakazi @empId=18316, @counter=@quantityDelete PATO la Mfanyakazi; PRINT N"Wafanyakazi waliofutwa: " + convert(nvarchar(30), @quantityDeleteEmployee);

Utaratibu huu huhesabu idadi ya miradi ambayo mfanyakazi aliye na nambari ya wafanyikazi @empId anaifanyia kazi na kukabidhi thamani inayotokana na ©counter parameta. Baada ya safu mlalo zote za nambari fulani ya wafanyikazi kufutwa kutoka kwa Jedwali la Mfanyakazi na Kazi_kwenye, thamani iliyohesabiwa inapewa kigezo cha @quantityDeleteMfanyakazi.

Thamani ya parameta inarejeshwa kwa utaratibu wa kupiga simu tu ikiwa chaguo la OUTPUT limebainishwa. Katika mfano hapo juu, utaratibu wa DeleteEmployee hupitisha parameter ya @counter kwa utaratibu wa kupiga simu, kwa hiyo utaratibu uliohifadhiwa unarudi thamani kwenye mfumo. Kwa hivyo, kigezo cha @counter lazima kibainishwe katika chaguo la OUTPUT wakati wa kutangaza utaratibu na katika taarifa ya EXECUTE wakati wa kuiita.

NA MATOKEO SETS kifungu cha taarifa ya TEKELEZA

Katika SQL Server 2012, kwa taarifa ya EXECUTE, unaingia NA MATOKEO SETS kifungu, kwa njia ambayo, wakati hali fulani zinakabiliwa, unaweza kubadilisha fomu ya seti ya matokeo ya utaratibu uliohifadhiwa.

Mifano miwili ifuatayo itasaidia kufafanua sentensi hii. Mfano wa kwanza ni mfano wa utangulizi unaoonyesha jinsi matokeo yanavyoweza kuonekana wakati kifungu cha WITH RESULTS SETS kimeachwa:

Utaratibu wa EmployeesInDept ni utaratibu rahisi unaoonyesha nambari za wafanyakazi na majina ya mwisho ya wafanyakazi wote wanaofanya kazi katika idara maalum. Nambari ya idara ni parameter ya utaratibu na lazima ielezwe wakati wa kuiita. Utekelezaji wa utaratibu huu hutoa meza yenye safu mbili ambazo vichwa vyake vinafanana na majina ya safu zinazofanana katika jedwali la hifadhidata, i.e. Kitambulisho na Jina la Mwisho. Ili kubadilisha vichwa vya safu wima za matokeo (pamoja na aina ya data zao), SQL Server 2012 hutumia kifungu kipya cha WITH RESULTS SETS. Matumizi ya sentensi hii yanaonyeshwa katika mfano hapa chini:

TUMIA SampuliDb; EXEC EmployeesInDept "d1" YENYE SETI ZA MATOKEO (( INT NOT NULL, [LastName] CHAR(20) NOT NULL));

Matokeo ya kutekeleza utaratibu uliohifadhiwa unaoitwa kwa njia hii itakuwa kama ifuatavyo.

Kama unavyoona, kuendesha utaratibu uliohifadhiwa kwa kutumia kifungu cha WITH RESULT SETS katika taarifa ya KUTEKELEZA hukuruhusu kubadilisha majina na aina za data za safu wima katika seti ya matokeo inayotolewa na utaratibu. Kwa hivyo, utendakazi huu mpya hutoa kubadilika zaidi katika kutekeleza taratibu zilizohifadhiwa na kuweka matokeo yao katika jedwali jipya.

Kubadilisha Muundo wa Taratibu Zilizohifadhiwa

Injini ya Hifadhidata pia inasaidia maagizo BADILISHA UTARATIBU kurekebisha muundo wa taratibu zilizohifadhiwa. Taarifa ya ALTER PROCEDURE kwa kawaida hutumiwa kubadilisha taarifa za Transact-SQL ndani ya utaratibu. Vigezo vyote vya taarifa ya ALTER PROCEDURE vina maana sawa na vigezo sawa vya taarifa ya UTARATIBU WA KUUNDA. Kusudi kuu la kutumia taarifa hii ni kuzuia kubatilisha haki zilizopo za utaratibu uliohifadhiwa.

Injini ya Hifadhidata inasaidia Aina ya data ya CURSOR. Aina hii ya data hutumiwa kutangaza vishale katika taratibu zilizohifadhiwa. Mshale ni muundo wa programu unaotumiwa kuhifadhi matokeo ya hoja (kawaida safu mlalo) na kuruhusu watumiaji kuonyesha matokeo hayo kwa safu mlalo.

Ili kufuta moja au kikundi cha taratibu zilizohifadhiwa, tumia AGIZO LA TARATIBU. Ni mmiliki au wanachama wa db_owner na sysadmin pekee majukumu wanaweza kufuta utaratibu uliohifadhiwa.

Taratibu zilizohifadhiwa na wakati wa kukimbia wa lugha ya kawaida

Seva ya SQL inaauni Muda wa Kutumika kwa Lugha ya Kawaida (CLR), ambayo hukuruhusu kuunda vipengee mbalimbali vya hifadhidata (taratibu zilizohifadhiwa, vitendaji vilivyobainishwa na mtumiaji, vichochezi, mijumuisho iliyobainishwa na mtumiaji, na aina za data maalum) kwa kutumia C# na Visual Basic. CLR pia hukuruhusu kutekeleza vitu hivi kwa kutumia mfumo wa kawaida wa kukimbia.

Muda wa matumizi ya lugha ya kawaida umewezeshwa na kuzimwa kwa kutumia chaguo cl_imewezeshwa utaratibu wa mfumo sp_configure, ambayo inazinduliwa kwa ajili ya utekelezaji kwa maelekezo WEKA UPYA. Mfano ufuatao unaonyesha jinsi unavyoweza kutumia sp_configure utaratibu wa mfumo kuwezesha CLR:

TUMIA SampuliDb; EXEC sp_configure "clr_enabled",1 RECONFIGURE

Ili kuunda, kukusanya na kuhifadhi utaratibu kwa kutumia CLR, lazima ukamilishe mlolongo ufuatao wa hatua kwa mpangilio ulioonyeshwa:

    Unda utaratibu uliohifadhiwa katika C # au Visual Basic, na kisha uundanishe kwa kutumia mkusanyaji unaofaa.

    Kwa kutumia maelekezo TUNZA MKUTANO, unda faili inayoweza kutekelezwa inayolingana.

    Tekeleza utaratibu kwa kutumia taarifa ya KUTEKELEZA.

Kielelezo hapa chini kinaonyesha mchoro wa mchoro wa hatua zilizoainishwa hapo awali. Yafuatayo ni maelezo ya kina zaidi ya mchakato huu.

Kwanza, unda programu inayohitajika katika mazingira ya maendeleo kama vile Visual Studio. Kusanya programu iliyokamilishwa kuwa nambari ya kitu kwa kutumia mkusanyaji wa C # au Visual Basic. Msimbo huu umehifadhiwa katika faili ya dynamic-link maktaba (.dll), ambayo hutumika kama chanzo cha taarifa ya CREATE ASSEMBLY, ambayo huunda msimbo wa kati unaoweza kutekelezeka. Kisha, toa taarifa ya CREATE PROCEDURE ili kuhifadhi msimbo wa utekelezaji kama kitu cha hifadhidata. Hatimaye, endesha utaratibu kwa kutumia taarifa inayojulikana ya EXECUTE.

Mfano hapa chini unaonyesha nambari ya chanzo ya utaratibu uliohifadhiwa katika C #:

Kwa kutumia System.Data.SqlClient; kutumia Microsoft.SqlServer.Server; Public part partial class StoredProcedures ( public static int CountEmployees() ( int rows; SqlConnection connection = new SqlConnection("Context Connection=true"); connection.Open(); SqlCommand cmd = connection.CreateCommand(); cmd.CommandText = "chagua count(*) kama "Idadi ya wafanyakazi" " + "kutoka kwa Mfanyakazi"; rows = (int)cmd.ExecuteScalar(); connection.Close(); rejesha safu mlalo; ) )

Utaratibu huu unatekeleza swala la kuhesabu idadi ya safu katika jedwali la Mfanyakazi. Kutumia maagizo mwanzoni mwa programu taja nafasi za majina zinazohitajika kutekeleza programu. Kutumia maagizo haya hukuruhusu kubainisha majina ya darasa katika msimbo wa chanzo bila kubainisha kwa uwazi nafasi za majina zinazolingana. Ifuatayo, darasa la Utaratibu wa Kuhifadhiwa linafafanuliwa, ambalo SqlProcedure sifa, ambayo hufahamisha mkusanyaji kwamba darasa hili ni utaratibu uliohifadhiwa. Njia ya CountEmployees() imefafanuliwa ndani ya nambari ya darasa. Uunganisho kwa mfumo wa hifadhidata huanzishwa kupitia mfano wa darasa Uunganisho wa Sql. Ili kufungua muunganisho, njia ya Open() ya mfano huu inatumiwa. A CreateCommand() mbinu hukuruhusu kufikia mfano wa darasa SqlCommnd, ambayo amri inayohitajika ya SQL inapitishwa.

Katika kijisehemu cha msimbo kifuatacho:

Cmd.CommandText = "chagua kuhesabu(*) kama "Idadi ya wafanyakazi" " + "kutoka kwa Mfanyakazi";

hutumia taarifa ya CHAGUA kuhesabu idadi ya safu kwenye jedwali la Mfanyakazi na kuonyesha matokeo. Maandishi ya amri yamebainishwa kwa kuweka mali ya CommandText ya kutofautisha kwa cmd kwa mfano uliorejeshwa na njia ya CreateCommand(). Inayofuata inaitwa TekelezaScalar() mbinu Mfano wa SqlCommand. Mbinu hii hurejesha thamani ya scalar ambayo inabadilishwa kuwa aina kamili ya data na kugawiwa kwa utofauti wa safu mlalo.

Sasa unaweza kuunda nambari hii kwa kutumia Visual Studio. Niliongeza darasa hili kwenye mradi unaoitwa CLRStoredProcedures, kwa hivyo Visual Studio itakusanya mkusanyiko wa jina moja na kiendelezi cha *.dll. Mfano hapa chini unaonyesha hatua inayofuata katika kuunda utaratibu uliohifadhiwa: kuunda msimbo unaoweza kutekelezwa. Kabla ya kuendesha msimbo katika mfano huu, unahitaji kujua eneo la faili iliyokusanywa ya dll (kawaida iko kwenye folda ya Debug ya mradi).

TUMIA SampuliDb; NENDA UUNDE TARATIBU ZA ASSEMBLY CLRStored KUTOKA "D:\Projects\CLRStoredProcedures\bin\Debug\CLRStoredProcedures.dll" KWA PERMISSION_SET = SALAMA

Taarifa ya CREATE ASSEMBLY inachukua msimbo unaodhibitiwa kama ingizo na huunda kitu sambamba ambacho unaweza kuunda taratibu zilizohifadhiwa za CLR, vitendaji vilivyobainishwa na mtumiaji na vichochezi. Agizo hili lina syntax ifuatayo:

TUNZA ASSEMBLY jina_name [ AUTHORIZATION owner_name ] KUTOKA (dll_file) Kanuni za Sintaksia

Kigezo cha kusanyiko_jina kinabainisha jina la mkusanyiko. Kipengele cha hiari cha RUHUSA kinabainisha jina la jukumu kama mmiliki wa mkutano huu. Kifungu cha FROM kinabainisha njia ambapo mkusanyiko wa kupakia iko.

KWA kifungu cha PERMISSION_SET ni kifungu muhimu sana cha taarifa ya BUNGE LA BUNGE na lazima kibainishwe kila wakati. Inafafanua seti ya ruhusa iliyotolewa kwa msimbo wa mkusanyiko. Seti ya ruhusa ya SAFE ndiyo yenye vikwazo zaidi. Msimbo wa mkutano ambao una haki hizi hauwezi kufikia rasilimali za mfumo wa nje kama vile faili. Seti ya haki za EXTERNAL_ACCESS huruhusu msimbo wa kuunganisha kufikia rasilimali fulani za mfumo wa nje, wakati seti ya UNSAFE inaruhusu ufikiaji usio na kikomo wa rasilimali ndani na nje ya mfumo wa hifadhidata.

Ili kuhifadhi maelezo ya msimbo wa mkusanyiko, ni lazima mtumiaji aweze kutoa taarifa ya KUTUNGA MKUTANO. Mmiliki wa mkusanyiko ni mtumiaji (au jukumu) kutekeleza maagizo. Unaweza kumfanya mtumiaji mwingine kuwa mmiliki wa mkusanyiko kwa kutumia kifungu cha IDHINISHA cha taarifa ya CREATE SCHEMA.

Injini ya Hifadhidata pia inasaidia taarifa za ALTER ASSEMBLY na DROP ASSEMBLY. Taarifa ya MKUTANO WA BADILISHA inayotumika kusasisha mkusanyiko hadi toleo jipya zaidi. Maagizo haya pia huongeza au kuondoa faili zinazohusiana na mkusanyiko unaolingana. dondosha maagizo ya KUSANYIKO Huondoa mkusanyiko uliobainishwa na faili zake zote zinazohusiana kutoka kwa hifadhidata ya sasa.

Mfano hapa chini unaonyesha jinsi ya kuunda utaratibu uliohifadhiwa kulingana na nambari iliyodhibitiwa uliyotekeleza hapo awali:

TUMIA SampuliDb; NENDA UUNDE UTARATIBU WA WAFANYAKAZI KAMA JINA LA NJE CLRStoredProcedures.StoredProcedures.CountEmployees.

Maagizo ya CREATE PROCEDURE katika mfano hutofautiana na maagizo sawa katika mifano iliyopita kwa kuwa ina JINA LA NJE kigezo. Chaguo hili linabainisha kuwa msimbo unatolewa na wakati wa utekelezaji wa lugha ya kawaida. Jina katika sentensi hii lina sehemu tatu:

assembly_name.class_name.method_name

    assembly_name - inaonyesha jina la mkutano;

    class_name - inaonyesha jina la darasa la jumla;

    method_name - sehemu ya hiari, inabainisha jina la njia ambayo imefafanuliwa ndani ya darasa.

Utekelezaji wa utaratibu wa Wafanyikazi wa Hesabu umeonyeshwa katika mfano hapa chini:

TUMIA SampuliDb; TANGAZA @count INT EXECUTE @count = Hesabu ya Wafanyakazi CHAPA @hesabu -- Rudisha 7

Taarifa ya PRINT inarudisha idadi ya sasa ya safu mlalo kwenye jedwali la Mfanyakazi.

Utaratibu uliohifadhiwa utaratibu uliohifadhiwa) ni kitu kilichopewa jina la programu ya hifadhidata. Seva ya SQL ina aina kadhaa za taratibu zilizohifadhiwa.

Taratibu zilizohifadhiwa za mfumo taratibu zilizohifadhiwa za mfumo) hutolewa na watengenezaji wa DBMS na hutumiwa kufanya vitendo na saraka ya mfumo au kupata habari ya mfumo. Majina yao kawaida huanza na kiambishi awali "sp_". Unaendesha aina zote za taratibu zilizohifadhiwa kwa kutumia amri ya EXECUTE, ambayo inaweza kufupishwa kwa EXEC. Kwa mfano, sp_helplogins utaratibu uliohifadhiwa, unaoendeshwa bila vigezo, hutoa ripoti mbili kuhusu majina ya akaunti (Kiingereza) logins) na watumiaji wanaolingana katika kila hifadhidata (Kiingereza) watumiaji).

EXEC sp_helplogins;

Ili kutoa wazo la vitendo vinavyofanywa kwa kutumia taratibu zilizohifadhiwa za mfumo, Jedwali 10.6 inaonyesha baadhi ya mifano. Kwa jumla, kuna zaidi ya taratibu elfu moja zilizohifadhiwa za mfumo katika Seva ya SQL.

Jedwali 10.6

Mifano ya Utaratibu Uliohifadhiwa wa Mfumo wa Seva ya SQL

Mtumiaji anaweza kuunda taratibu zilizohifadhiwa katika hifadhidata za watumiaji na kwenye hifadhidata ya vitu vya muda. Katika kesi ya mwisho, utaratibu uliohifadhiwa utakuwa ya muda. Kama ilivyo kwa jedwali la muda, jina la utaratibu uliohifadhiwa wa muda lazima lianze na kiambishi awali "#" ikiwa ni utaratibu wa muda uliohifadhiwa wa ndani, au kwa "##" ikiwa ni wa kimataifa. Utaratibu wa muda wa ndani unaweza kutumika tu ndani ya muunganisho ambao uliundwa, wa kimataifa pia unaweza kutumika ndani ya miunganisho mingine.

Vipengee vinavyoweza kupangwa vya Seva ya SQL vinaweza kuundwa kwa kutumia zana za Transact-SQL au mikusanyiko (Kiingereza) mkutano) katika mazingira ya CRL (Common Language Runtime) ya Mfumo wa Microsoft.Net. Mafunzo haya yatashughulikia tu njia ya kwanza.

Ili kuunda taratibu zilizohifadhiwa, tumia taarifa ya CREATE PROCEDURE (inaweza kufupishwa kuwa PROC), muundo ambao umetolewa hapa chini:

TUNZA (UTARATIBU WA KUTARATIBU) proc_name [ ; nambari]

[(aina_ya_data ya gparameta)

[“chaguo-msingi] |

[NA [ ,...n]]

[KWA KUIGA]

AS ([ BEGIN ] sql_statement [;] [ ...n ] [ END ] )

Ikiwa utaratibu uliohifadhiwa (au kuchochea, kazi, mtazamo) umeundwa kwa chaguo la ENCRYPTION, msimbo wake unabadilishwa kwa namna ambayo maandishi hayasomeki. Wakati huo huo, kama ilivyobainishwa katika, algoriti iliyotumiwa ilihamishwa kutoka kwa matoleo ya awali ya Seva ya SQL na haiwezi kuzingatiwa kama kanuni ya kuaminika ya ulinzi - kuna huduma zinazokuruhusu kufanya ubadilishaji wa kinyume haraka.

Chaguo la RECOMPILE linabainisha kuwa mfumo utakusanya maandishi kila wakati utaratibu unapoitwa. Katika hali ya kawaida, utaratibu ulioandaliwa kwenye kukimbia kwanza huhifadhiwa kwenye cache, ambayo inaruhusu kuongezeka kwa utendaji.

EXECUTE AS hubainisha muktadha wa usalama ambamo utaratibu utatekelezwa. Ifuatayo, moja ya maadili f CALLER | NAFSI | MMILIKI | "jina_la_mtumiaji"). CALLER ndio chaguomsingi na inamaanisha kuwa msimbo utatekelezwa katika muktadha wa usalama wa mtumiaji anayeita sehemu hii. Ipasavyo, mtumiaji lazima awe na ruhusa sio tu kwa kitu kinachoweza kupangwa yenyewe, lakini pia kwa vitu vingine vya hifadhidata vilivyoathiriwa nayo. EXECUTE AS SELF inamaanisha kutumia muktadha wa mtumiaji kuunda au kurekebisha kitu kinachoweza kupangwa. OWNER anabainisha kuwa msimbo utatekelezwa katika muktadha wa mmiliki wa sasa wa utaratibu. Ikiwa hakuna mmiliki aliyetajwa kwa ajili yake, basi mmiliki wa schema ambayo ni yake anachukuliwa. EXECUTE AS "user_name" hukuruhusu kubainisha jina la mtumiaji (katika nukuu moja).

Vigezo vinaweza kutajwa kwa utaratibu. Hizi ni vigeu vya ndani vinavyotumika kupitisha maadili kwa utaratibu. Ikiwa parameter inatangazwa kwa neno la msingi OUTPUT (au OUT kwa kifupi), ni thamani ya pato: thamani iliyotolewa kwa utaratibu baada ya kukamilika kwake inaweza kutumika na programu iliyoita utaratibu. Neno kuu la READONLY linamaanisha kuwa thamani ya kigezo haiwezi kubadilishwa ndani ya utaratibu uliohifadhiwa.

Vigezo vinaweza kupewa maadili chaguo-msingi, ambayo yatatumika ikiwa thamani ya parameta haijabainishwa wazi wakati wa kupiga utaratibu. Hebu tuangalie mfano:

UNDA surma ya PROC (@a int, @b int=0,

©matokeo int OUTPUT) AS

WEKA @result=0a+0b

Tumeunda utaratibu na vigezo vitatu, na @b parameter ina thamani ya chaguo-msingi ya =0, ​​na parameter ya @result ni parameter ya pato: inarudi thamani kwa programu ya kupiga simu. Vitendo vilivyofanywa ni rahisi sana - parameta ya pato inapokea thamani ya jumla ya hizo mbili za pembejeo.

Unapofanya kazi katika Studio ya Usimamizi wa Seva ya SQL, utaratibu uliohifadhiwa unaweza kupatikana katika sehemu ya vitu vya hifadhidata vinavyoweza kupangwa (Kiingereza) Programmability) katika kifungu kidogo cha taratibu zilizohifadhiwa (Mchoro 10.2).

Wakati wa kupiga utaratibu, unaweza kutumia vijiti na vidhibiti kama vigezo vya kuingiza. Hebu tuangalie mifano miwili. Katika kwanza, vigezo vya pembejeo vya utaratibu vimeainishwa kwa uwazi kama vidhibiti, na neno kuu la OUTPUT limeainishwa kwa parameta ya pato kwenye simu. Chaguo la pili hutumia thamani ya kigezo kama kigezo cha kwanza cha kuingiza data, na inabainisha kuwa thamani chaguo-msingi inapaswa kutumika kwa parameta ya pili kwa kutumia neno kuu la DEFAULT:

Mchele. 10.2.

TANGAZA @с int;

EXEC muhtasari 10.5,@c PATO;

CHAPISHA 0c; - 15 itaonyeshwa

TANGAZA Gi int = 5;

- unapopiga simu, tumia thamani chaguo-msingi

EXEC summa Gi,DEFAULT , 0c OUTPUT;

CHAPISHA 0c; - 5 itaonyeshwa

Hebu sasa tuchunguze mfano na uchambuzi wa kanuni ya kurudi ambayo utaratibu unaisha. Tuseme tunahitaji kukokotoa vitabu vingapi katika jedwali la Bookl vinavyochapishwa katika kipindi fulani cha miaka. Kwa kuongezea, ikiwa mwaka wa kwanza ni mkubwa kuliko mwaka wa mwisho, utaratibu unarudi "1" na hauhesabu, vinginevyo, tunahesabu idadi ya vitabu na kurudi 0:

UNDA PROC dbo.rownum (0FirsYear int, GLastYear int, 0result int OUTPUT) AS

IF 0FirsYear>0Return YaMwaka Jana 1

WEKA @result= (CHAGUA COUNT(*) KUTOKA dbo.Bookl

WAPI KATI YA 0FirsYear NA 0LastYear);

Hebu tuchunguze lahaja ya kupiga utaratibu huu, ambapo msimbo wa kurudi huhifadhiwa katika kutofautiana kamili 0ret, baada ya hapo thamani yake inachambuliwa (katika kesi hii itakuwa 1). Chaguo za kukokotoa za CAST zinazotumiwa katika taarifa ya PRINT hutumika kubadilisha thamani ya nambari kamili ya Gres kuwa aina ya mfuatano:

TANGAZA 0ret int, Gres int

EXEC Gret = rownum 2004, 2002, Gres OUT;

IF 0ret=l CHAPISHA "Mwaka wa kuanza ni mkubwa kuliko mwaka wa mwisho"

CHAPISHA "Idadi ya vitabu" + CAST(Gres kama varchar(20))

Taratibu zilizohifadhiwa haziwezi tu kusoma data kutoka kwa jedwali, lakini pia kurekebisha data na hata kuunda majedwali na idadi ya vitu vingine vya hifadhidata.

Hata hivyo, huwezi kuunda miundo, vitendaji, vichochezi, taratibu na maoni kutoka kwa utaratibu uliohifadhiwa.

Mfano ufuatao unaonyesha uwezo na masuala haya yote yanayohusiana na upeo wa vitu vya muda. Utaratibu ufuatao uliohifadhiwa hukagua uwepo wa jedwali la muda #TaL2; ikiwa meza hii haipo, inaunda. Baada ya hayo, maadili ya safu mbili huingizwa kwenye jedwali #TaL2, na yaliyomo kwenye jedwali yanaonyeshwa kwa kutumia taarifa ya SELECT:

UNDA PROC My_Procl (@id int, @name varchar(30))

IF OBJECT_ID("tempdb.dbo.#Tab21) NI NULL

WEKA NDANI YA dbo.#Tab2 (kitambulisho, jina)MAADILI (0id,0jina)

CHAGUA * KUTOKA dbo. #Tab2 –№1

Kabla ya kuita utaratibu uliohifadhiwa kwa mara ya kwanza, tutaunda meza ya muda #TaL2 iliyotumiwa ndani yake. Makini na mwendeshaji wa EXEC. Katika mifano ya awali, vigezo vilipitishwa kwa utaratibu "kwa nafasi", lakini katika kesi hii muundo tofauti wa vigezo vya kupitisha hutumiwa - "kwa jina", jina la parameter na thamani yake imeonyeshwa wazi:

UNDA JEDWALI dbo.#Tab2 (id int, name varchar(30));

EXEC My_Procl 0name="lvan", 0id=2;

CHAGUA * KUTOKA dbo.#Tab2; -№2

Katika mfano hapo juu, taarifa ya SELECT itashughulikiwa mara mbili: mara ya kwanza - ndani ya utaratibu, mara ya pili - kutoka kwa kipande cha msimbo wa kupiga simu (iliyowekwa na maoni "No. 2").

Kabla ya simu ya pili kwa utaratibu, tutafuta meza ya muda #TaL2. Kisha meza ya muda ya jina moja itaundwa kutoka kwa utaratibu uliohifadhiwa:

DONDOSHA TABLE dbo.#Tab2;

EXEC My_Procl 0name="Ivan", 0id=2;

CHAGUA * KUTOKA dbo.#Tab2; -№2

Katika kesi hii, taarifa tu ya SELECT iko ndani ya utaratibu (na maoni "Xa 1") itaonyesha data. Utekelezaji SELECT "No. 2" itasababisha kosa, kwa kuwa meza ya muda iliyoundwa katika utaratibu uliohifadhiwa tayari itafutwa kutoka kwa hifadhidata ya tempdb wakati utaratibu unarudi.

Unaweza kuacha utaratibu uliohifadhiwa kwa kutumia taarifa ya DROP PROCEDURE. Muundo wake umewasilishwa hapa chini. Unaweza kufuta taratibu kadhaa zilizohifadhiwa kwa taarifa moja, ukiziorodhesha zikitenganishwa na koma:

DROP (TARATIBU I) ( utaratibu ) [

Kwa mfano, hebu tufute utaratibu wa muhtasari ulioundwa hapo awali:

DROP PROC muhtasari;

Unaweza kufanya mabadiliko kwa utaratibu uliopo (na kwa kweli, kuufafanua upya) kwa kutumia taarifa ya ALTER PROCEDURE (inaruhusiwa).

kifupi PROC). Isipokuwa kwa neno kuu la ALTER, muundo wa taarifa kimsingi ni sawa na ule wa CREATE PROCEDURE. Kwa mfano, hebu tubadilishe utaratibu wa dbo. rownum, ikiiweka kutekeleza katika muktadha wa usalama wa mmiliki:

ALTER PROC dbo.rownum (SFirsYear int,

SLastYear int, Sresult int OUTPUT)

NA TEKELEZA KAMA Mmiliki - chaguo linaloweza kusakinishwa

IF 0FirsYear>0LastYear REJEA 1 NYINGINE ANZA

WEKA 0matokeo= (CHAGUA COUNT(*) KUTOKA dbo.Bookl

WAPI KATI YA SFirsYear NA SLastYear);

Katika baadhi ya matukio, inaweza kuwa muhimu kutoa amri kwa nguvu na kuitekeleza kwenye seva ya hifadhidata. Tatizo hili pia linaweza kutatuliwa kwa kutumia operator wa EXEC. Mfano ulio hapa chini unatoa rekodi kutoka kwa jedwali la Bookl ikiwa sifa ya Mwaka ni sawa na thamani iliyobainishwa na tofauti:

TANGAZA 0у int = 2000;

EXEC ("CHAGUA * KUTOKA dbo.Bookl WAPI = "+@y) ;

Utekelezaji wa maagizo yanayotengenezwa kwa nguvu hutengeneza masharti ya kutekeleza mashambulizi ya kompyuta kama vile "SQL injection" (Kiingereza) sindano ya SQL). Kiini cha shambulio hilo ni kwamba mshambuliaji anaingiza msimbo wake wa SQL kwenye hoja inayozalishwa kwa nguvu. Hii kwa kawaida hutokea wakati vigezo vinavyobadilishwa vinachukuliwa kutoka kwa matokeo ya ingizo la mtumiaji.

Wacha tubadilishe mfano uliopita kidogo:

TANGAZA 0у varchar(100);

WEKA 0у="2ООО"; - tulipokea hii kutoka kwa mtumiaji

Ikiwa tunadhania kwamba tulipokea thamani ya kamba iliyotolewa katika taarifa ya SET kutoka kwa mtumiaji (bila kujali jinsi, kwa mfano, kupitia programu ya wavuti), basi mfano unaonyesha tabia ya "kawaida" ya msimbo wetu.

TANGAZA 0у varchar(100);

WEKA 0у="2000; FUTA KUTOKA dbo.Book2"; - sindano

EXEC("CHAGUA * KUTOKA dbo.Book2 WHERE ="+0y);

Katika hali hiyo, inashauriwa, ikiwa inawezekana, kutumia utaratibu uliohifadhiwa wa mfumo sp_executcsql, ambayo inakuwezesha kudhibiti aina ya vigezo, ambayo ni mojawapo ya vikwazo vya sindano za SQL. Bila kuzingatia muundo wake kwa undani, wacha tuangalie mfano sawa na ule uliowasilishwa hapo awali:

TIMIZA sp_executesql

N"CHAGUA * KUTOKA dbo.Bookl WHERE =0y",

Hii inabainisha kwa uwazi aina ya kigezo kinachotumika katika hoja, na Seva ya SQL itaidhibiti wakati wa utekelezaji. Herufi "N" kabla ya alama za nukuu inaonyesha kuwa hii ni Unicode mara kwa mara, kama inavyotakiwa na utaratibu. Parameter inaweza kupewa sio tu thamani ya mara kwa mara, lakini pia thamani ya kutofautiana mwingine.

Lengo la kazi- jifunze kuunda na kutumia taratibu zilizohifadhiwa kwenye seva ya hifadhidata.

1. Fanya kazi kupitia mifano yote, chambua matokeo ya utekelezaji wao katika shirika la SQL Server Management Studio. Kuangalia uwepo wa taratibu zilizoundwa katika hifadhidata ya sasa.

2. Kukamilisha mifano na kazi zote wakati wa kazi ya maabara.

3. Kukamilisha kazi za kibinafsi kulingana na chaguzi.

Maelezo ya kufanya kazi

Ili kujua utayarishaji wa utaratibu uliohifadhiwa, tunatumia hifadhidata ya mfano inayoitwa DB_Vitabu, ambayo iliundwa katika kazi ya maabara No. Wakati wa kukamilisha mifano na kazi, makini na mawasiliano ya majina ya hifadhidata, meza na vitu vingine vya mradi.

Taratibu zilizohifadhiwa ni seti ya amri zinazojumuisha kauli moja au zaidi za SQL au vitendaji na kuhifadhiwa katika hifadhidata katika fomu iliyokusanywa.

Aina za Taratibu Zilizohifadhiwa

Taratibu zilizohifadhiwa za mfumo zimeundwa kufanya vitendo mbalimbali vya utawala. Karibu shughuli zote za usimamizi wa seva zinafanywa kwa msaada wao. Tunaweza kusema kwamba taratibu zilizohifadhiwa za mfumo ni interface ambayo hutoa kazi na meza za mfumo. Taratibu zilizohifadhiwa za mfumo hutanguliwa na sp_, huhifadhiwa katika hifadhidata ya mfumo, na zinaweza kuitwa katika muktadha wa hifadhidata nyingine yoyote.

Taratibu zilizohifadhiwa maalum hutekeleza vitendo fulani. Taratibu zilizohifadhiwa ni kitu kamili cha hifadhidata. Matokeo yake, kila utaratibu uliohifadhiwa iko kwenye hifadhidata maalum, ambapo inatekelezwa.

Taratibu za kuhifadhiwa kwa muda zipo kwa muda mfupi tu, baada ya hapo zinaharibiwa moja kwa moja na seva. Wamegawanywa katika mitaa na kimataifa. Taratibu za kuhifadhiwa kwa muda za mitaa zinaweza tu kuitwa kutoka kwa uhusiano ambao zinaundwa. Wakati wa kuunda utaratibu kama huo, lazima upe jina linaloanza na herufi # moja. Kama vitu vyote vya muda, taratibu zilizohifadhiwa za aina hii hufutwa kiotomatiki mtumiaji anapokata muunganisho au seva inawashwa upya au kusimamishwa. Taratibu za kimataifa zilizohifadhiwa kwa muda zinapatikana kwa muunganisho wowote kutoka kwa seva ambayo ina utaratibu sawa. Ili kuifafanua, ipe tu jina linaloanza na herufi ##. Taratibu hizi zinafutwa wakati seva imeanzishwa upya au kusimamishwa, au wakati uunganisho katika muktadha ambao uliundwa umefungwa.

Kuunda, kurekebisha taratibu zilizohifadhiwa

Kuunda utaratibu uliohifadhiwa unahusisha kutatua matatizo yafuatayo: kupanga haki za kufikia. Unapounda utaratibu uliohifadhiwa, fahamu kuwa itakuwa na haki sawa za ufikiaji wa vitu vya hifadhidata kama mtumiaji aliyeiunda; kufafanua vigezo vya utaratibu uliohifadhiwa, taratibu zilizohifadhiwa zinaweza kuwa na vigezo vya pembejeo na pato; uundaji wa kanuni za utaratibu zilizohifadhiwa. Msimbo wa utaratibu unaweza kuwa na mlolongo wa amri zozote za SQL, ikijumuisha simu kwa taratibu zingine zilizohifadhiwa.

Sintaksia ya opereta ya kuunda mpya au kubadilisha utaratibu uliopo uliohifadhiwa katika nukuu ya Seva ya MS SQL:

( CREATE | ALTER ) PROC[ EDURE] utaratibu_jina [ ;namba] [ ( @parameter_name data_type ) [ INAYOTOFAUTIANA ] [ = CHAGUO CHAGUO ] [ OUTPUT ] ] [ ,... n] [ PAMOJA NA ( RECOMPILE | USIMBO | RECOMPILE, HANGA) ] [ FOR REPLICATION] AS sql_statement [ ... n]

Hebu tuangalie vigezo vya amri hii.

Kwa kutumia viambishi awali sp_, #, ##, utaratibu ulioundwa unaweza kufafanuliwa kama mfumo au wa muda. Kama unaweza kuona kutoka kwa syntax ya amri, hairuhusiwi kutaja jina la mmiliki ambaye atamiliki utaratibu ulioundwa, na pia jina la hifadhidata ambayo inapaswa kupatikana. Kwa hivyo, ili kuweka utaratibu uliohifadhiwa unaounda katika hifadhidata maalum, lazima utoe amri ya CREATE PROCEDURE katika muktadha wa hifadhidata hiyo. Wakati wa kupata vitu vya database sawa kutoka kwa mwili wa utaratibu uliohifadhiwa, unaweza kutumia majina yaliyofupishwa, yaani, bila kutaja jina la database. Unapohitaji kufikia vitu vilivyo katika hifadhidata nyingine, kubainisha jina la hifadhidata ni lazima.

Ili kupitisha data ya ingizo na pato, majina ya vigezo katika utaratibu uliohifadhiwa unaounda lazima yaanze na @ herufi. Unaweza kutaja vigezo vingi katika utaratibu mmoja uliohifadhiwa, ukitenganishwa na koma. Mwili wa utaratibu haupaswi kutumia vigezo vya ndani ambavyo majina yao yanafanana na majina ya vigezo vya utaratibu huu. Aina yoyote ya data ya SQL, ikiwa ni pamoja na iliyofafanuliwa na mtumiaji, inafaa kwa ajili ya kubainisha aina ya data ya vigezo vya utaratibu vilivyohifadhiwa. Walakini, aina ya data ya CURSOR inaweza kutumika tu kama kigezo cha pato cha utaratibu uliohifadhiwa, i.e. kubainisha neno kuu la OUTPUT.

Uwepo wa neno kuu la OUTPUT inamaanisha kuwa parameter inayofanana inalenga kurejesha data kutoka kwa utaratibu uliohifadhiwa. Walakini, hii haimaanishi kuwa parameta haifai kwa kupitisha maadili kwa utaratibu uliohifadhiwa. Kubainisha neno kuu la OUTPUT huelekeza seva, wakati wa kuondoka kwa utaratibu uliohifadhiwa, kugawa thamani ya sasa ya kigezo kwa kigezo cha ndani ambacho kilibainishwa kama thamani ya kigezo wakati utaratibu ulipoitwa. Kumbuka kwamba wakati wa kubainisha neno kuu la OUTPUT, thamani ya parameter inayofanana wakati wa kupiga utaratibu inaweza tu kuweka kwa kutumia kutofautiana kwa ndani. Semi au vifungu vyovyote vinavyoruhusiwa kwa vigezo vya kawaida haviruhusiwi. Neno kuu la VARYING linatumika pamoja na parameta ya OUTPUT, ambayo ni ya aina ya CURSOR. Inabainisha kuwa matokeo yatakuwa seti ya matokeo.

Neno kuu la DEFAULT linawakilisha thamani ambayo parameta inayolingana itachukua kwa chaguo-msingi. Kwa hivyo, unapoita utaratibu, sio lazima ueleze wazi thamani ya parameter inayolingana.

Kwa kuwa seva huhifadhi mpango wa utekelezaji wa hoja na nambari iliyokusanywa, wakati mwingine utaratibu unaitwa, maadili yaliyotengenezwa tayari yatatumika. Hata hivyo, katika baadhi ya matukio bado ni muhimu kurejesha kanuni ya utaratibu. Kubainisha neno kuu la RECOMPILE huelekeza mfumo kuunda mpango wa utekelezaji wa utaratibu uliohifadhiwa kila wakati unapoitwa.

Kigezo cha FOR REPLICATION kinahitajika wakati wa kunakili data na kujumuisha utaratibu uliowekwa uliohifadhiwa kama makala katika chapisho. Neno muhimu la ENCRYPTION huelekeza seva kusimba msimbo wa utaratibu uliohifadhiwa, ambao unaweza kutoa ulinzi dhidi ya matumizi ya kanuni za umiliki zinazotekeleza utaratibu uliohifadhiwa. Neno kuu la AS limewekwa mwanzoni mwa mwili wa utaratibu uliohifadhiwa yenyewe. Chombo cha utaratibu kinaweza kutumia takriban amri zote za SQL, kutangaza miamala, kuweka kufuli, na kuita taratibu zingine zilizohifadhiwa. Unaweza kutoka kwa utaratibu uliohifadhiwa kwa kutumia amri ya RETURN.

Kuondoa Utaratibu uliohifadhiwa

ONDOA UTARATIBU (taratibu_jina) [,...n]

Utekelezaji wa Utaratibu uliohifadhiwa

Ili kutekeleza utaratibu uliohifadhiwa, tumia amri: [ [ EXEC [ UTE] procedure_name [ ;number] [ [ @parameter_name= ] ( thamani | @variable_name) [ OUTPUT ] | [ DEFAULT ] ] [ ,... n]

Ikiwa simu ya utaratibu iliyohifadhiwa sio amri pekee katika kundi, basi amri ya EXECUTE inahitajika. Aidha, amri hii inahitajika kuita utaratibu kutoka kwa mwili wa utaratibu mwingine au trigger.

Matumizi ya neno kuu la OUTPUT wakati wa kupiga utaratibu inaruhusiwa tu kwa vigezo ambavyo vilitangazwa wakati utaratibu uliundwa na neno kuu la OUTPUT.

Wakati neno kuu la DEFAULT limebainishwa kwa kigezo wakati wa kupiga utaratibu, thamani ya chaguo-msingi itatumika. Kwa kawaida, neno lililobainishwa DEFAULT linaruhusiwa tu kwa vigezo ambavyo thamani ya chaguo-msingi imefafanuliwa.

Syntax ya amri ya EXECUTE inaonyesha kwamba majina ya vigezo yanaweza kuachwa wakati wa kupiga utaratibu. Walakini, katika kesi hii, mtumiaji lazima aeleze maadili ya vigezo kwa mpangilio sawa ambao waliorodheshwa wakati wa kuunda utaratibu. Huwezi kugawa thamani chaguo-msingi kwa kigezo kwa kuiacha tu wakati wa kuhesabu. Ikiwa unataka kuacha vigezo ambavyo vina thamani ya msingi, inatosha kutaja kwa uwazi majina ya vigezo wakati wa kupiga utaratibu uliohifadhiwa. Kwa kuongeza, kwa njia hii unaweza kuorodhesha vigezo na maadili yao kwa mpangilio wowote.

Kumbuka kuwa wakati wa kupiga utaratibu, majina ya parameta yaliyo na maadili, au maadili tu bila jina la parameta yamebainishwa. Kuchanganya kwao hairuhusiwi.

Kutumia RETURN katika utaratibu uliohifadhiwa

Inakuruhusu kutoka kwa utaratibu wakati wowote kulingana na hali maalum, na pia hukuruhusu kufikisha matokeo ya utaratibu kama nambari, ambayo unaweza kuhukumu ubora na usahihi wa utaratibu. Mfano wa kuunda utaratibu bila vigezo:

CREATE PROCEDURE Hesabu_Vitabu AS SELECT COUNT (Code_book) FROM Books GO

Zoezi 1.

EXEC Hesabu_Vitabu

Angalia matokeo.

Mfano wa kuunda utaratibu na parameta ya pembejeo:

TENGENEZA UTARATIBU Hesabu_Vitabu_Kurasa @Hesabu_kurasa AS INT AS COUNT CHAGUA (Kitabu_cha_Msimbo) KUTOKA KATIKA Vitabu WAPI Kurasa>= @Count_pages GO

Jukumu la 2. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri

EXEC Hesabu_Vitabu_Kurasa 100

Angalia matokeo.

Mfano wa kuunda utaratibu na vigezo vya pembejeo:

TENGENEZA UTARATIBU Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) AS CHAGUA COUNT (Code_book) KUTOKA KWA Vitabu WAPI Kurasa>= @Count_pages NA Title_book KAMA @Title GO

Jukumu la 3. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri

EXEC Count_Books_Title 100 , "P%"

Angalia matokeo.

Mfano wa kuunda utaratibu na vigezo vya pembejeo na parameta ya pato:

TENGENEZA UTARATIBU Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo INT OUTPUT AS SELECT @Itogo = COUNT (Code_book) KUTOKA KWA Vitabu WAPI Pages>= @Count_pages NA Title_book LIKE @Title GO

Jukumu la 4. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Endesha kwa kutumia seti ya amri:

Sql> Tangaza @q Kama int EXEC Count_Books_Itogo 100, "P%", @q output chagua @q

Angalia matokeo.

Mfano wa kuunda utaratibu na vigezo vya pembejeo na RETURN:

TUNZA UTARATIBU jina la kuangalia @param INT AS IF (CHAGUA Jina_mwandishi KUTOKA kwa waandishi WHERE Code_author = @param) = "Pushkin A.S." RUDISHA MWINGINE 1 2

Jukumu la 5. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri:

TANGAZA @return_status INT EXEC @return_status = checkname 1 CHAGUA "Return Status" = @return_status

Mfano wa kuunda utaratibu bila vigezo ili kuongeza thamani ya sehemu muhimu kwenye jedwali la Ununuzi kwa mara 2:

UNDA PROC update_proc AS USASISHA Ununuzi SET Code_purchase = Code_purchase* 2

Jukumu la 6. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri

EXEC sasisho_taratibu

Mfano wa utaratibu na kigezo cha pembejeo kupata habari zote kuhusu mwandishi mahususi:

UNDA PROC select_author @k CHAR (30 ) AS CHAGUA * KUTOKA KWA Waandishi WAPI name_author= @k

Jukumu la 7.

EXEC select_author "Pushkin A.S." au chagua_mwandishi @k= "Pushkin A.S." au EXEC select_author @k= "Pushkin A.S."

Mfano wa kuunda utaratibu na kigezo cha ingizo na thamani chaguo-msingi ya kuongeza thamani ya sehemu muhimu katika jedwali la Ununuzi kwa idadi maalum ya nyakati (mara 2 kwa chaguo-msingi):

UNDA PROC update_proc @p INT = 2 AS UPDATE Ununuzi SET Code_purchase = Code_purchase * @p

Utaratibu haurudishi data yoyote.

Jukumu la 8. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri:

EXEC update_proc 4 au EXEC update_proc @p = 4 au EXEC update_proc --thamani chaguo-msingi itatumika.

Mfano wa kuunda utaratibu na vigezo vya pembejeo na pato. Unda utaratibu wa kuamua idadi ya maagizo yaliyokamilishwa katika kipindi maalum:

UNDA PROC count_purchases @d1 SMALLDATETIME, @d2 SMALLDATETIME, @c INT OUTPUT AS CHAGUA @c= COUNT (Code_purchase) KUTOKA KWA Ununuzi AMBAPO Tarehe_agizo KATI YA @d1 NA @d2 SET @c = ISNULL(@c, 0 )

Kazi ya 9. Unda utaratibu huu katika sehemu ya Taratibu Zilizohifadhiwa za hifadhidata ya DB_Books ukitumia matumizi ya Studio ya Usimamizi ya seva ya SQL. Iendesha kwa kutumia amri:

TANGAZA @c2 INT EXEC count_purchases '01-jun- 2006 ', '01- jul- 2006 ', @c2 OUTPUT CHAGUA @c2

Chaguzi za kazi za kazi ya maabara No

Masharti ya jumla. Katika matumizi ya Studio ya Usimamizi wa Seva ya SQL, unda ukurasa mpya wa msimbo (kitufe cha "Unda Hoja"). Fanya hifadhidata iliyoundwa ya DB_Books ifanye kazi kwa utaratibu kwa kutumia taarifa ya Matumizi. Unda taratibu zilizohifadhiwa kwa kutumia Unda taarifa za utaratibu, na uelezee majina ya taratibu hizo mwenyewe. Kila utaratibu utatekeleza swali moja la SQL ambalo lilitekelezwa katika maabara ya pili. Zaidi ya hayo, msimbo wa SQL wa maswali unahitaji kubadilishwa ili waweze kusambaza maadili ya sehemu zinazotumiwa kutafuta.

Kwa mfano, kazi ya awali na ombi katika kazi ya maabara No.

/*Chagua kutoka kwenye saraka ya wasambazaji (Jedwali la kuwasilisha) majina ya makampuni, nambari za simu na INN (sehemu za Jina_kampuni, Simu na INN), ambazo jina la kampuni (Jina_la_kampuni) ni "OJSC MIR".

CHAGUA Jina_kampuni, Simu, INN KUTOKA KWA Usafirishaji WHERE Name_company = "OJSC MIR"

*/ -Katika kazi hii utaratibu ufuatao utaundwa:

CREATE PROC select_name_company @comp CHAR (30 ) AS CHAGUA Name_company, Simu, INN KUTOKA KWA Usafirishaji WHERE Name_company = @comp

- Ili kuanza utaratibu, tumia amri:

EXEC select_name_company "JSC MIR"

Orodha ya kazi

Unda programu mpya katika Studio ya Usimamizi wa Seva ya SQL. Fanya kazi kwa utaratibu hifadhidata ya kibinafsi iliyoundwa katika kazi ya maabara Na. 1 kwa kutumia taarifa ya Matumizi. Unda taratibu zilizohifadhiwa kwa kutumia Unda taarifa za utaratibu, na uelezee majina ya taratibu hizo mwenyewe. Kila utaratibu utafanya swali moja la SQL, ambalo linawasilishwa kwa namna ya kazi tofauti kulingana na chaguo.

Chaguo 1

1. Onyesha orodha ya wafanyikazi ambao wana angalau mtoto mmoja.

2. Onyesha orodha ya watoto waliopokea zawadi katika kipindi maalum.

3. Onyesha orodha ya wazazi ambao wana watoto wadogo.

4. Onyesha maelezo kuhusu zawadi yenye thamani kubwa kuliko nambari iliyobainishwa, iliyopangwa kulingana na tarehe.

Chaguo la 2

1. Onyesha orodha ya vifaa vilivyo na aina maalum.

2. Onyesha idadi ya vifaa vilivyotengenezwa na gharama ya jumla ya ukarabati kutoka kwa fundi aliyetajwa.

3. Onyesha orodha ya wamiliki wa kifaa na idadi ya maombi yao, iliyopangwa kwa idadi ya maombi kwa utaratibu wa kushuka.

4. Onyesha taarifa kuhusu mafundi walio na cheo kikubwa kuliko nambari maalum au walio na tarehe ya kuajiriwa chini ya tarehe iliyotajwa.

Chaguo la 3

2. Onyesha orodha ya misimbo ya mauzo ambayo iliuza maua kwa kiasi kikubwa kuliko nambari maalum.

3. Onyesha tarehe ya mauzo, kiasi, muuzaji na maua kulingana na msimbo maalum wa uuzaji.

4. Onyesha orodha ya maua na aina mbalimbali za maua yenye urefu zaidi ya nambari iliyotajwa au kuchanua.

Chaguo la 4

1. Onyesha orodha ya dawa zenye dalili maalum za matumizi.

2. Onyesha orodha ya tarehe za kujifungua ambazo zaidi ya nambari maalum ya dawa ya jina moja iliuzwa.

3. Onyesha tarehe ya kujifungua, kiasi, jina kamili la meneja kutoka kwa msambazaji na jina la dawa kwa msimbo wa risiti kubwa kuliko nambari iliyotajwa.

Chaguo la 5

2. Onyesha orodha ya vifaa vilivyoondolewa kwa sababu maalum.

3. Onyesha tarehe ya kupokelewa, jina la kifaa, jina kamili la mtu anayehusika na tarehe ya kufutwa kwa kifaa kilichofutwa katika muda uliowekwa.

4. Onyesha orodha ya vifaa vilivyo na aina maalum au tarehe ya kupokea iliyo kubwa kuliko thamani fulani

Chaguo 6

1. Onyesha orodha ya sahani zilizo na uzito mkubwa kuliko nambari maalum.

2. Onyesha orodha ya bidhaa ambazo majina yake yana kipande cha maneno kilichobainishwa.

3. Onyesha kiasi cha bidhaa, jina la sahani, jina la bidhaa na msimbo wa sahani kutoka kwa thamani maalum ya awali hadi thamani fulani ya mwisho.

4. Onyesha utaratibu wa utayarishaji wa sahani na jina la sahani yenye kiasi cha wanga zaidi ya thamani fulani au kiasi cha kalori zaidi ya thamani maalum.

Chaguo la 7

1. Onyesha orodha ya wafanyikazi walio na nafasi maalum.

3. Onyesha tarehe ya usajili, aina ya hati, jina kamili la msajili na jina la shirika kwa hati zilizosajiliwa katika kipindi maalum.

4. Onyesha orodha ya hati zilizosajiliwa zilizo na aina mahususi ya hati au yenye tarehe ya usajili iliyo kubwa kuliko thamani iliyobainishwa.

Chaguo la 8

1. Onyesha orodha ya wafanyikazi yenye sababu maalum ya kufukuzwa kazi.

3. Onyesha tarehe ya usajili, sababu ya kufukuzwa, jina kamili la mfanyakazi kwa hati zilizosajiliwa wakati wa kipindi maalum.

Chaguo la 9

1. Onyesha orodha ya wafanyikazi waliochukua likizo ya aina maalum.

2. Onyesha orodha ya hati zilizo na tarehe ya usajili katika kipindi maalum.

3. Onyesha tarehe ya usajili, aina ya likizo, jina kamili la mfanyakazi kwa hati zilizosajiliwa wakati wa kipindi maalum.

4. Onyesha orodha ya hati zilizosajiliwa na msimbo wa hati katika safu maalum.

Chaguo 10

1. Onyesha orodha ya wafanyikazi walio na nafasi maalum.

2. Onyesha orodha ya hati ambazo maudhui yake yana sehemu maalum ya maneno.

3. Onyesha tarehe ya usajili, aina ya hati, jina kamili la mtumaji na jina la shirika kwa hati zilizosajiliwa katika kipindi maalum.

4. Onyesha orodha ya hati zilizosajiliwa na aina maalum ya hati au kwa msimbo wa hati chini ya thamani fulani.

Chaguo 11

1. Onyesha orodha ya wafanyikazi waliopewa nafasi maalum.

2. Onyesha orodha ya hati zilizo na tarehe ya usajili katika kipindi maalum.

3. Onyesha tarehe ya usajili, nafasi, jina kamili la mfanyakazi kwa hati zilizosajiliwa wakati wa kipindi maalum.

4. Onyesha orodha ya hati zilizosajiliwa na msimbo wa hati katika safu maalum.

Chaguo 12

3. Onyesha orodha ya watu waliokodisha vifaa na idadi ya maombi yao, iliyopangwa kwa idadi ya maombi kwa utaratibu wa kushuka.

Chaguo 13

1. Onyesha orodha ya vifaa na aina maalum. 2. Onyesha orodha ya vifaa ambavyo vimefutwa na mfanyakazi mahususi.

3. Onyesha kiasi cha vifaa vilivyoondolewa, vilivyowekwa kwa aina ya vifaa.

4. Onyesha taarifa kuhusu wafanyakazi walio na tarehe ya kuajiri iliyo kubwa kuliko tarehe fulani.

Chaguo 14

1. Chapisha orodha ya maua yenye aina maalum ya jani.

2. Onyesha orodha ya misimbo ya risiti ambayo maua yaliuzwa kwa kiasi kikubwa kuliko thamani fulani.

3. Onyesha tarehe ya kupokelewa, kiasi, jina la msambazaji na rangi kwa msimbo maalum wa msambazaji.

4. Onyesha orodha ya maua na aina mbalimbali za maua yenye urefu zaidi ya idadi fulani au kuchanua.

Chaguo 15

1. Onyesha orodha ya wateja walioingia kwenye vyumba katika kipindi kilichobainishwa.

2. Onyesha jumla ya kiasi cha malipo kwa vyumba kwa kila mteja.

3. Onyesha tarehe ya kuwasili, aina ya chumba, jina kamili la wateja waliosajiliwa katika kipindi maalum.

4. Onyesha orodha ya wateja waliosajiliwa katika vyumba vya aina fulani.

Chaguo 16

1. Onyesha orodha ya vifaa na aina maalum.

2. Onyesha orodha ya vifaa ambavyo vilikodiwa na mteja mahususi.

3. Onyesha orodha ya watu waliokodisha vifaa na idadi ya maombi yao, iliyopangwa kwa idadi ya maombi kwa utaratibu wa kushuka.

4. Onyesha maelezo kuhusu wateja yaliyopangwa kulingana na anwani.

Chaguo 17

1. Onyesha orodha ya vitu vya thamani iliyo na bei ya ununuzi kubwa kuliko thamani fulani au kipindi cha udhamini kilicho zaidi ya nambari maalum.

2. Onyesha orodha ya maeneo ya mali ambayo majina yake yana neno maalum.

3. Onyesha jumla ya thamani ya thamani na msimbo katika safu maalum.

4. Onyesha orodha ya watu wanaowajibika kifedha na tarehe ya kuajiriwa katika safu maalum.

Chaguo 18

1. Onyesha orodha ya matengenezo yaliyofanywa na fundi maalum.

2. Onyesha orodha ya hatua za kazi zilizojumuishwa katika kazi ambayo kichwa chake kina neno maalum.

3. Onyesha jumla ya gharama ya hatua za kazi za ukarabati kwa kazi na msimbo katika safu maalum.

4. Onyesha orodha ya wasimamizi walio na tarehe ya kuajiriwa katika safu maalum.

Chaguo 19

1. Onyesha orodha ya dawa yenye dalili maalum.

2. Onyesha orodha ya nambari za risiti ambazo zaidi ya idadi fulani ya dawa ziliuzwa.

3. Onyesha tarehe ya mauzo, kiasi, jina la mtunza fedha na dawa kwenye risiti pamoja na nambari iliyobainishwa.

4. Onyesha orodha ya dawa na vipimo vya kipimo cha dawa zilizo na kiasi kwenye kifurushi kikubwa kuliko nambari maalum au msimbo wa dawa chini ya thamani fulani.

Chaguo 20

1. Onyesha orodha ya wafanyikazi walio na nafasi maalum.

2. Onyesha orodha ya hati ambazo maudhui yake yana sehemu maalum ya maneno.

3. Onyesha tarehe ya usajili, aina ya hati, jina kamili la mtekelezaji na ukweli wa utekelezaji wa hati zilizosajiliwa wakati wa kipindi maalum.

4. Onyesha orodha ya hati zilizosajiliwa na aina maalum ya hati au msimbo wa hati katika safu fulani.