Taratibu zilizohifadhiwa za seva ya sql. Taratibu Zilizohifadhiwa za SQL: Uundaji na Matumizi. Haki za kufanya taratibu

KATIKA Microsoft SQL Seva kutekeleza na kubinafsisha algorithms yako mwenyewe ( mahesabu) unaweza kutumia taratibu zilizohifadhiwa, kwa hiyo leo tutazungumzia jinsi zimeundwa, kubadilishwa na kufutwa.

Lakini kwanza, nadharia kidogo ili uelewe ni taratibu gani zilizohifadhiwa na kwa nini zinahitajika katika T-SQL.

Kumbuka! Ninapendekeza yafuatayo kwa waandaaji wa programu wanaoanza: vifaa muhimu juu ya mada ya T-SQL:

  • Kwa utafiti wa kina zaidi Lugha ya T-SQL Ninapendekeza pia kusoma kitabu - Njia ya T-SQL Programmer. Mafunzo ya lugha ya Transact-SQL.

Je! ni taratibu gani zilizohifadhiwa katika T-SQL?

Taratibu zilizohifadhiwa- hizi ni vitu vya hifadhidata ambavyo vina algorithm katika fomu Seti ya SQL maelekezo. Kwa maneno mengine, tunaweza kusema kwamba taratibu zilizohifadhiwa ni programu ndani ya hifadhidata. Taratibu zilizohifadhiwa hutumiwa kuhifadhi nambari inayoweza kutumika tena kwenye seva, kwa mfano, uliandika algoriti, hesabu ya mfuatano au taarifa ya hatua nyingi ya SQL, na ili usitekeleze maagizo yote yaliyojumuishwa ndani yake kila wakati. algorithm hii Unaweza kuiumbiza kama utaratibu uliohifadhiwa. Wakati huo huo, unapounda utaratibu wa SQL, seva inakusanya msimbo, na kisha, kila wakati unapoendesha utaratibu huu wa SQL, seva haitairudisha.

Ili kutekeleza utaratibu uliohifadhiwa katika Seva ya SQL, lazima uandike amri ya EXECUTE kabla ya jina lake; inawezekana pia kufupisha amri hii kama EXEC. Kuita utaratibu uliohifadhiwa katika taarifa ya SELECT, kwa mfano, kama kazi haitafanya kazi tena, i.e. taratibu zinazinduliwa tofauti.

Katika taratibu zilizohifadhiwa, tofauti na kazi, tayari inawezekana kufanya shughuli za kurekebisha data kama vile: UNSERT, UPDATE, DELETE. Unaweza pia kutumia katika taratibu Taarifa za SQL karibu aina yoyote, kwa mfano, CREATE TABLE kuunda meza au EXECUTE, i.e. kuita taratibu nyingine. Isipokuwa ni aina kadhaa za maagizo, kama vile: kuunda au kubadilisha vitendaji, maoni, vichochezi, kuunda schema na maagizo mengine kadhaa sawa, kwa mfano, huwezi kubadilisha muktadha wa unganisho la hifadhidata (TUMIA) katika utaratibu uliohifadhiwa.

Utaratibu uliohifadhiwa unaweza kuwa na vigezo vya pembejeo na vigezo vya pato, inaweza kurudisha data ya tabular, au haiwezi kurudisha chochote, fanya tu maagizo yaliyomo.

Taratibu zilizohifadhiwa ni muhimu sana, hutusaidia kufanya otomatiki au kurahisisha shughuli nyingi, kwa mfano, unahitaji kila wakati kutoa ripoti ngumu za uchambuzi kwa kutumia majedwali ya egemeo, i.e. Opereta wa PIVOT. Ili kurahisisha kuunda maswali na mwendeshaji huyu ( kama unavyojua, syntax ya PIVOT ni ngumu sana), Unaweza kuandika utaratibu ambao utazalisha ripoti za muhtasari kwa nguvu kwako, kwa mfano, nyenzo "Dynamic PIVOT katika T-SQL" hutoa mfano wa kutekeleza kipengele hiki kwa namna ya utaratibu uliohifadhiwa.

Mifano ya kufanya kazi na taratibu zilizohifadhiwa katika Seva ya Microsoft SQL

Data ya chanzo kwa mifano

Mifano yote hapa chini itaendeshwa katika Microsoft SQL Server 2016 Express. Ili kuonyesha jinsi taratibu zilizohifadhiwa zinavyofanya kazi na data halisi, tunahitaji data hii, wacha tuiunda. Kwa mfano, wacha tuunde jedwali la majaribio na tuongeze rekodi kadhaa kwake, tuseme kwamba itakuwa meza iliyo na orodha ya bidhaa na bei zao.

Maagizo ya kuunda jedwali TUNZA Jedwali la Kujaribu la TABLE( INT IDENTITY(1,1) NOT NULL, INT NOT NULL, VARCHAR(100) NOT NULL, MONEY NULL) GO -- Maagizo ya kuongeza data WEKA INTO TestTable(CategoryId, ProductName, Price) THAMANI (1 , "Kipanya", 100), (1, "Kibodi", 200), (2, "Simu", 400) NENDA --Chagua hoja CHAGUA * KUTOKA Jedwali la Kujaribu

Tuna data, sasa hebu tuendelee kuunda taratibu zilizohifadhiwa.

Kuunda utaratibu uliohifadhiwa katika T-SQL - taarifa ya CREATE PROCEDURE

Taratibu zilizohifadhiwa zinaundwa kwa kutumia taarifa TENGENEZA UTARATIBU, baada ya maagizo haya lazima uandike jina la utaratibu wako, basi, ikiwa ni lazima, fafanua vigezo vya pembejeo na pato katika mabano. Baada ya hayo, unaandika neno kuu la AS na ufungue kizuizi cha maagizo neno kuu ANZA, funga kizuizi hiki kwa neno END. Ndani ya kizuizi hiki, unaandika maagizo yote ambayo yanatekeleza algorithm yako au aina fulani ya hesabu ya mlolongo, kwa maneno mengine, unapanga programu katika T-SQL.

Kwa mfano, hebu tuandike utaratibu uliohifadhiwa ambao utaongeza ingizo jipya, i.e. bidhaa mpya kwenye meza yetu ya majaribio. Ili kufanya hivyo, tutafafanua vigezo vitatu vya ingizo: @CategoryId - kitambulisho cha aina ya bidhaa, @ProductName - jina la bidhaa na @Price - bei ya bidhaa; kigezo hiki kitakuwa cha hiari, i.e. haitakuwa muhimu kuipitisha kwa utaratibu ( kwa mfano, hatujui bei bado), kwa kusudi hili tutaweka thamani ya msingi katika ufafanuzi wake. Vigezo hivi ni katika mwili wa utaratibu, i.e. kwenye BEGIN...END block inaweza kutumika, kama vile vigeu vya kawaida ( Kama unavyojua, viambishi vinaonyeshwa na @ ishara) Ikiwa unahitaji kutaja vigezo vya pato, basi baada ya jina la parameta onyesha neno kuu OUTPUT ( au OUT kwa kifupi).

Katika BEGIN...END block tutaandika maagizo ya kuongeza data, na pia maagizo CHAGUA mwishoni mwa utaratibu, ili utaratibu uliohifadhiwa utaturudishia data ya jedwali kuhusu bidhaa katika kategoria maalum kwa kuzingatia bidhaa mpya, iliyoongezwa hivi karibuni. Pia katika utaratibu huu uliohifadhiwa niliongeza usindikaji wa paramu inayoingia, ambayo ni kuondoa nafasi za ziada mwanzoni na mwisho. mfuatano wa maandishi ili kuwatenga hali ambapo nafasi kadhaa ziliingizwa kwa bahati mbaya.

Hapa kuna nambari ya utaratibu huu ( Pia nilitoa maoni juu yake).

Unda utaratibu TENGENEZA UTARATIBU wa Utaratibu wa Mtihani (--Vigezo vya Ingizo @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY = 0) AS ANZA --Maelekezo yanayotekeleza kanuni yako --Kuchakata vigezo vinavyoingia --Kuondoa nafasi za ziada mwanzoni. na mwisho wa mstari wa maandishi SET @ProductName = LTRIM(RTRIM(@ProductName)); --Ongeza rekodi mpya WEKA NDANI YA Jedwali la Kujaribu(CategoryId, ProductName, Price) THAMANI (@CategoryId, @ProductName, @Price) --Rudisha data CHAGUA * KUTOKA TestTable WHERE CategoryId = @CategoryId END GO

Kuendesha utaratibu uliohifadhiwa katika T-SQL - EXECUTE amri

Unaweza kuendesha utaratibu uliohifadhiwa, kama nilivyoona tayari, kwa kutumia amri ya EXECUTE au EXEC. Vigezo vinavyoingia hupitishwa kwa taratibu kwa kuorodhesha tu na kutaja maadili yanayofaa baada ya jina la utaratibu ( kwa vigezo vya pato unahitaji pia kutaja amri ya OUTPUT) Hata hivyo, majina ya vigezo hayawezi kutajwa, lakini katika kesi hii ni muhimu kufuata mlolongo wa kutaja maadili, i.e. taja maadili kwa mpangilio ambao vigezo vya kuingiza vinafafanuliwa ( hii inatumika pia kwa vigezo vya pato).

Vigezo ambavyo vina maadili chaguo-msingi hazihitaji kubainishwa; hivi ndivyo vinavyoitwa vigezo vya hiari.

Hapa kuna njia chache tofauti lakini zinazolingana za kutekeleza taratibu zilizohifadhiwa, haswa utaratibu wetu wa jaribio.

1. Piga utaratibu bila kubainisha bei TIMIZA Utaratibu wa Mtihani @CategoryId = 1, @ProductName = "Jaribio la bidhaa 1" --2. Piga simu kwa utaratibu unaoonyesha bei ya EXEC TestProcedure @CategoryId = 1, @ProductName = "Bidhaa ya majaribio 2", @Price = 300 --3. Piga utaratibu bila kutaja jina la vigezo EXEC TestProcedure 1, "Jaribio la bidhaa 3", 400

Kubadilisha utaratibu uliohifadhiwa kuwa T-SQL - ALTER PROCEDURE taarifa

Unaweza kufanya mabadiliko kwa algorithm ya utaratibu kwa kutumia maelekezo BADILISHA UTARATIBU. Kwa maneno mengine, ili kubadilisha utaratibu uliopo tayari, unahitaji tu kuandika ALTER PROCEDURE badala ya CREATE PROCEDURE, na kubadilisha kila kitu kingine kama ni lazima.

Wacha tuseme tunahitaji kufanya mabadiliko kwa utaratibu wetu wa jaribio, sema parameta ya @Price, i.e. bei, tutaifanya kuwa ya lazima, kwa hili tutaondoa thamani ya msingi, na pia fikiria kwamba hatuhitaji tena kupata seti ya data inayosababisha, kwa hili tutaondoa tu taarifa ya SELECT kutoka kwa utaratibu uliohifadhiwa.

Tunabadilisha utaratibu ALTER PROCEDURE TestProcedure (--Vigezo vinavyoingia @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY) AS ANZA --Maelekezo yanayotekeleza kanuni yako --Kuchakata vigezo vinavyoingia --Kuondoa nafasi za ziada mwanzoni na mwisho wa mistari ya maandishi SET @ProductName = LTRIM(RTRIM(@ProductName)); --Ongeza rekodi mpya INGIZA KWENYE Jedwali la Kujaribu(CategoryId, Jina la Bidhaa, Bei) THAMANI (@CategoryId, @ProductName, @Price) END GO

Kufuta utaratibu uliohifadhiwa katika taarifa ya T-SQL - DROP PROCEDURE

Ikiwa ni lazima, unaweza kufuta utaratibu uliohifadhiwa; hii inafanywa kwa kutumia maagizo UTARATIBU WA KUONDOA.

Kwa mfano, hebu tufute utaratibu wa majaribio tuliyounda.

DONDOSHA UTARATIBU WA Mtihani

Wakati wa kufuta taratibu zilizohifadhiwa, inafaa kukumbuka kuwa ikiwa utaratibu unarejelewa na taratibu zingine au taarifa za SQL, baada ya kufutwa, watashindwa na kosa, kwani utaratibu wanaorejelea haupo tena.

Hiyo ndiyo yote niliyo nayo, natumaini nyenzo hiyo ilikuwa ya kuvutia na yenye manufaa kwako, kwaheri!

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 kazi zilizoainishwa na mtumiaji zinaweza kutumika kama usemi mwingine wowote katika Swali la SQL, wakati taratibu zilizohifadhiwa lazima ziitwe kwa kutumia kazi ya CALL:

Utaratibu wa KUPIGA SIMU(...)

TEKELEZA utaratibu(…)

Taratibu zilizohifadhiwa zinaweza kurudisha matokeo mengi, ambayo ni, matokeo CHAGUA swali. 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 kanuni za kiutaratibu zilizohifadhiwa katika C na kisha katika kanuni ya mashine mashine inayolengwa, baada ya hapo 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. Hivyo Njia ya Oracle hukuruhusu kutenganisha kiolesura msimbo wa programu kutokana na 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;

Utaratibu uliohifadhiwa ni aina maalum ya kifurushi cha taarifa ya Transact-SQL iliyoundwa kwa kutumia Lugha ya SQL na upanuzi wa taratibu. 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 habari ndani saraka ya mfumo na marekebisho yake.

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 huwekwa kila wakati kwa muda. msingi wa mfumo data ya tempdb. Sababu moja ya kuunda taratibu zilizohifadhiwa kwa muda inaweza kuwa kuzuia utekelezaji unaorudiwa. kikundi fulani maagizo wakati wa kuunganisha kwenye hifadhidata. Unaweza kuunda taratibu za muda za ndani au kimataifa. Kwa kufanya hivyo, jina la utaratibu wa ndani linatajwa na mhusika mmoja# (#proc_name) na jina la utaratibu wa kimataifa lenye 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 wafanyikazi na majina ya wafanyakazi wote wanaofanya kazi katika idara fulani. 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. Hivyo hii utendakazi mpya hutoa kunyumbulika 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 fulani ya maendeleo kama Studio ya Visual. Kukusanya programu tayari kwenye msimbo wa kitu kwa kutumia mkusanyaji wa C # au Visual Basic. Nambari hii imehifadhiwa kwenye faili maktaba yenye nguvu(.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; Taratibu za Kuhifadhiwa za tabaka la umma ( tuli ya umma int CountEmployees() ( safu mlalo int; SqlConnection connection = new SqlConnection("Context Connection=true"); connection.Open(); SqlCommand cmd = connection.CreateCommand(); cmd.CommandText = " chagua hesabu(*) kama "Idadi ya wafanyakazi" " + "kutoka kwa Mfanyakazi"; rows = (int)cmd.ExecuteScalar(); connection.Close(); rejesha safu; ) )

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. Matumizi ya maagizo haya hukuruhusu kutaja msimbo wa chanzo majina ya darasa bila kubainisha wazi 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 yanatajwa kwa kuweka mali ya CommandText tofauti ya cmd mfano uliorejeshwa na njia ya CreateCommand(). Inayofuata inaitwa TekelezaScalar() mbinu Mfano wa SqlCommand. Njia hii inarudisha thamani ya scalar ambayo inabadilishwa kuwa aina kamili int data na kupewa kwa safu za safu.

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 nje rasilimali za mfumo, 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 kutumika kusasisha mkusanyiko toleo la hivi punde. 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 - inabainisha jina darasa la jumla;

    njia_jina - 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.

Taratibu zilizohifadhiwa za SQL ni moduli za programu zinazoweza kutekelezwa ambazo zinaweza kuhifadhiwa katika fomu vitu mbalimbali. Kwa maneno mengine, ni kitu ambacho kina taarifa za SQL. Taratibu hizi zilizohifadhiwa zinaweza kutekelezwa kwa mteja programu za maombi 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 mnamo 2005-2010, wakati programu kutoka Microsoft inayoitwa "SQL". Usimamizi wa seva Studio". 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.

Wakati utaratibu unaitwa, ni mara moja kusindika na seva yenyewe bila michakato isiyo ya lazima na uingiliaji kati wa watumiaji. 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 kuongezeka kwa usalama. 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 kukamata habari au ufikiaji usioidhinishwa kwa hifadhidata.

Uhamisho wa data

Uhusiano kati ya utaratibu uliohifadhiwa wa SQL na maombi ya mteja iko katika matumizi ya vigezo na maadili ya kurudi. 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, kwa msaada ambao simu kwa utaratibu uliohifadhiwa wa SQL na kurudi inaweza kufanywa, 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.

Katika zaidi mifano mbalimbali watu wanaonyesha kuunda 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 inaweza 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 pato na kwa hivyo vigeu vilivyotangazwa hupitishwa kwa kwa utaratibu uliowekwa. 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 hilo Mfano wa SQL Utaratibu uliohifadhiwa na vigezo vya @AuthID huuliza jedwali la Waandishi kwa kuchuja rekodi zilizorejeshwa kwa kutumia kigezo hicho cha @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 mbaya sana moduli ya programu, kurudi au kusambaza, pamoja na kuweka vigezo muhimu shukrani kwa maombi 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 Seva ya SQL, ambayo, bila shaka, inafaidika 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.

Dhana ya taratibu zilizohifadhiwa hufafanuliwa. Hutoa mifano ya kuunda, kurekebisha, na kutumia taratibu zilizohifadhiwa na vigezo. Ufafanuzi wa vigezo vya pembejeo na pato hutolewa. Mifano ya kuunda na kupiga simu taratibu zilizohifadhiwa hutolewa.

Dhana ya utaratibu uliohifadhiwa

Taratibu zilizohifadhiwa ni vikundi vilivyounganishwa Taarifa za SQL, matumizi ambayo hufanya kazi ya programu rahisi na rahisi zaidi, tangu utaratibu uliohifadhiwa mara nyingi ni rahisi zaidi kuliko mlolongo wa taarifa binafsi za SQL. Taratibu zilizohifadhiwa ni seti ya amri zinazojumuisha taarifa au vitendaji vya SQL moja au zaidi na kuhifadhiwa katika fomu iliyokusanywa katika hifadhidata. Utekelezaji katika hifadhidata taratibu zilizohifadhiwa Badala ya taarifa za kibinafsi za SQL, mtumiaji ana faida zifuatazo:

  • waendeshaji muhimu tayari wako kwenye hifadhidata;
  • wote walipita jukwaa kuchanganua na ziko katika muundo unaoweza kutekelezwa; kabla kutekeleza utaratibu uliohifadhiwa Seva ya SQL inazalisha mpango wa utekelezaji kwa ajili yake, hufanya uboreshaji wake na mkusanyiko;
  • taratibu zilizohifadhiwa msaada upangaji wa msimu , kwa vile wanakuwezesha kuvunja kazi kubwa katika sehemu za kujitegemea, ndogo na rahisi kusimamia;
  • taratibu zilizohifadhiwa inaweza kusababisha wengine taratibu zilizohifadhiwa na kazi;
  • taratibu zilizohifadhiwa inaweza kuitwa kutoka kwa aina nyingine za programu za maombi;
  • kawaida, taratibu zilizohifadhiwa kutekeleza haraka kuliko mlolongo wa taarifa za mtu binafsi;
  • taratibu zilizohifadhiwa rahisi kutumia: zinaweza kuwa na makumi au mamia ya amri, lakini ili kuziendesha unahitaji tu kutaja jina la unayotaka. utaratibu uliohifadhiwa. Hii inakuwezesha kupunguza ukubwa wa ombi lililotumwa kutoka kwa mteja hadi kwa seva, na kwa hiyo mzigo kwenye mtandao.

Taratibu za kuhifadhi mahali pale pale zinapotekelezwa hupunguza kiasi cha data inayohamishwa kwenye mtandao na kuboresha utendaji wa jumla wa mfumo. Maombi taratibu zilizohifadhiwa hurahisisha utunzaji mifumo ya programu na kuwafanyia mabadiliko. Kwa kawaida, vikwazo vyote vya uadilifu katika mfumo wa sheria na algoriti za usindikaji wa data hutekelezwa kwenye seva ya hifadhidata na zinapatikana kwa programu ya mwisho kama seti. taratibu zilizohifadhiwa, ambayo inawakilisha kiolesura cha usindikaji data. Ili kuhakikisha uadilifu wa data, na pia kwa madhumuni ya usalama, programu kawaida haipati ufikiaji wa moja kwa moja kwa data - yote hufanya kazi nayo kwa kupiga simu fulani. taratibu zilizohifadhiwa.

Njia hii inafanya kuwa rahisi sana kurekebisha algorithms ya usindikaji wa data, ambayo hupatikana mara moja kwa watumiaji wote wa mtandao, na hutoa uwezo wa kupanua mfumo bila kufanya mabadiliko kwenye programu yenyewe: badilisha tu. utaratibu uliohifadhiwa kwenye seva ya hifadhidata. Msanidi hana haja ya kukusanya tena programu, kuunda nakala zake, au kuwaelekeza watumiaji kufanya kazi na toleo jipya. Watumiaji wanaweza hata kufahamu kuwa mabadiliko yamefanywa kwenye mfumo.

Taratibu zilizohifadhiwa kuwepo kwa kujitegemea kwa meza au vitu vingine vya hifadhidata. Wanaitwa na programu ya mteja, mwingine utaratibu uliohifadhiwa au trigger. Msanidi anaweza kudhibiti haki za ufikiaji kwa utaratibu uliohifadhiwa, kuruhusu au kukataza utekelezaji wake. Badilisha msimbo utaratibu uliohifadhiwa inaruhusiwa tu na mmiliki wake au mwanachama wa jukumu lisilobadilika la hifadhidata. Ikiwa ni lazima, unaweza kuhamisha umiliki wake kutoka kwa mtumiaji mmoja hadi mwingine.

Taratibu zilizohifadhiwa katika mazingira ya Seva ya MS SQL

Wakati wa kufanya kazi na SQL Server, watumiaji wanaweza kuunda taratibu zao zinazotekeleza vitendo fulani. Taratibu zilizohifadhiwa ni vitu vya hifadhidata vilivyojaa kamili, na kwa hivyo kila moja huhifadhiwa kwenye hifadhidata maalum. Simu ya moja kwa moja utaratibu uliohifadhiwa inawezekana tu ikiwa inafanywa katika muktadha wa hifadhidata ambapo utaratibu unapatikana.

Aina za Taratibu Zilizohifadhiwa

Seva ya SQL ina aina kadhaa taratibu zilizohifadhiwa.

  • Mfumo taratibu zilizohifadhiwa iliyoundwa kufanya mbalimbali vitendo vya utawala. Karibu shughuli zote za usimamizi wa seva zinafanywa kwa msaada wao. Tunaweza kusema kwamba utaratibu taratibu zilizohifadhiwa ni kiolesura ambacho hutoa kazi na majedwali ya mfumo, ambayo hatimaye huja chini ya kubadilisha, kuongeza, kufuta na kurejesha data kutoka kwa jedwali la mfumo wa hifadhidata za mtumiaji na mfumo. Mfumo taratibu zilizohifadhiwa kuwa na kiambishi awali cha sp_, zimehifadhiwa kwenye hifadhidata ya mfumo na zinaweza kuitwa katika muktadha wa hifadhidata nyingine yoyote.
  • Desturi taratibu zilizohifadhiwa kutekeleza vitendo fulani. Taratibu zilizohifadhiwa- kitu kamili cha hifadhidata. Matokeo yake, kila mmoja utaratibu uliohifadhiwa iko katika hifadhidata maalum ambapo inatekelezwa.
  • Muda taratibu zilizohifadhiwa zipo kwa muda tu, baada ya hapo zinaharibiwa kiatomati na seva. Wamegawanywa katika mitaa na kimataifa. Muda wa ndani taratibu zilizohifadhiwa inaweza tu kuitwa kutoka kwa uunganisho ambao waliumbwa. Wakati wa kuunda utaratibu kama huo, lazima upe jina linaloanza na herufi # moja. Kama vitu vyote vya muda, taratibu zilizohifadhiwa ya aina hii hufutwa kiotomatiki mtumiaji anapokata muunganisho au seva imewashwa upya au kusimamishwa. Ulimwengu wa muda taratibu zilizohifadhiwa zinapatikana kwa miunganisho yoyote 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.

Unda, rekebisha, na ufute taratibu zilizohifadhiwa

Uumbaji utaratibu uliohifadhiwa inahusisha kutatua matatizo yafuatayo:

  • kuamua aina ya kuundwa utaratibu uliohifadhiwa: muda au desturi. Kwa kuongeza, unaweza kuunda mfumo wako mwenyewe utaratibu uliohifadhiwa, ikiipa jina lililowekwa awali na sp_ na kuiweka kwenye hifadhidata ya mfumo. Utaratibu huu utapatikana katika muktadha wa hifadhidata yoyote ya seva ya ndani;
  • kupanga haki za ufikiaji. Wakati wa kuunda utaratibu uliohifadhiwa inapaswa kuzingatiwa kuwa itakuwa na haki sawa za ufikiaji wa vitu vya hifadhidata kama mtumiaji aliyeiunda;
  • ufafanuzi vigezo vya utaratibu vilivyohifadhiwa. Sawa na taratibu zinazojumuishwa katika lugha nyingi za programu, taratibu zilizohifadhiwa inaweza kuwa na vigezo vya pembejeo na pato;
  • maendeleo ya kanuni utaratibu uliohifadhiwa. Msimbo wa utaratibu unaweza kuwa na mlolongo wa amri zozote za SQL, ikijumuisha simu kwa zingine taratibu zilizohifadhiwa.

Kuunda mpya na kubadilisha iliyopo utaratibu uliohifadhiwa imefanywa kwa kutumia amri ifuatayo:

<определение_процедуры>::= (CREATE | ALTER ) PROC procedure_name [;namba] [(@parameter_name data_type ) [=default] ][,...n] AS sql_operator [...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. Hivyo, ili kuweka kuundwa utaratibu uliohifadhiwa katika hifadhidata mahususi, lazima utoe amri ya CREATE PROCEDURE katika muktadha wa hifadhidata hiyo. Wakati wa kugeuka kutoka kwa mwili utaratibu uliohifadhiwa majina yaliyofupishwa yanaweza kutumika kwa vitu vya hifadhidata sawa, i.e. bila kutaja jina la hifadhidata. Unapohitaji kufikia vitu vilivyo katika hifadhidata nyingine, kubainisha jina la hifadhidata ni lazima.

Nambari katika jina ni nambari ya kitambulisho utaratibu uliohifadhiwa, ambayo huitambulisha kipekee katika kundi la taratibu. Kwa urahisi wa usimamizi, taratibu ni za kimantiki za aina moja taratibu zilizohifadhiwa inaweza kuwekwa katika makundi kwa kuwapa jina moja lakini nambari tofauti za utambulisho.

Kuhamisha data ya pembejeo na pato katika iliyoundwa utaratibu uliohifadhiwa vigezo vinaweza kutumika, majina ambayo, kama vile majina ya vigeu vya ndani, lazima yaanze na alama ya @. Moja utaratibu uliohifadhiwa Unaweza kubainisha vigezo vingi vilivyotenganishwa na koma. Mwili wa utaratibu haupaswi kutumia vigezo vya ndani ambavyo majina yao yanafanana na majina ya vigezo vya utaratibu huu.

Kuamua aina ya data inayolingana kuhifadhiwa utaratibu parameter, aina zozote za data za SQL zinafaa, ikijumuisha zilizoainishwa na mtumiaji. Hata hivyo, aina ya data ya CURSOR inaweza kutumika tu kama pato parameter utaratibu uliohifadhiwa, i.e. kubainisha neno kuu la OUTPUT.

Uwepo wa neno kuu la OUTPUT inamaanisha kuwa parameter inayofanana inalenga kurejesha data kutoka utaratibu uliohifadhiwa. Walakini, hii haimaanishi kuwa parameta haifai kwa kupitisha maadili utaratibu uliohifadhiwa. Kubainisha neno kuu la OUTPUT huelekeza seva kuondoka utaratibu uliohifadhiwa toa thamani ya sasa ya parameta kwa utofauti wa ndani ambao ulibainishwa wakati wa kuita utaratibu kama thamani ya parameta. 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 ambavyo vinaruhusiwa kwa vigezo vya kawaida haviruhusiwi.

Neno kuu la VARYING linatumika pamoja na parameta ya OUTPUT, ambayo ni ya aina ya CURSOR. Inaamua hivyo pato parameter kutakuwa na seti ya matokeo.

Neno kuu la DEFAULT linawakilisha thamani ambayo inayolingana kigezo 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 utaratibu uliohifadhiwa kila anapopiga simu.

Kigezo cha FOR REPLICATION kinahitajika wakati wa kunakili data na kuwezesha iliyoundwa utaratibu uliohifadhiwa kama makala ya kuchapishwa.

Neno kuu la ENCRYPTION huelekeza seva kusimba msimbo kwa njia fiche utaratibu uliohifadhiwa, ambayo inaweza kutoa ulinzi dhidi ya matumizi ya kanuni za umiliki zinazotekeleza kazi utaratibu uliohifadhiwa.

Neno kuu la AS limewekwa mwanzoni mwa mwili yenyewe utaratibu uliohifadhiwa, i.e. seti ya amri za SQL kwa msaada wa ambayo hii au hatua hiyo itatekelezwa. Karibu kila kitu kinaweza kutumika katika mwili wa utaratibu Amri za SQL, shughuli zinatangazwa, kufuli zimewekwa na wengine huitwa taratibu zilizohifadhiwa. Ondoka kutoka utaratibu uliohifadhiwa inaweza kufanywa kwa kutumia amri ya RETURN.

Kuondoa Utaratibu uliohifadhiwa kutekelezwa na amri:

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

Utekelezaji wa Utaratibu uliohifadhiwa

Kwa kutekeleza utaratibu uliohifadhiwa Amri inayotumika ni:

[[ EXEC [ UTE] procedure_name [;number] [[@parameter_name=](thamani | @variable_name) |][,...n]

Ikiwa simu utaratibu uliohifadhiwa sio amri pekee kwenye kifurushi, uwepo wa 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 lini kuunda utaratibu na neno kuu la OUTPUT.

Wakati neno kuu DEFAULT limeainishwa kwa kigezo wakati wa kupiga utaratibu, litatumika thamani chaguo-msingi. Kwa kawaida, neno lililobainishwa DEFAULT linaruhusiwa tu kwa vigezo hivyo ambavyo limefafanuliwa thamani chaguo-msingi.

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 ziliorodheshwa wakati. kuunda utaratibu. Weka kwa kigezo thamani chaguo-msingi, huwezi tu kuiruka wakati wa kuorodhesha. Ikiwa unataka kuacha vigezo ambavyo imefafanuliwa thamani chaguo-msingi, inatosha kutaja kwa uwazi majina ya parameta wakati wa kupiga simu 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.

Mfano 12.1. Utaratibu bila vigezo. Tengeneza utaratibu wa kupata majina na gharama za bidhaa zilizonunuliwa na Ivanov.

TUNDA PROC my_proc1 AS SELECT Product.Name, Product.Price*Transaction.Quantity AS Gharama, Mteja.Jina la Mwisho KUTOKA KWA MTEJA INNER JIUNGE (Bidhaa INNER JOIN Transaction ON Product.ProductCode=Transaction.ProductCode) KWENYE Customer.CustomerCode=Transaction WHERE. Mteja .Jina la mwisho='Ivanov' Mfano 12.1. Utaratibu wa kupata majina na maadili ya bidhaa zilizonunuliwa na Ivanov.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

EXEC my_proc1 au my_proc1

Utaratibu unarudisha seti ya data.

Mfano 12.2. Utaratibu bila vigezo. Unda utaratibu wa kupunguza bei ya bidhaa za daraja la kwanza kwa 10%.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

EXEC my_proc2 au my_proc2

Utaratibu haurudishi data yoyote.

Mfano 12.3. Utaratibu na parameter ya pembejeo. Unda utaratibu wa kupata majina na bei za bidhaa zilizonunuliwa na mteja fulani.

TUNDA PROC my_proc3 @k VARCHAR(20) AS CHAGUA Bidhaa.Jina, Bidhaa.Bei*Transaction.Wingi AS Gharama, Mteja.Jina la Mwisho KUTOKA KWA MTEJA INNER JIUNGE (Bidhaa INNER JIUNGE OLE KUHUSU Product.ProductCode=Transaction.ProductCode) KWA Mteja. Msimbo wa Mteja =Transaction.ClientCode WAPI Client.LastName=@k Mfano 12.3. Utaratibu wa kupata majina na bei za bidhaa zilizonunuliwa na mteja fulani.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

EXEC my_proc3 "Ivanov" au my_proc3 @k="Ivanov"

Mfano 12.4.. Unda utaratibu wa kupunguza bei ya bidhaa ya aina fulani kwa mujibu wa %.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

EXEC my_proc4 "Waffles",0.05 au EXEC my_proc4 @t="Waffles", @p=0.05

Mfano 12.5. Utaratibu na vigezo vya pembejeo na maadili chaguo-msingi. Unda utaratibu wa kupunguza bei ya bidhaa ya aina fulani kwa mujibu wa %.

TUNZA PROC my_proc5 @t VARCHAR(20)=’Pipi`, @p FLOAT=0.1 KAMA USASISHAJI SET YA Bidhaa Bei=Bei*(1-@p) WAPI Type=@t Mfano 12.5. Utaratibu na vigezo vya ingizo na maadili chaguo-msingi. Unda utaratibu wa kupunguza bei ya bidhaa ya aina fulani kwa mujibu wa %.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

EXEC my_proc5 "Waffles",0.05 au EXEC my_proc5 @t="Waffles", @p=0.05 au EXEC my_proc5 @p=0.05

Katika kesi hii, bei ya pipi imepunguzwa (thamani ya aina haijainishwa wakati wa kupiga utaratibu na inachukuliwa kwa default).

Katika kesi ya mwisho, vigezo vyote viwili (aina na asilimia) hazijainishwa wakati wa kupiga utaratibu; maadili yao huchukuliwa kwa chaguo-msingi.

Mfano 12.6. Utaratibu na vigezo vya pembejeo na pato. Unda utaratibu wa kuamua gharama ya jumla ya bidhaa zinazouzwa katika mwezi fulani.

UTENGENEZA PROC my_proc6 @m INT, @s FLOAT OUTPUT AS SELECT @s=Jumla(Bidhaa.Price*Transaction.Quantity) KUTOKA KWA Bidhaa INNER JIUNGE NA Muamala WA Product.ProductCode=Transaction.ProductCode GROUP KWA Mwezi(Transaction.Date) HAVING Month( Muamala.Tarehe)=@m Mfano 12.6. Utaratibu na vigezo vya pembejeo na pato. Unda utaratibu wa kuamua gharama ya jumla ya bidhaa zinazouzwa katika mwezi fulani.

Kwa upatikanaji wa utaratibu unaweza kutumia amri:

TANGAZA @st FLOAT EXEC my_proc6 1,@st OUTPUT CHAGUA @st

Kizuizi hiki cha amri hukuruhusu kuamua gharama ya bidhaa zinazouzwa mnamo Januari ( parameta ya pembejeo mwezi umebainishwa kama 1).

Unda utaratibu wa kuamua jumla ya idadi ya bidhaa zilizonunuliwa na kampuni ambapo mfanyakazi aliyepewa anafanya kazi.

Kwanza, tutaendeleza utaratibu wa kuamua kampuni ambapo mfanyakazi anafanya kazi.

Mfano 12.7. Matumizi taratibu zilizowekwa. Unda utaratibu wa kuamua jumla ya idadi ya bidhaa zilizonunuliwa na kampuni ambapo mfanyakazi aliyepewa anafanya kazi.

Kisha tutaunda utaratibu unaohesabu kiasi cha jumla cha bidhaa zilizonunuliwa na kampuni tunayopendezwa nayo.

CREATE PROC my_proc8 @fam VARCHAR(20), @kol INT OUTPUT AS TANGAZA @firm VARCHAR(20) EXEC my_proc7 @fam,@firm OUTPUT CHAGUA @kol=Jumla(Transaction.Quantity) KUTOKA KWA MTEJA INNER JIUNGE NA Transaction.ClientCode ON Client Transaction.ClientCode GROUP BY Client.Firm HAVING Client.Company=@firm Mfano 12.7. Unda utaratibu wa kuamua jumla ya idadi ya bidhaa zilizonunuliwa na kampuni ambapo mfanyakazi aliyepewa anafanya kazi.

Utaratibu unaitwa kwa kutumia amri:

TANGAZA @k INT EXEC my_proc8 ‘Ivanov’,@k OUTPUT CHAGUA @k