Taratibu zilizohifadhiwa za seva ya sql. Taratibu zilizohifadhiwa katika SQL. Data ya chanzo kwa mifano

Tunazingatia hali ambapo taratibu zilizohifadhiwa zinaweza kuharibu utendaji wa hoja.


Wakati wa kuandaa taratibu zilizohifadhiwa katika MS SQL Server 2000, taratibu zilizohifadhiwa huwekwa kwenye kashe ya utaratibu, ambayo inaweza kuboresha utendaji wakati wa kuzitekeleza kwa kuondoa hitaji la kuchanganua, uboreshaji na mkusanyiko wa msimbo wa utaratibu uliohifadhiwa.
Kwa upande mwingine, kuna mitego katika kuhifadhi msimbo uliokusanywa wa utaratibu uliohifadhiwa ambao unaweza kuwa na athari tofauti.
Ukweli ni kwamba wakati wa kuandaa utaratibu uliohifadhiwa, mpango wa utekelezaji wa waendeshaji hao ambao huunda nambari ya utaratibu umeundwa; ipasavyo, ikiwa utaratibu uliokusanywa uliohifadhiwa umehifadhiwa, basi mpango wake wa utekelezaji pia umehifadhiwa, na kwa hivyo utaratibu uliohifadhiwa hautakuwa. kuwa optimized kwa hali maalum na vigezo vya swala.
Hebu tufanye jaribio kidogo ili kuonyesha hili.

HATUA YA 1. Kuunda hifadhidata.
Kwa jaribio, tutaunda hifadhidata tofauti.

TUNZA DATABASE test_sp_perf
IMEWASHA (NAME="test_data", FILENAME="c:\temp\test_data", SIZE=1, MAXSIZE=10,FILEGROWTH=1Mb)
INGIA (NAME="test_log", FILENAME="c:\temp\test_log", SIZE=1, MAXSIZE=10,FILEGROWTH=1Mb)

HATUA YA 2. Kuunda meza.
TUNZA TABLE sp_perf_test(safuwima1 int, safu wima2 char(5000))

HATUA YA 3. Kujaza jedwali na safu za majaribio. Safu mlalo rudufu huongezwa kwenye jedwali kimakusudi. Laini 10,000 zenye nambari kutoka 1 hadi 10,000, na laini 10,000 zenye nambari 50,000.

TANGAZA @i int
WEKA @i=1
WAKATI(@i<10000)
ANZA
INGIA KWENYE sp_perf_test(safuwima1, safuwima2) THAMANI(@i,"Mstari wa majaribio #"+CAST(@i kama char(8)))
INGIA KWENYE sp_perf_test(safuwima1, safuwima2) THAMANI(50000,"Mstari wa majaribio #"+CAST(@i kama char(8)))
WEKA @i= @i+1
MWISHO

CHAGUA COUNT(*) KUTOKA sp_perf_test
NENDA

HATUA YA 4. Kuunda faharasa isiyo na mashada. Kwa sababu mpango wa utekelezaji umehifadhiwa kwa utaratibu, faharisi itatumika kwa njia sawa katika simu zote.

UTANDA INDEX CL_perf_test ILIYOSIWASIRIWA KWENYE sp_perf_test(safuwima1)
NENDA

HATUA YA 5. Kuunda utaratibu uliohifadhiwa. Utaratibu hutekeleza tu taarifa ya SELECT na hali.

UNDA PROC proc1 (@param int)
AS
CHAGUA safu wima1, safu wima2 KUTOKA sp_perf_test WHERE safuwima1=@param
NENDA

HATUA YA 6. Kuendesha utaratibu uliohifadhiwa. Wakati wa kuendesha utaratibu wa mazingira magumu, parameter ya kuchagua hutumiwa mahsusi. Kama matokeo ya utaratibu, tunapata mstari 1. Mpango wa utekelezaji unaonyesha matumizi ya index isiyo na makundi, kwa sababu Hoja ni ya kuchagua na hii ndiyo njia bora ya kurejesha safu mlalo. Utaratibu ulioboreshwa wa kuleta safu mlalo moja huhifadhiwa kwenye akiba ya utaratibu.

EXEC proc1 1234
NENDA

HATUA YA 7. Endesha utaratibu uliohifadhiwa na kigezo kisicho cha kuchagua. Thamani inayotumika kama kigezo ni 50000. Kuna takriban safu 10000 zilizo na thamani hii kwenye safu wima ya kwanza; kwa hivyo, kutumia faharisi isiyo na nguzo na operesheni ya kuangalia alamisho haifai, lakini kwa kuwa nambari iliyokusanywa na mpango wa utekelezaji huhifadhiwa ndani. cache ya utaratibu, hii ndiyo itatumika. Mpango wa utekelezaji unaonyesha hili, pamoja na ukweli kwamba operesheni ya kuangalia alamisho ilifanywa kwa safu 9999.

EXEC proc1 50000
NENDA

HATUA YA 8. Kufanya uteuzi wa safu mlalo na uga wa kwanza sawa na 50000. Wakati wa kutekeleza swali tofauti, hoja hudumishwa na kukusanywa kwa thamani maalum kwa safu wima ya kwanza. Kwa hivyo, kiboreshaji cha swala huamua kuwa uwanja umerudiwa mara nyingi na huamua kutumia operesheni ya skanning ya jedwali, ambayo katika kesi hii ni bora zaidi kuliko kutumia faharisi isiyo na nguzo.

CHAGUA safu wima1, safu wima2 KUTOKA sp_perf_test WHERE safu wima1=50000
NENDA

Kwa hivyo, tunaweza kuhitimisha kuwa kutumia taratibu zilizohifadhiwa kunaweza sio kuboresha utendaji wa hoja kila wakati. Unapaswa kuwa mwangalifu sana kuhusu taratibu zilizohifadhiwa zinazofanya kazi kwenye matokeo yenye idadi tofauti ya safu mlalo na zinazotumia mipango tofauti ya utekelezaji.
Unaweza kutumia hati kurudia jaribio kwenye seva yako ya MS SQL.

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 DBMS Microsoft SQL Seva 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 ( eng. ), 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;

Tamko la utaratibu

TENGENEZA UTARATIBU [({NDANI|NJE|NDANI} [,…])]
[SET YA MATOKEO YA KUDIRI ]
ANZA [ATOMI]

MWISHO

Maneno muhimu
. IN (Ingizo) - kigezo cha kuingiza
. OUT (Pato) - parameta ya pato
. INOUT - ingizo na pato, na vile vile uwanja (bila vigezo)
. DYNAMIC RESULT SET inaonyesha kuwa utaratibu unaweza kufungua idadi maalum ya mshale ambayo itabaki wazi baada ya utaratibu kurejea.

Vidokezo
Haipendekezi kutumia vigezo vingi katika taratibu zilizohifadhiwa (hasa idadi kubwa na kamba za tabia) kutokana na mtandao na upakiaji wa stack. Katika mazoezi, lahaja zilizopo za Transact-SQL, PL/SQL na Informix zina tofauti kubwa kutoka kwa kiwango, katika tamko na matumizi ya vigezo, matamko ya kutofautiana, na katika wito wa subroutines. Microsoft inapendekeza kutumia makadirio yafuatayo kukadiria saizi ya akiba ya utaratibu uliohifadhiwa:
=(idadi ya juu zaidi ya watumiaji wanaotumia wakati mmoja)*(ukubwa wa mpango mkubwa zaidi wa utekelezaji)*1.25. Kuamua ukubwa wa mpango wa utekelezaji katika kurasa unaweza kufanywa kwa kutumia amri: DBCC MEMUSAGE.

Kuita utaratibu

Katika DBMS nyingi zilizopo, taratibu zilizohifadhiwa huitwa kwa kutumia opereta:

TIMIZA UTARATIBU [(][)]

Kumbuka: Simu kwa taratibu zilizohifadhiwa zinaweza kufanywa kutoka ndani ya programu, utaratibu mwingine uliohifadhiwa, au kwa maingiliano.

Mfano wa tamko la utaratibu

TUNZA UTARATIBU Proc1 AS //tangaza utaratibu
TANGAZA MSHALE WA Cur1 KWA JINA CHAGUA, Mji KUTOKA KWA Wafanyabiashara WAPI Ukadiriaji>200 //tangaza kielekezi
FUNGUA Cur1 //fungua kishale
CHUKUA INAYOFUATA KUTOKA Cur1 //soma data kutoka kwa mshale
WAKATI @@Fetch_Status=0
ANZA
FUATA INAYOFUATA KUTOKA Cur1
MWISHO
FUNGA Mzingo1 //funga kishale
ondoa Cur1
TEKELEZA Proc1 //endesha utaratibu

Polymorphism
Subroutines mbili zilizo na jina moja zinaweza kuunda katika schema sawa ikiwa vigezo vya subroutines mbili ni sawa. rafiki mkubwa kutoka kwa kila mmoja ili waweze kutofautishwa. Ili kutofautisha kati ya taratibu mbili zilizo na jina moja katika schema sawa, kila moja hupewa jina mbadala na la kipekee (jina mahususi). Jina kama hilo linaweza kubainishwa wazi wakati utaratibu mdogo unafafanuliwa. Wakati wa kuita subroutines zilizo na majina kadhaa yanayofanana, kuamua subroutine inayohitajika hufanywa kwa hatua kadhaa:
. Hapo awali, taratibu zote zinafafanuliwa na jina maalum, na ikiwa hakuna, basi kazi zote zilizo na jina lililopewa.
. Kwa uchambuzi zaidi, subroutines hizo tu zinazohusiana na ambayo mtumiaji huyu ana haki ya utekelezaji (TEKELEZA).
. Kwao, wale ambao idadi ya vigezo inalingana na idadi ya hoja za wito huchaguliwa. Aina maalum za data za vigezo na nafasi zao zimeangaliwa.
. Ikiwa kuna zaidi ya subroutine moja iliyobaki, basi yule ambaye jina lake la kufuzu ni fupi linachaguliwa.
Kwa mazoezi, Oracle inasaidia upolimishaji kwa kazi zilizotangazwa tu kwenye kifurushi, DB@ - in mpango tofauti, na katika Sybase na MS SQL upakiaji mwingi wa Seva ni marufuku.

Kufuta na kubadilisha taratibu
Ili kuondoa utaratibu, tumia opereta:

Ili kubadilisha utaratibu, tumia opereta:

BADILISHA UTARATIBU [([{NDANI|NJE|NDANI}])]
ANZA [ATOMI]

MWISHO

Haki za kufanya taratibu

UTEKELEZAJI WA RUZUKU UNAWASHA KWA |UMMA [KWA CHAGUO LA RUZUKU]

Taratibu za mfumo
DBMS nyingi (pamoja na Seva ya SQL) zina seti maalum ya taratibu zilizohifadhiwa za mfumo ambazo unaweza kutumia kwa madhumuni yako mwenyewe.

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 za mfumo wa hifadhidata zote 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, akiipa jina lililowekwa awali na sp_ na kuiweka ndani msingi wa mfumo data. 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 ) 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 yoyote inafaa Data ya SQL, 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 KUtofautiana linatumika kwa pamoja na

Imehifadhiwa Taratibu za SQL ni moduli ya programu inayoweza kutekelezwa ambayo inaweza 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 sawa. Usalama, kubadilika kwa programu, tija - yote haya huvutia watumiaji zaidi na zaidi wanaofanya kazi na hifadhidata. Uarufu wa kilele wa taratibu ulitokea mwaka 2005-2010, wakati programu kutoka kwa Microsoft inayoitwa "SQL Server" ilitolewa. Studio ya Usimamizi" 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. Moduli pia inaweza kupangwa upya na kubadilishwa ndani mwelekeo sahihi kwa 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 hilo chaguo bora katika kesi hii, ni kuunda na kutekeleza utaratibu na jina la schema katika 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, upakuaji wa Google Hati ya SQL kutoka kwa ukurasa wa SQL2005.

Katika mfano uliopita, utaratibu unachukua vigezo viwili, ambavyo Lugha ya Kiingereza kwa masharti itaitwa @Jimbo 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, parameta ya @City inahifadhiwa kwanza, na @State imehifadhiwa karibu na dhamana ya 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 tatu njia muhimu 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, vigezo 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". Chaguzi zifuatazo ni pato na kwa hivyo vigeu vilivyotangazwa hupitishwa kwa utaratibu uliowekwa. Kumbuka kwamba wakati wa kupita katika vigeuzi pato neno kuu pia aliuliza 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. Chagua mwendeshaji huamua nini kinapaswa kurejeshwa kwa mpigaji 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 unajiendesha 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.