Ruani procedurat në SQL. Procedurat e Vidalennya që merren. Lidhja RETURN për procedurat që janë ruajtur

Nëse ka procedurat e mëposhtme për t'u ruajtur dhe nëse jam fajtor për fitimin e një deklarate në SQL Server?

Më lejoni t'ju lejoj të krijoni pije dinamike, si mund t'i përmirësojmë parametrat?

Cila prej tyre është më e dukshme, cila është më e mira dhe cila është më e pakta?

Shikoni ose procedurat që po ruhen, a po e kursejnë vazhdimisht kujtesën?

Çfarë do të thotë, le të themi, që deklaratat krijojnë një tabelë virtuale dhe procedurat krijojnë një tabelë materialesh?

Bëhu i sjellshëm, më trego për pikat, erë e keqe e yakscho.

Solutions Collecting From Web of "Pse ka një ndryshim midis procedurave, kursimeve dhe taksave?"

Shiko є Virtual tabela. Mund të arrini deri në numrin e tabelave në paraqitje dhe të fitoni aplikacionin për dorëzimin e të dhënave, pasi të dhënat janë gjetur në një tabelë.

Procedura për zgjedhjen e parametrave për funksionin e zgjedhur është ruajtur ... në mënyrë që futja e të dhënave ose rrotullimi i vlerave të tjera ose grupi i të dhënave të përditësohet.

Krijoi njoftime dhe procedura që po ruhen - për t'u hakmarrë ndaj informacionit nga Microsoft për ato, nëse dhe pse i fitoni ato.

Le të themi se kam dy tabela:

tbl_user Stovptsi: .user_id, .user_name, .user_pw

tbl_profile Stowpci: .profile_id, .user_id .profile_description

Pra, ndërsa po përpiqem t'i marr këto tabela SHUMË ... në vend të kësaj, për të punuar në CLEAR peice sql, do të përdorja një vështrim, për shembull:

KRIJO Shiko vw_user_profile AS Zgjidh A.user_id, B.profile_description FROM tbl_user A bashkohu majtas tbl_profile B në A.user_id = b.user_id GO

Prandaj, në të ardhmen, dua të kërkoj një profil_përshkrim për ID-në e koristuvach ... gjithçka që duhet të grabis,

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Ky kod mund të ndryshohet në procedurën që ruhet, për shembull:

Krijo procedurën dbo.getDesc @ID int AS fillojë ZGJIDH profilin_përshkrim NGA vw_user_profile WHERE user_id = @ID FUND SHKO

Për këtë mund të telefonoj

Dbo.getDesc 25

dhe unë heq përshkrimin për ID-në e koristuvach 25 de 25 - parametri juaj.

Është e qartë se BAGATO është më shumë, por ideja kryesore është më pak.

Në anën e pasme, duhet të kuptoni se fyerjet janë fjalime të ndryshme. Kursimet e procedurave janë më fitimtare për deklaratat INSERT-UPDATE-DELETE. Këto parashtresa janë të justifikuara për deklaratat SELECT. dhe ju jeni fajtor për inatin fitimtar.

Ju nuk mund të ndryshoni të dhënat në pamje.

Hidhini një sy: Kjo është një tabelë virtuale që përbëhet nga një ose më shumë rreshta dhe kolona nga tabela të ndryshme të bazës së të dhënave reale. Tse shabllon rowk_v dhe stovpts_v tabela k_lkoh. Këtu nuk mund të kaloni asnjë parametër.

Procedurat e ruajtjes: përdorni para kohe një grup deklaratash SQL, për të cilat mund të modifikoni parametra si të dhënat hyrëse dhe të hiqni të dhënat dalëse.

Paraqitjet mund të paraqiten në një procedurë që ruhet, por një procedurë që ruhet nuk mund të paraqitet në Views…!

Procedura shovischa është fitimtare nëse SQL e thjeshtë thjesht nuk mjafton. Duhet të ndryshohen procedurat e ruajtjes, ciklet dhe ciklet e procedurave të tjera që ruhen. Programimi Tse mova, jo mova zapitіv.

    Paraqitjet janë statike. Mendoni për to sikur të ishin tabela të reja me një plan urbanistik të thjeshtë dhe të dhënat në to po krijohen sipas dëshirës, ​​me një shënim zëvendësues, me të cilin keni krijuar gjithçka. Si në çdo tabelë SQL, ju mund të renditni dhe filtroni sipas WHERE , GROUP BY dhe RORDER BY.

    Tse për të lënë mënjanë faktin që ju punoni.

    Tse për të hedhur në bazën e të dhënave. Na vjen keq, thjesht ekzekutoni pyetjen dhe filtroni rezultatin. E megjithatë, bazat e të dhënave, si Oracle, ju lejojnë të krijoni deklarata "të materializuara", si në tabelën kryesore, pasi ato përditësohen automatikisht kur ndryshoni llojin bazë të të dhënave.

    Materializimi i deklaratës ju lejon të krijoni indekse në kolonat e deklaratës (veçanërisht në kolonat e llogaritura, të cilat nuk gjenden askund në bazën e të dhënave).

    nuk e kuptoj cfare thua.

Dallimi kryesor qëndron në faktin se nëse kërkoni një deklaratë, përcaktimi futet në kërkesën tuaj. Procedura mund të japë rezultate, por është e përpiluar dhe kaq e shpejtë. Opsioni i dytë është të indeksoni njoftimin.

SQL View është një tabelë virtuale e bazuar në pyetjen SQL SELECT. Parashtresat dorëzohen për një ose më shumë tabela të bazës së të dhënave ose për aplikime të tjera. Kjo shenjë mittєvy e bazës së të dhënave, ashtu si procedura që merret, është një grup deklaratash Transact-SQL, të palosur në një plan të vetëm ekzekutimi.

Pereglyad është një demonstrim i thjeshtë i të dhënave që ruhen në tabelat e bazës së të dhënave, ashtu si një procedurë që ruhet nga një grup operatorësh, të cilët mund të vikonohen.

Paraqitur më shumë, oscillki vodobrazhae të dhëna nga tabela, se si të pyesni, ashtu si procedura e mbledhjes së instruksioneve sql.

Kthejeni këtë artikull: Rishikimi i procedurave që po ruhen. Po ato që po pëshpëritni

@Patrick është i saktë kur thoni se, mirë, duhet të shikoni ushqimin tuaj tjetër, të krijoni një pamje për veten tuaj në memorie, dhe në tipin "Bashkime", "Të dhëna" dhe edhe nëse grumbullimi do të zbërthehet, ju prapë mund të përfundoni duke u dukur i uritur.

Ruani procedurën për të ruajtur të gjithë punën tuaj ose me zëvendësimet Temp Hash Table, për shembull #tmpTable1, ose në kujtim të @tmpTable1 për ndihmë. Zalezhno v_d të asaj që doni të thoni.

Procedura që merret është e ngjashme me një funksion, por quhet me emra të drejtpërdrejtë. zamіst funktsіy, yakі në fakt vikoristovuyutsya në mes të kërkesës.

Natyrisht, në shumicën e rasteve tavolinat janë në kujtesë, sepse nuk merrni shumë para.

Mahesh nuk ka të drejtë, nëse e lejon verën nuk mund ta ndërrosh haraçin nga haraçi. Babai, shiko Patrikun

KRIJO Shiko vw_user_profile AS Zgjidh A.user_id, B.profile_description FROM tbl_user A majtas bashkohu tbl_profile B në A.user_id = b.user_id

Unë mund të përditësoj të dhënat ... si një prapanicë, mund ta kuptoj nëse është një cich ...

Përditëso vw_user_profile Vendos profilin_description="Menaxheri" ku user_id=4

Përditëso tbl_profile Vendos profile_description="Menaxheri" ku user_id=4

Nuk mund ta fusësh atë në deklaratë, pasi jo të gjitha fushat në të gjithë tabelën janë të pranishme dhe po supozoj se PROFILE_ID është çelësi kryesor dhe nuk mund të jetë NULL. Sidoqoftë, mund të futni gjithashtu një INSERT në vistavu...

Kam krijuar një aplikacion për tryezën kryesore, vicorist ...

Krijo Junk View si SELECT * view

Fut në vlerat e padëshiruara (Kodi, emri) ("glyn", "Glyn Roberts"), ("Mary", "Maryann Roberts")

FSHI nga Junk Where ID>4

І INSERT, і DELETE funksionuan në të njëjtën pikë

Natyrisht, ju nuk mund të ndryshoni nëse fushat janë, nëse janë grumbullime, ose nëse janë të siguruara, ose nëse janë deklarata, nëse janë thjesht deklarata të drejtpërdrejta, ato mund të ndryshohen.

Nëse keni parë më shumë se një tabelë, nuk mund të futni ose shihni, por nëse keni parë më shumë se një tabelë, mund të tingëlloni.

Përveç vënies në dukje më shumë komente, do të doja të shtoja pak respekt për Views.

  1. Dhuratat mund të jenë fitimtare për palosjen e prikhovuvannya. Tregoni skenarin tuaj, në të cilin 5 persona punojnë në projekt, dhe vetëm njëri prej tyre është tashmë një ekip me një bazë të dhënash, për shembull, shoqata të palosshme. Në një skenar të tillë, mund të krijohen verëra, të cilat mund të kërkohen lehtësisht nga anëtarët e tjerë të ekipit, dhe copëzat e erërave të këqija pyesin një tryezë.
  2. Siguria mund të zbatohet lehtësisht Views. Le të themi ne spіvrobіtnik tabelat Paga , Numri SSN. Qytetarët nuk kanë faj që kërkojnë koristuvaçë, të cilët nuk lejohen t'i shikojnë. Në këtë mënyrë, ne mund të krijojmë një njoftim, si p.sh. të zgjedhim kolonat në tabelë, si jo autorizuese, si p.sh. po , vіk ta etj., pa dhënë vërejtje kundërthënëse (p.sh., për rrogën etj., se si u hamendësuam më herët). Tani mund të shohim të lejuara për kërkesë të drejtpërdrejtë në tabela punonjës dhe thjesht ruajeni për lexim nga tema. Në këtë mënyrë, ne mund të realizojmë sigurinë për shikimet e ndihmës.

Procedura e zërit

KRIJO PROCEDURA [({HYRË|JASHTË|HYRË} [,…])]
[SET REZULTATEVE DINAMIKE ]
FILLOJ [ATOMIKE]

FUND

Fjalë kyçe
. IN (Input) – parametri hyrës
. OUT (Output) – parametri i daljes
. INOUT - hyrje dhe dalje, si dhe një fushë (pa parametra)
. SET DINAMIK I REZULTATEVE Tregon që procedura mund të specifikojë numrin e kursorëve, në mënyrë që procedura të mbyllet pasi të kthehet procedura.

Shënime
Nuk rekomandohet ndryshimi i shumë parametrave në procedurat që ruhen (për shembull, përpara numrave të mëdhenj dhe vargjeve të karaktereve) përmes rikthimit të stivit. Në praktikë, dialektet bazë të Transact-SQL, PL/SQL dhe Informix ruajnë konsistencën me standardin, si me parametrat e shprehur dhe të ndryshëm, ndryshimet e shprehura, si dhe për ndërfaqen e përdoruesit. Microsoft rekomandon ndalimin e përafrimit të radhës për të vlerësuar madhësinë e cache të procedurave që ruhen:
\u003d (numri maksimal i koristuvachiv pune një-orëshe) * (eksperimenti i planit më të madh të pjesëmarrjes) * 1.25. Në varësi të planit, anët mund të zgjerohen me ndihmën e komandës: DBCC MEMUSAGE.

Procedurat Viklik

Për DBMS-të e pasura, lista e procedurave që ruhen, përdoren për ndihmën e operatorit:

PROCEDURA E EKZEKUTIMIT [(][)]

shënim: Procedurat e ruajtjes së shpejtë mund të ruhen me programe, procedura të tjera që mund të ruhen ose në modalitetin ndërveprues.

Një shembull i procedurës së zërit

CREATE PROCEDURE Proc1 AS // trullos procedurën
DEKLAROJ Cur1 200 // trullos kursorin
HAPI Cur1 // hap kursorin
MERR TJETËR NGA Cur1 //lexo të dhënat nga kursori
NDERSA @@Fetch_Status=0
FILLOJ
MERR TJETËR NGA Cur1
FUND
CLOSE Cur1 // mbyll kursorin
DEALLOKO Cur1
EKZEKUTOHET Proc1 // ekzekutoni procedurën

Polimorfizmi
Dy nënprograme me të njëjtin emër mund të krijohen në një dhe të njëjtën skemë, pasi parametrat e këtyre dy nënprogrameve janë në një botë të tillë një lloj i një, në mënyrë që të mund të ndahen. Për të bërë dallimin midis dy nënprogrameve me emra të njëjtë në një skemë, lëkurës së tyre i jepet një emër alternativ dhe unik (emër specifik). Një im'ya i tillë mund të caktohet nëse një nënprogram është duke u zhvilluar. Kur thirrni një nënprogram për praninë e një numri të emrave të njëjtë, përcaktimi i nënprogrameve të kërkuara tarifohet për një kohë të vogël:
. Më shpesh, të gjitha procedurat caktohen nga emrat e caktuar, dhe nëse nuk ka të tillë, atëherë të gjitha funksionet nga emrat e caktuar.
. Për një analizë më të thellë, këto nënprograme janë braktisur, qindra danitale të tilla mund të privilegjohen për vikonannya (EKZEKUTIM).
. Їх zgjidhni ті, yakі mayut numrin e parametrіv në vіdpodіdaє numrin e argumenteve vikliku. Llojet dhe parametrat e caktuar të të dhënave të atyre pozicioneve janë rishikuar.
. Nëse ka humbur më shumë se një nënprogram, zgjidhet ai me kualifikimin më të shkurtër.
Në praktikën e Oracle, polimorfizmi lejohet për funksionet që ekspozohen vetëm në paketa, [email i mbrojtur]- Në skemat e tjera, dhe në Sybase dhe MS SQL Server, fokusi është i bllokuar.

Vidalennya dhe ndryshimi i procedurave
Për procedurën në distancë, operatori përdoret:

Për të ndryshuar procedurën, zgjidhet operatori:

PROCEDURA ALTER [([{HYRË|JASHTË|HYRË}])]
FILLOJ [ATOMIKE]

FUND

Privilegjet e procedurave vikonannya

EKZEKUTIMI I GRANTIT TE |PUBLIKE [ME OPSION GRANT]

Procedurat e sistemit
Një DBMS e pasur (përfshirë SQL Server) mund të ketë të njëjtin grup procedurash të sistemit, kështu që ju mund ta rregulloni atë për qëllimet tuaja.

Procedurat e ruajtjes

Subjekti i kësaj shpërndarjeje është një nga mjetet më të rëndësishme, i prezantuar tek shitësit me pakicë nga shtimi i bazave të të dhënave InterBase për zbatimin e logjikës së biznesit. dhe ndryshoni sasinë e kodit të kërkuar për vendosjen e detyrave Praktikisht është e mundur të përfundoni një program bazë të dhënash pa ndryshuar procedurat që ruhen.
Ndërsa ekziston një përzgjedhje e gjerë e procedurave që duhen ruajtur, të cilat janë të rëndësishme për shumicën e DBMS-ve relacionale, procedurat InterBase mund të luajnë rolin e grupeve praktikisht të plota të të dhënave, duke i lejuar ata të rrotullojnë rezultatet në pyetje specifike SQL.
Rosobnikët, duke shtyrë shpesh, duke mësuar procedurat soberezhezhe vetëm yak nabir e sql-zapitiv specifike, mut yaki me zell, dhe prazuvati është një milje e kohës, dhe niveli realisht i lartë.
Pra, cilat janë procedurat që ruhen në InterBase?
Procedura që ruhet (CP) është një pjesë e meta të dhënave të bazës së të dhënave, e cila përpilohet nga nënprogrami i brendshëm i aplikacionit InterBase, i shkruar në një gjuhë të veçantë, kompajleri që futet në bërthamën e serverit InteiBase.
Ruajtja e një procedure mund të thirret nga programet e klientit, nga nxitësit dhe procedurat e tjera që ruhen. Procedura ruhet në mes të procesit të serverit dhe ju mund të manipuloni të dhënat në bazën e të dhënave, si dhe të ktheni klientin se si të klikoni (ato shkaktues, HP, shtesa) rezultatet e fitores suaj
Baza e mundësive të vështira të përcaktuara nga HP është programimi i gjuhës procedurale, i cili mund të bëhet në magazinë e tij, si modifikimi i propozimeve të SQL-së së madhe, si INSERT, UPDATE dhe SELECT, si dhe organizimi i analizave dhe cikleve. (IF, WHILE), si dhe situatat dhe situatat e gabuara Procedurat Mova që ruhen lejojnë zbatimin e algoritmeve të palosshme për të punuar me të dhëna, dhe fokusi në punën me të dhënat relacionale të HP-së është dukshëm më kompakt për procedura të ngjashme me gjuhën tradicionale.
Duhet theksuar se këmbëza është fitimtare me të njëjtin programim, krimi është i ulët në karakteristika dhe kufi. Vіdmіnnostі pіdmіnnostі pіdnіzhini movi, scho vikoristovuєєtsya në trigery, vіd mivi KHP thuhet se është shqyrtuar në seksionin "Trigeri" (pjesa 1).

Një shembull i një procedure të thjeshtë që ruhet

Ka ardhur ora për të krijuar procedurën e parë, e cila ruhet, dhe në prapanicë її, procesi i krijimit të procedurave të ruajtjes. Ale për fillimin e radhës të them disa fjalë për ato, si të praktikohet me procedurat që ruhen. Dokumentacioni InterBase rekomandon krijimin e procedurave për skedarë shtesë në skriptet SQL, të cilat do të pastrojnë tekstin e CP, pasi ato dorëzohen në hyrjen e interpretuesit isql, dhe në këtë mënyrë, të krijoni atë modifikim të CP, si në këtë SQL. skripti në fazën e përpilimit të BLR në tekstin e procedurës BLR (rreth tekstit të procedurës BLR shih Rozdіl "Struktura e bazave të të dhënave InterBase" (pjesa 4)) falje syri, atëherë isql do t'ju tregojë për ato, në cilin rresht të SQL skedari i skriptit winkla tsya fal. Korrigjoni faljen dhe përsëritni gjithçka prapa pas shpine. Rreth nagodzhennya në kuptimin e përditshëm të fjalës, domethënë trasuvannya vykonannya, me mundësinë për t'u mrekulluar nga ndryshimi i kuptimeve të ndryshimit, nuk mund të dilni nga rruga juaj. Është e qartë se një pidhid i tillë nuk përputhet me rritjen e privatësisë së procedurave që ruhen në sytë e shitësit me pakicë.
Prote, krem ​​i qasjes standarde minimaliste për zhvillimin e HP<_\ществ\ют также инструменты сторонних разработчиков, которые делают работу с хранимыми процедурами весьма удобной Большинство универсальных продуктов для работы с InterBase, перечисленных в приложении "Инструменты администратора и разработчика InterBase", предоставляют удобный инструментарий для работы с ХП. Мы рекомендуем обязательно воспользоваться одним из этих инструментов для работы с хранимыми процедурами и изложение материала будем вести в предположении, что у вас имеется удобный GUI-инструмент, избавляющий от написания традиционных SQL-скриптов
Sintaksa e procedurave që ruhen përshkruhet nga hapi vijues:

Emri CREATE PROCEDURE
[(tipi i të dhënave param [, tipi i të dhënave param...])]
)]
AS
;
< procedure_body> = []
< block>
< vanable_declaration_list> =
Lloji i të dhënave DEKLARONI VARIABLE var;

=
FILLOJ
< compound_statement>
[< compound_statement> ...]
FUND
< compound_statement> = (deklaratë;)

Në dukje dosit e madhe dhe mund të jetë e rëndë, por në të vërtetë gjithçka është edhe më e thjeshtë.
Përsëri, boshti i prapanicës është një procedurë e thjeshtë që merret, pasi merr dy numra si hyrje, duke i mbledhur dhe kthyer rezultatin:

KRIJO PROCEDURE SP_Add(first_arg DOUBLE PRECISION,
second_arg SAKTËSI E DYFISHTË)
KTHIM (Rezultati SAKTËSI E DYFISHT)
AS
FILLOJ
Rezultati=argu_i_pari+argu_i_dyti;
PEZULLOJ;
FUND

Epo, gjithçka është e thjeshtë: pas komandës CREATE PROCEDURE, specifikohet emri i procedurës së krijuar rishtazi (e cila mund të jetë unike në kufijtë e bazës së të dhënave) - për këtë rënie SP_Add, pastaj për krahët, përmes të cilave parametrat hyrës të Llojet HP janë rivendosur - first_arg dhe second_arg - nga vlerat e caktuara.
Lista e parametrave të hyrjes në pjesën jogjuhësore të deklaratës CREATE PROCEDURE - skips përshkohet, nëse të gjitha të dhënat për procedurën e punës së tij merren për futje shtesë në tabelën në mes të trupit të procedurës.

Në procedurat që ruhen, ka lloje skalar të të dhënave InteiBase

Jepni fjalën kyçe KTHIM, pas së cilës parametrat rirregullohen në krahë, të cilët rrotullohen sipas llojeve të caktuara - në këtë kategori vetëm një - Rezultat.
Si procedura nuk është fajtore për rrotullimin e parametrave, fjalën KTHIM dhe listën e parametrave që do të rrotullohen, çdo ditë.
Pasi u specifikua fjala kyçe RETURNSQ AS. Përpara fjalës kyçe AS titull, dhe pas një të re - teko procedurat.
Trupi i procedurës, që është marrë, është një kopje e përshkrimeve të ndryshimeve të brendshme (lokale) (si erërat, do t'i shikojmë më poshtë), të cilat ndahen me një pikë pas një koma (;) dhe një bllok. të operatorëve, vendet në harkun e operatorit FILLO END. Në këtë rast, trupi i HP-së është edhe më i thjeshtë - ju kërkojmë të shtoni dy argumente hyrëse dhe t'i bashkëngjitni rezultatin atij dalës, dhe më pas të thirrni komandën SUSPEND. Trohi pіznіshe roz' është e qartë thelbi i komandës di ї tsієї, por për momentin është domethënëse që është e nevojshme për transmetimin e parametrave që kthehen atje, yjet e bula viklikan ruajtën procedurën.

Ndryshimet në procedurat që ruhen

Respektoni se operatori në mes të procedurës do të përfundojë me një njollë me koma (;). Me sa duket, pika me të cilën distributori standard i komandës SQL është jashtë është një sinjal për interpretuesin SQL që teksti i komandës hyrëse është i saktë dhe duhet të përpunohet. Chi nuk shoh kështu, scho, duke treguar një njollë me koma në mes të HP, përkthyesi SQL njeh që komanda është futur saktësisht dhe përpiqet të vikonat një pjesë të procedurës, çfarë merret? Tse pripuschennya nuk maє sensu. Për shembull, nëse krijoni një skedar, në të cilin rast mund të shkruani udhëzime, të shtoni një komandë për të filluar nga baza e të dhënave dhe të provoni skriptin SQL për ndihmën e interpretuesit isql, atëherë falja do të kthehet, do të dalë të jetë i papërshtatshëm, në mendimin e përkthyesit, përfundimi i komandës krijimi i procedurave që merren. Për të ruajtur procedurat për skedarë shtesë të skriptit SQL, pa përdorur mjete të specializuara të roamer-it InterBase, është e nevojshme përpara se komanda skin për të krijuar HP (e njëjta gjë vlen edhe për shkaktarët) të frymëzojë jogën. Komanda isql, e cila ndryshon ndarjen e propozimeve SQL, duket si kjo:

VENDOSJE AFAT

Për një mënyrë tipike të krijimit të një procedure, ajo që kujdeset duket kështu:

VENDOSI AFATIN ^;
KRIJO PROCEDURE disa_procedurë
... . .
FUND
^
VENDOSI AFATIN ;^

Procedurat e kursimit javor

Le t'i drejtohemi procedurës sonë, për çfarë të kujdesemi. Tani, nëse është krijuar, kërkohet të thërrasë, të kalojë parametrat dhe të marrë rezultatet që rrotullohen. Është edhe më e lehtë për ta bërë këtë - mjafton të shkruani një pyetje SQL për një pamje fyese:

ZGJIDH *
NGA Sp_add (181.35, 23.09)

Tsei na kërkon të kthejmë një rresht tek ne, i cili do të heqë vetëm një fushë Rezultati, në të cilën do të ndryshohet shuma e numrave 181.35 dhe 23.09, pastaj 204.44.
Në këtë mënyrë, procedura jonë mund të hakohet në pyetje të veçanta SQL, të cilat hakohen si në programet e klientëve, si dhe në HP ose triggers të tjerë. Ky variacion i procedurës sonë u bë i mundur duke shtuar komandën SUSPEND në fund të procedurës që do të ndërmerret.
Në të djathtë, në InterBase (dhe në të gjitha klonet e saj) ruhen dy lloje procedurash: procedura të përzgjedhshme dhe procedura të ekzekutueshme. Fakti që robotët kanë dy lloje të HP-së lidhet me faktin se procedurat e përzgjedhjes kërkojnë të rrotullohen një grup jopersonal parametrash hyrës që janë grupuar në një rresht, pasi ato mund të shikojnë një grup të dhënash, dhe procedurat e vikonimit ose nuk mund të rrotulloni parametrat, ose ata mund t'i rrotullojnë ato vetëm në Kthimet, nga një rresht i parametrave. Procedurat e zgjedhura thirren pranë pyetjeve SELECT, dhe procedurat që thirren ndjekin ndihmën e komandës EKZEKUTIMI PROCEDURE.
Duke u ofenduar duke parë procedurat që ruhen, sintaksa e njëjtë e krijimit dhe formalisht nuk sfidojnë asgjë, atëherë nëse procedura mund të përdoret në pyetjen SELECT dhe nëse procedura-përzgjedhja është për ndihmën e PROCEDURES EXECUTE. Ushqimi është në mënyrën se si CP sillet me lloje të ndryshme ligësie. Me fjalë të tjera, ndryshimi është i ndryshëm në hartimin e procedurës për llojin e këndimit të të përjavshmes. Pra, procedura e përzgjedhjes krijohet posaçërisht për pyetjen e pyetjes SELECT, dhe procedura e përzgjedhur krijohet posaçërisht për pyetjen EXECUTE PROCEDURE. Le të hedhim një vështrim se cilat fuqi merren parasysh gjatë projektimit të këtyre dy llojeve të HP.
Për të kuptuar, si të praktikoni procedurën-dridhje, për të hyrë pak në teori. Le të marrim një pyetje të thjeshtë SQL si SELECT ID, EMRI NGA Tabela_shembull. Si rezultat i kësaj, marrim parasysh tabelën e daljes, e cila përbëhet nga dy kolona (ID dhe EMRI) dhe të njëjtin numër rreshtash (numër të barabartë rreshtash për tabelën Table_example). E kthyer në rezultatet e këtij pyetësori, tabela quhet gjithashtu një grup të dhënash SQL. . Pastaj serveri lexon rekordin e lëkurës, i cili dorëzon rezultatet e kërkesës, zgjedh fushat e kërkuara prej tij (në rastin e ID dhe EMRI) dhe i dërgon mesazhin klientit. Le të përsërisim procesin përsëri - dhe kështu për rekord të dridhjeve të lëkurës.
Të gjithë hapat janë të nevojshëm që një lexues i zgjuar të kuptojë se të gjitha grupet e të dhënave SQL janë formuar në një rresht, duke përfshirë procedurat që ruhen! Vіdminnist kryesor i procedurave - zgjedhja e procedurave, të cilat bazohen në faktin se të parat janë krijuar për kthimin e rreshtave pa fytyrë, dhe të tjerët - vetëm për një. Kjo është arsyeja pse era e keqe zastosovyatsya në një mënyrë tjetër: zgjedhja e procedurës kërkon ndihmën e komandës SELECT, si "wimage" në procedurë për të kontrolluar të gjitha të dhënat, në mënyrë që të mund ta ktheni atë. Procedura, e cila quhet, thirret për ndihmën e EKZEKUTIMIT PROCEDURA, si "wiymaє" nga HP vetëm një rresht, dhe reshta (navit yakshcho erë e keqe!) Ignore.
Le t'i hedhim një sy shembullit të procedurës së përzgjedhjes, në mënyrë që të bëhet më e qartë. Për > Falje, le të ruajmë procedurën, yak pratsyuє kështu njëlloj, yak zap SELECT ID, EMRI NGA Tabela_Shembull, kështu që nuk do të mund të zgjidhni fushat ID і EMRI z usієї. Aksi i prapanicës:

KRIJO PROCEDURE Simple_Select_SP
KTHIMI (
procID INTEGER,
procNAME VARCHAR(80))
AS
FILLOJ
PËR
SELECT ID, EMRI NGA tabela_shembull
INTO:procID, :procNAME
BËJ
FILLOJ
PEZULLOJ;
FUND
FUND

Le të hedhim një vështrim në procedurën e quajtur Simple_Select_SP. Në fakt, nuk ka parametra hyrës dhe dy parametra dalës - ID dhe EMRI. Naytsіkavіshe, zvichayno, polagaє në procedurën tіlі. Këtu është konstrukti FOR SELECT:

PËR
SELECT ID, EMRI NGA tabela_shembull
INTO:procID, :procNAME
BËJ
FILLOJ

/* duhet të ndryshojmë procID dhe procName */

FUND

Kjo pjesë e vogël e kodit nënkupton një hap: për rreshtin e lëkurës, të zgjedhur nga tabela Table_example, zgjidhni vlerën e ndryshimit procID dhe procName, dhe më pas shtoni vlerën e ndryshimit.
Mund të përpunoni pamjen dhe të kërkoni: "Ndrysho? Si të ndryshojë ndryshe 9" Nëse është e ngjashme me habinë e ndryshimit - ata që janë në procedurat që ruhen, ne mund ta fitojmë ndryshimin. Në gjuhën e HP-së, ju mund të tingëlloni si një ndryshim lokal në mes të procedurës dhe të mposhtni parametrat e hyrjes dhe të daljes si të ndryshuar.
Për të shprehur ndryshimin lokal në procedurën që po ruhet, është e nevojshme të përfshihet një përshkrim pas fjalës kyçe AS dhe para fjalës së parë BEGIN. Përshkrimi i ndryshimit lokal duket si ky:

DEKLAROJ NDRYSHIMIN ;

Për shembull, për të shpallur kohëzgjatjen e ndryshimit lokal Mylnt, është e nevojshme të futet midis përshkrimit fyes AS dhe BEGIN

DEKLARONI NDRYSHORIN MyInt INTEGER;

Ndryshimet në të pasmet tona bëhen nga dy pjesë. Arsyeja është se është e nevojshme ndryshimi i tyre në mes të komandës SQL FOR SELECT, për të ndarë fushat në tabelat që janë zgjedhur në SELECT dhe për t'i ndryshuar ato duhet transferuar pjesën tjetër të dyfisheve. Edhe nëse ndryshoni, mund të emërtoni të njëjtin emër, si fushat në tabela!
Ale dvokrapka përpara emrit të ndryshimit është e nevojshme për të fituar vetëm në mes të pyetjeve SQL. Pozoni me tekstet e bishës për të luftuar deri në vdekje pa dvokrapka, për shembull:

procName="Disa emër";

Le t'i drejtohemi trupit të procedurës sonë. Propozimi FOR SELECT rrotullon të dhënat mbi tabelat vizuale - një grup të dhënash dhe, një rresht në një kohë. Fusha e lëkurës që rrotullohet mund të vendoset në ndryshimin e saj: ID => procID, EMRI => procName. Në një pjesë të DO dhe ndryshimet i kërkohen klientit, i cili thirri procedurën> p>, për ndihmën e komandës SUSPEND
Në këtë mënyrë, komanda FOR SELECT... DO organizon një cikli të rekordeve që zgjidhen në pjesën SELECT të komandës. Në të njëjtin cikël, i cili është pjesë e DO, përfundon transferimi i regjistrimit të hartuar te klienti pas komandës shtesë SUSPEND.
Gjithashtu, procedura-përzgjedhja njihet për rrotullimin e një ose më shumë rreshtave, për të cilat organizohet një cikël në mes të trupit të HP, i cili do të rivendosë ndryshimet e parametrave që rezultojnë. Për shembull, komanda SUSPEND duhet të përdoret për ciklin e fundit të ciklit, sikur ta kthejë rreshtin e të dhënave te klienti.

Ciklet dhe operatorët

Komanda Crim FOR SELECT... DO, e cila organizon një cikël nga të dhënat e çdo zgjedhjeje, një lloj tjetër cikli - WHILE...DO, që ju lejon të organizoni një cikël mbi bazën e një riverifikimi të çdo mendjeje. Aksi aksioneve HP, cikli i karrierës vikoristovu NDERSA. BËJ. Kjo procedurë rrotullon katrorët e numrave të plotë nga 0 në 99:

CREATE PROCEDJRE QUAD
KTHIMET (KUADRAT INTEGER)
AS
DEKLAROJ NDRYSHORIN I INTEGER;
FILLOJ
i = 1;
Nderkohe une<100) DO
FILLOJ
KUADRAT=I*I;
I=I+1;
PEZULLOJ;
FUND
FUND

Si rezultat i kërkesës SELECT FROM QUAD, na duhet një tabelë që do të zëvendësojë një rresht të QUADRAT, i cili do të ketë katrorë të numrave të plotë nga 1 në 99.
Për të numëruar rezultatet e dridhjes SQL dhe ciklit klasik, në procedurat e lëvizjes që ruhen, zgjidhet operatori IF...THEN..ELSE, i cili ju lejon të organizoni përcaktimin në gabim në falsifikim në prapavijë në e ardhmja, pavarësisht nëse sintaksa është apo jo e ngjashme me shumicën e operatorëve të dekompresionit në programimin e lëvizjeve të nivelit të lartë, në katrorin e Paskalit dhe Cі.
Le të hedhim një vështrim në shembullin e palosshëm të procedurës që po ruhet, për të grabitur këmbët.

  1. Llogaritni çmimin mesatar në tabelën Tabela_shembull (ndarja "Tabelat kryesore dhe gjeneratorët kryesorë")
  2. Dali që rekordi i lëkurës në tabelë të fillojë ri-kontrollimin, pasi çmimi kryesor (ÇMIMI) është më i lartë se çmimi mesatar, më pas vendos çmimin të barabartë me vlerën e çmimit mesatar, plus vendos fiksimin e ujit.
  3. Nëse çmimi është më i ulët ose më i lartë se çmimi mesatar, atëherë vendosni çmimin të barabartë me çmimin total, plus gjysmën e çmimit të shitjes me pakicë ndërmjet atij çmimi mesatar.
  4. Rrotulloni të gjitha ndryshimet e rreshtave në tabelë.

Për kalli, emri i HP është i rëndësishëm, si dhe parametrat e hyrjes dhe daljes. Gjithçka shkruhet në kokën e procedurës, e cila ruhet

KRIJO PROCEDURE Rritja e Çmimeve(
Përqindja 2 Rrite SAKTËSInë e dyfishtë)
KTHIM (ID INTEGER, EMRI VARCHAR(SO), new_price DOUBLE
PRECISION AS

Procedura do të quhet IncreasePrices, ka një parametër hyrës Peiceni21nciease, i cili mund të jetë i tipit DOUBLE PRECISION, dhe 3 parametra hyrës - ID, EMRI dhe new_pnce. Ju lutemi vini re se dy parametrat e parë mund të kenë të njëjtët emra, si fushat në tabelën Table_example, me të cilat ne zgjedhim të analizojmë. Tse lejohet nga rregullat e procedurave të lëvizjes, të cilat ruhen.
Tani është faji ynë për të shprehur ndryshimin lokal, në mënyrë që të jeni fitimtar për të ruajtur vlerën mesatare. Do të dukeni kështu:

DEKLAROJ NDRYSHIMIN mesatar_çmimin PRECISION DYFISH;

Tani le të kalojmë në trupin e procedurës, për të cilën kujdeset Fjala kyçe FILLO.
Ne duhet të numërojmë herën e parë për algoritmin tonë - të llogarisim çmimin mesatar. Për të cilët po përshpejtojmë me një kërkesë të këtij lloji:

SELECT AVG (çmimi_l)
NGA Tabela_Shembull
INTO:çmimi_mesatar,-

Kjo do të ushqejë funksionin e agregatit të ndryshores AVG, në mënyrë që të rrotullojë vlerën mesatare të fushës PRICE_1 të mesatares së rreshtave të zgjedhur - në rastin tonë, vlerën mesatare prej PRICE_1 për të gjitha tabelat Tabela_shembull. Vlera që rrotullohet nga kërkesa vendoset në ndryshimin mesatar_çmimi. Për të rikthyer respektin, i cili ndryshohet avg_pnce përballë një dyshe, për të ringjallur ujërat që janë fitimtarë në kërkesë.
E veçanta e kësaj kërkese janë ata që gjithmonë kontrollojnë rreptësisht një hyrje të vetme. Kërkesa të tilla quhen kërkesa të vetme dhe vetëm zgjedhje të tilla mund të zgjidhen në procedurat që ruhen. Nëse dëshironi të rrotulloni më shumë se një rresht, atëherë është e nevojshme të hartoni një strukturë FOR SELECT ... DO në mënyrë që të organizoni një cikël për përpunimin e rreshtit të lëkurës që rrotullohet.
Otzhe, kemi marrë vlerën mesatare të çmimit. Tani është e nevojshme të kalojmë nëpër të gjitha tabelat, të krahasojmë vlerën e çmimit në rekordin e lëkurës me çmimin mesatar dhe të jetojmë në
Në kalli organizojmë renditjen e rekordit të lëkurës nga tabela Tabela_shembull

PËR
SELECT ID, EMRI, PRICE_1
NGA Tabela_Shembull
INTO:ID, :NAME, :new_price
BËJ
FILLOJ
/*_këtu hapim rekordin e lëkurës*/
FUND

Kur dizajni ndryshohet nga tabela Table_example, të dhënave dhe vlerave të ujitjes në rreshtin e lëkurës do t'u jepet një ID e ndryshuar, EMRI dhe new_pnce. Ju, natyrisht, mbani mend se të dhënat e zgjedhura do të rrotullohen si rezultat, jo varto: fakti që parametrat e daljes janë caktuar nuk do të thotë që klienti refuzon vlerën qi të klientit HP! Transferimi i parametrave është i mundur vetëm kur komanda SUSPEND është e çaktivizuar, dhe para kësaj ne mund të ndryshojmë parametrat e paracaktuar si ndryshim primar - në aplikacionin tonë, ne gjithashtu punojmë me parametrin new_price.
Gjithashtu, në mes të trupit të ciklit BEGIN.. END, mund të modifikojmë vlerën e rreshtit të lëkurës. Siç e mbani mend, është e nevojshme që ne të dimë, si një çmim thelbësor, të ngrihemi nga mesatarja dhe të jetojmë në kohët e vjetra. Procedura Qiu për përputhjen e mi zbatohet për ndihmën e operatorit IF:

NËSE (çmimi_i_ri > çmimi_mesatar) THËNË /*kështu që çmimi aktual është më i lartë për çmimin mesatar*/
FILLOJ
/*pastaj vendosni një çmim të ri, të barabartë me vlerën e çmimit mesatar, plus fiksimin e qindrave */
çmimi_i_ri = (çmimi_mesatar + çmimi_mesatar*(Përqindja2Rritje/100));
Përditëso tabelën_shembull
SET PRICE_1 = :new_price
KU ID =: ID;
FUND
TJETER
FILLOJ
/* Nëse çmimi aktual është më i vogël ose më shumë se çmimi mesatar, atëherë do të vendosim çmimin të barabartë me çmimin total, plus gjysmën e çmimit të shitjes me pakicë ndërmjet atij çmimi mesatar */
çmimi_i_ri = (çmimi_i_ri + ((çmimi_mes_pnce_i_ri)/2)) ;
Përditëso tabelën_shembull
SET PRICE_1 = :new_price
KU ID = .ID;
FUND

Si një bachite, ishte e mrekullueshme për të përfunduar ndërtimin e madh IF, është e rëndësishme për të diskutuar atë, kështu që mos komentoni, si të shkruani në simbolin /**/.
Për të ndryshuar çmimin në të njëjtën mënyrë me shitjen me pakicë të llogaritur, ne shpejtojmë operatorin UPDATE, i cili ju lejon të modifikoni të dhënat aktuale - një ose më shumë. Për të treguar pa mëdyshje se në cilin rekord duhet të ndryshoni çmimin, ne do të fitojmë për të kuptuar fushën WHERE të çelësit primar, e barabartë me vlerën e ndryshimit, në të cilën vlera e ID-së merret për regjistrimin e transmetimit: ID =: ID. Kapni respektin që ID-ja ndërrohet para dyshekut.
Pas ndryshimit të konstruksionit IF...THEN...ELSE, ID-ja e ndryshuar, EMRI dhe new_price kanë të dhëna, pasi është përgjegjësia jonë të kthejmë klientin për të thirrur procedurën. Për NESE tjetër është e nevojshme të futet komanda SUSPEND, në mënyrë që të dhënat të dërgohen atje, yjet quhen HP. SELECT...DO nuk përsëritet mbi të gjitha regjistrimet në pyetjen tuaj.
Është e nevojshme të specifikohet që të përdoret komanda SUSPEND, në mënyrë që të ruhet vetëm procedura që do të ruhet, të përdoret komanda EXIT, në mënyrë që procedura të ruhet pas bartjes së rreshtit. Sidoqoftë, komanda EXIT rrallë duhet të plotësohet, çipat nevojiten kryesisht për të ndërprerë ciklin në arritjen e mendjes.
Në rast të rikthimit, nëse procedura thirret nga deklarata SELECT dhe përfundon me EXIT, rreshti i mbetur nuk do të rrotullohet. Tobto, nëse keni nevojë të ndërprisni procedurën dhe të vazhdoni të merrni rreshtin, duhet të shpejtoni sekuencën

PEZULLOJ;
DALJE;

Karakteristika kryesore e EXIT është zgjedhja e grupeve të të dhënave njëtonëshe, të cilat rrotullohen parametrat në shkurtore përmes PROCEDURËS SË EKZEKUTIMIT. Në këtë rast, vendosen vlerat e parametrave të jashtëm, por mbledhja e të dhënave SQL nuk formohet dhe procedura përfundon.
Le të shkruajmë përsëri tekstin e procedurës sonë, në mënyrë që nëna ta kuptojë këtë logjikë me një shikim:

KRIJO PROCEDURE Rritja e Çmimeve(
Përqindja 2 Rrite SAKTËSInë e dyfishtë)
KTHIM (ID INTEGER, EMRI VARCHAR(80),
çmimi_i ri SAKTËSIA E DYFISHTE) AS
DEKLAROJ NDRYSHIMIN mesatar_çmimin PRECISION DYFISH;
FILLOJ
SELECT AVG (çmimi_l)
NGA Tabela_Shembull
INTO:çmimi_mesatar;
PËR
SELECT ID, EMRI, PRICE_1
NGA Tabela_Shembull
INTO:ID, :NAME, :new_price
BËJ
FILLOJ
/*këtu përpunojmë rekordin e lëkurës*/
IF (new_pnce > avg_price) THËNË /*kështu që çmimi aktual është më i lartë për çmimin mesatar*/
FILLOJ
/*vendos një çmim të ri, të barabartë me çmimin mesatar, plus fiksimin e qindrave */
çmimi_i_ri = (çmimi_mesatar + çmimi_mesatar*(Përqindja2Rritje/100));
Përditëso tabelën_shembull
SET PRICE_1 = :new_price
KU ID =: ID;
FUND
TJETER
FILLOJ
/* Nëse çmimi aktual është më i vogël ose më shumë se çmimi mesatar, atëherë vendos çmimin të barabartë me çmimin total, plus gjysmën e çmimit të shitjes me pakicë midis shumës dhe çmimit mesatar */
çmimi_i_ri = (çmimi_i_ri + ((çmimi_mesatar - çmimi_i_ri)/2));
Përditëso tabelën_shembull
SET PRICE_1 = :new_price
KU ID =: ID;
FUND
PEZULLOJ;
FUND
FUND

Shembulli danez i procedurës që ruhet, duke ilustruar zhvillimin e konstruksioneve kryesore të procedurave dhe nxitësve të kursimit të lëvizjes. Le të shohim mënyrat për të rregulluar procedurat që ruhen për përmbushjen e disa detyrave të fajësuara shpesh.

Procedurat rekursive që ruhen

Procedurat InterBase që ruhen mund të jenë rekursive. Tse do të thotë që procedurat që ruhen, mund t'i telefononi vetes. Lejohen deri në 1000 procedura të barabarta, të cilat ruhen, megjithatë, duhet të mbani mend se burimet e disponueshme në server mund të mbarojnë më herët, duke ulur investimin maksimal të HP-së.
Një nga gamën më të gjerë të procedurave që ruhen është përpunimi i strukturave të ngjashme me pemët që ruhen në bazën e të dhënave. Pemët shpesh vikorohen në menaxhimin e magazinës, magazinës, personelit dhe shtesave të tjera të gjera.
Le të hedhim një vështrim në shembullin e procedurës që merret, si të përzgjedhim të gjitha mallrat e të njëjtit lloj, duke filluar nga investimi i parë i barabartë.
Më lejoni të vij në deklaratën e detyrës: a mund të sjell mallra me një strukturë hierarkike të këtij lloji:

Mallrat
- Teknika e Pobutovës
- Frigoriferë
- Tre dhoma
- Dy dhomash
- Dhoma e vetme
- Makinat e pastrimit
- Vertikale
- frontale
- Klasike
- Vuzki
- Teknologji kompjuterike
....

Tsya struktura dovіdnika categorіy varіv_v mund nëna g_lki raznoї glibini. dhe gjithashtu ndërtohet me kalimin e kohës. Detyra jonë është të ofrojmë një përzgjedhje të të gjitha elementeve të fundditës nga “recitimi i emrit të përbashkët”, duke filluar nga çdo vuzla. Për shembull, nëse zgjedhim "Makinat Palny", atëherë duhet të marrim parasysh kategoritë e mëposhtme:

Makinat e prerjes - Vertikale
Makina frontale - Frontal classic
Makina frontale - Makina ballore më të larta

Struktura e tabelave është e rëndësishme për mbledhjen e informacionit për ecurinë e mallrave. Unë kam thjeshtuar skemën për organizimin e një peme në një tabelë:

KRIJO TABELË GoodsTree
(ID_GOOD INTEGER JO NULL,
ID_PARENT_GOOD INTEGER,
GOOD_NAME VARCHAR(80),
kufizim pkGooci çelësi primar (ID_GOOD));

Ne krijojmë një tabelë GoodsTree, në të cilën ka vetëm 3 fusha: ID_GOOD - një identifikues i arsyeshëm i kategorisë, ID_PARENT_GOOD - një identifikues për kategorinë e dhënë dhe GOOD_NAME - emri i kategorisë. Për të siguruar integritetin e të dhënave për këtë tabelë, ne e vendosim atë në tryezë për shkëmbimin e çelësit të thirrjes:

ALTER TABLE GoodsTree
SHTO KUFIZIM FK_goodstree
ÇELËSI I HUAJ (ID_PARENT_GOOD)
REFERENCAT GOODSTPEE (ID_GOOD)

Tabela është vetë-mbështetëse dhe i njëjti çelës i vjetër duhet të ndiqet prej saj. schob në tryezë buv posilan mbi baballarët e panjohur, і navіt reshkodzhaє përpiquni të shihni kategorinë e mallrave, yakі mayut nashchadki.
Le ta sjellim atë në tabelën tonë të të dhënave të ardhshme:

ID_MIRA

1
2
3
4
5
6
7
8
9
10
11
12

ID_PARENT_GOOD

0
1
1
2
2
4
4
4
5
5
10
10

EMËR I MIRË

MALLRAT
Teknika Pobutov
Kompjuterë dhe aksesorë
Frigoriferë
Makinat e pastrimit
Tridhoma
me dy dhoma
Dhoma e vetme
Vertikale
Frontale
Vuzki
klasike

Tani, nëse kemi një vend për ruajtjen e të dhënave, mund të vazhdojmë me krijimin e një procedure kursimi, e cila do të shohë heqjen e të gjitha kategorive "të mbetura" të mallrave nga ajo "e djegur" - për shembull, për kategorinë ". Tre dhomat" jashtë kategorisë do të duken si " Frigoriferë Pobutov tehnіka Trikamernі".
Procedurat që kujdesen për strukturat e ngjashme me pemën kanë zhvilluar terminologjinë e tyre. Elementi i lëkurës së një peme quhet nyjë; dhe bluzat mes nyjeve, që janë strukur një mbi një, quhen çizmet e plakut. Vuzli, të cilat ndodhen në fund të pemës dhe nuk bëjnë naschadkiv, quhen "gjethe".
Për çdo procedurë që do të ruhet, parametri i hyrjes do të jetë identifikuesi i kategorisë, për disa arsye ne do të fillojmë renditjen. Procedura e maturës ruhet si kjo:

KRIJO PROCEDURE GETFULLNAME (ID_GOOD2SHOW INTEGER)
RETURNS (FULL_GOODS_NAME VARCHAR(1000),
ID_CHILD_GOD INTEGER)
AS
DEKLAROJ NDRYSHIMIN CURR_CHILD_NAME VARCHAR(80);
FILLOJ
/*0rgan_zuєmo cikli zovnіshnіy FOR SELECT për etiketat e produkteve bezporednіmi me ID_GOOD=ID_GOOD2SHOW */
PËR ZGJEDHJE gtl.id_good, gtl.good_name
NGA GoodsTree gtl
WHERE gtl.id_parent_good=:ID_good2show
INTO:ID_CHILD_GOOD, :full_goods_name
BËJ
FILLOJ
/"Kontrollo për një funksion shtesë EXISTS, prandaj kthehu TRUE, sikur do të duhej një rresht në kthesën e krahëve. Nëse nyja e gjetur ID_PARENT_GOOD = ID_CHILD_GOOD nuk ka shkurtore, atëherë ajo është një "gjethe" e pemës dhe konsumohet si rezultat */
NËSE (NUK EKZISTON(
ZGJIDH * NGA GoodsTree
WHERE GoodsTree.id_parent_good=:id_child_good))
PASTAJ
FILLOJ
/* Kaloni harkun e pemës në rezultat */
PEZULLOJ;
FUND
TJETER
/* Për nyje, si të bësh lidhëse */
FILLOJ
//
CURR_CHILD_NAME=emri_plotë i mallrave;
/* ekzekuto procedurën time në mënyrë rekursive */
PËR
ZGJIDH ID_CHILD_GOOD,emri_plotë i mallit
NGA GETFULLNAME (:ID_CHILD_GOOD)
INTO:ID_CHILD_GOOD, :full_goods_name
FILLO
/*dodaєmo për vuzla-babin tek i njohuri. */
full_goods_name=CURR_CHILD_NAME| "" | f ull_emri_mallrave,-
PEZULLOJ; /* ktheni mallrat*/
FUND
FUND
FUND
FUND

Nëse e përdorim këtë procedurë me parametrin e hyrjes ID_GOOD2SHOW=1, atëherë marrim sa vijon:

Si një bachite, për ndihmën e një procedure rekursive që ruhet, kaluam nëpër të gjithë pemën e kategorive dhe nxorrën emrat e kategorive - "gjethe", sikur të gjendeshin në majat e gjetheve vetë.

Visnovok

Në këtë pikë përfundojmë shqyrtimin e mundësive kryesore të procedurave të mia, të cilat ruhen. Natyrisht, për të zotëruar zbërthimin e procedurave që ruhen kur leximi i një ndarjeje është i pamundur, jemi përpjekur të zbulojmë dhe shpjegojmë konceptet kryesore që lidhen me procedurat e ruajtjes. Përshkrimet e dizajnit dhe dizajnit të HP mund të gjenden në shumicën e bazave të të dhënave
Një pjesë e ushqimit të rëndësishëm, që lidhet me koston e procedurave që kursehen, do të zbulohet në rubrikën e ardhshme - "Zgjerimi i mundësisë së kursimit të procedurave ndërbazë", pasi shoqërohet me fajin e përgjithshëm, vir_shennu të situatave të faljes në procedurat që ruhen nga robotët.

Në krye të këtij cikli, bota shikonte se si është e mundur të nxirren të dhëna nga tabela, të modifikohen strukturën e saj, të krijohen, modifikohen dhe të shikohen bazat e të dhënave dhe objektet që janë të fshehura në to. Në këtë artikull, ne do të flasim më shumë për objektet që janë tipike për serverin DBMS: njoftimet, nxitësit dhe procedurat që ruhen.

Në artikullin e parë të këtij cikli, botuar në nr. 3'2000 të ditarit tonë, ne treguam se shumica e serverëve aktualë DBMS mbështesin njoftimet, aktivizuesit dhe procedurat që ruhen. Paraqitjet mbështeten gjithashtu nga bugatma DBMS, për shembull Access, dBase, Clipper.

Specifikoni që nxitësit dhe procedurat që ruhen duhet të shkruhen në gjuhën e programimit, të cilat janë zgjerime procedurale të gjuhës SQL. Deklaratat e zgjeruara ju lejojnë të përshkruani algoritme, për shembull, do...ndërsa, nëse...atëherë...tjetër, të përdorura në vetë gjuhën SQL. На відміну від мови SQL, що підпорядковується стандарту, його процедурні розширення ніяк не стандартизовані, і різні СУБД використовують різні синтаксичні конструкції для реалізації тих самих алгоритмічних конструкцій, але обговорення відмінностей у синтаксисі розширень SQL для різних СУБД виходить за рамки цієї статті.

Për të ilustruar se si është e mundur të shtrembërohet pamja, aktivizuesit dhe procedurat që ruhen, ne zgjodhëm Microsoft SQL Server 7.0 dhe bazën e të dhënave NorthWind, e cila përfshihet përpara grupit të dorëzimit të DBMS.

Para së gjithash, aplikoni, respektoni ata që zbatojnë dhe ruajnë nxitësit dhe procedurat që janë fitimtare në DBMS, mund të konsiderohen se tregojnë këto statistika. Përveç kësaj, për krijimin e objekteve të serverit, lejohen nënat e mëposhtme, sikur të jepet administratori i bazës së të dhënave.

Është gjithashtu domethënëse që disa drejtues ODBC nuk mbështesin ciklin e procedurave, të cilat ruhen nga shtesat e klientit, por kështu mbështetet vetë DBMS. Mbroni në të njëjtën mënyrë procedurat që ruhen, sa më shpejt që të jetë e mundur, mund të eliminohen nga shkaktarët.

Le të shohim faktet, më pas të diskutojmë procedurat që ruhen dhe të përfundojmë duke parë shkaktarët.

Pamja e jashtme

Dorëzimi - tse tabela virtuale, shënoni numrin e kolonave të njërës prej numrit të tabelave. Nuk ka të dhëna reale për t'u hakmarrë, vetëm një pyetje SQL e llojit SELECT, që tregon të njëjtat të dhëna dhe nga cilat tabela duhet të merren kur ktheheni në paraqitjen e parë. Z tsієї pikë zoru yavlennya - tse ask, scho zberіgaєtsya.

Shumica e vipadkiv janë paraqitur me fitore për sigurinë e të dhënave. Për shembull, dhjakët e kategorisë coristuvachiv mund të aksesohen para se të shfaqen, por jo në një tabelë, ata mund të formojnë të dhëna; Përveç kësaj, kërkesa SQL mund të vendosë parametrin USER (emri, nën të cilin koristuvach është regjistruar), dhe në këtë rast të dhënat e disponueshme kur të ktheheni në datën do të bien nën emrin e koristuvach.

Më poshtë janë karakteristikat kryesore të manifestimit:

  • yavlennya sillet si një tryezë;
  • manifestuar për të mos hakmarrë të dhënat;
  • Paraqitjet mund të fitojnë më shumë të dhëna nga e njëjta tabelë.

Për të krijuar paraqitje, ne mund të shkulim propozimin SQL CREATE VIEW, ta modifikojmë me propozimin ALTER VIEW dhe ta fshijmë me propozimin DROP VIEW.

Le të shohim deklaratën CREATE VIEW, e cila ju lejon të krijoni një pamje për një bazë të dhënash transmetimi.

KRIJO PARAQITJE propozim

Sintaksa e propozimit për krijimin e një deklarate merr me mend propozimin SQL SELECT me një numër fjalësh kyçe shtesë. Më poshtë është një sintaksë e thjeshtë:

KRIJO PARAQIT emrin e_pamjes SI selektim_deklaratë

Argumenti view_name specifikon emrin e pamjes. Fjala kyçe, e cila përputhet në Microsoft SQL Server, ju lejon të bashkëngjitni tekstin origjinal të propozimit CREATE VIEW në tabelën e syscomments.

Fjala kyçe AS tregon se cila pyetje SELECT është në të vërtetë e zbatueshme kur kthehet përpara paraqitjes. Kujdes se kërkesa nuk mund të zëvendësojë fjalët kyçe ORDER BY, COMPUTE ose COMPUTE BY, INTO dhe nuk mund t'i referohet orarit.

Për të modifikuar deklaratën e krijuar më parë, ndiqni propozimin ALTER VIEW, siç përshkruhet në seksionin fyes.

Propozimi DOP VIEW

Tsya propozim vikoristovuєtsya për vydalannya vyavlennya z da nih. Kur shihni tabelat nga baza e të dhënave, mund të shihni të gjitha deklaratat që i referohen asaj. Vikoristovuyuchi tsyu propozim, ne jemi fajtorë për të thënë im'ya vyavlennya, scho parë. Pasi të shihet, të gjitha informacionet për të renë shihen nga tabelat e sistemit.

Edhe një gjë, nëse duhet ta shihni, mund ta fajësoni për mendjen tuaj që struktura e tabelave, mbi të cilat bazohet, ka ndryshuar pas krijimit të fenomenit. Mund ta shihni vistava-n në këtë pamje dhe më pas ta krijoni përsëri për propozimin shtesë "KRIJO PAMJE".

Krijimi dhe manifestimi vikoristannya

Propozimi CREATE VIEW përdoret për të krijuar një deklaratë që ju lejon të ndryshoni të dhënat, sikur ato t'u jepeshin këngëtarëve. Parashtresat krijohen në bazën aktuale të të dhënave dhe mblidhen si objekt.

Mënyra më e mirë për të krijuar një paraqitje është të krijoni një pyetje SELECT dhe, pasi e keni keqinterpretuar atë, shtoni pjesën që mungon në propozimin CREATE VIEW. Le t'i hedhim një sy tekstit dalës të deklaratës së produkteve sipas kategorisë në bazën e të dhënave NorthWind (Lista 1).

Rreshti i parë, vizionet me shkronja të zeza, është ai që prezanton propozimin SQL për krijimin e deklaratës SELECT, e cila fiton robotin për zgjedhjen e të dhënave. Klauzola SELECT që do të zbatohet në këto të dhëna zgjedh fushat nga dy tabela - fusha Emri i kategorisë nga tabela KATEGORIES dhe emri i produktit, sasia për njësi, njësi në stokun, fushat e ndërprera nga tabela PRODUCTS. Nëse jepen këto të dhëna, dy tabelat lidhen nga fusha CategoryID dhe vetëm ato produkte që janë në magazinë (kriteri i ndarjes pas fjalës kyçe WHERE) përfshihen në grupin e të dhënave që rezulton. Rezultati i kthimit në paraqitjen e parë është paraqitur në fig. një.

Tani le të bëjmë një deklaratë, sikur të tregojmë të gjitha territoret e një rajoni të ngjashëm. Qëllimi i prezantimit është të dalë nga sulmi (Lista 2).

Duke u ngatërruar me faktin që propozimi SELECT i rrotullon rezultatet sipas nevojës, ne shtojmë deklaratën CREATE VIEW dhe shtojmë emrin EASTTERR që krijohet (Lista 3).

Në vend që të krijoni një tekst të dorëzuar manualisht, mund të përdorni mjete vizuale për të hyrë në depon e DBMS. Në fig. Figura 2 tregon se si mund të krijohet i njëjti aplikacion pas mjetit shtesë View Designer, i cili është pjesa e magazinës së Enterprise Manager, që vjen përpara Microsoft SQL Server.

Pjesa e sipërme e View Designer ju lejon të specifikoni se si lidhen tabelat dhe cilat fusha shfaqen në të dhëna. Më poshtë mund të futni tabela dhe fusha pseudonime, zëvendësimi i vlerave të tyre, mënyra e paraqitjes. Dalі vendosi tekstin përfundimtar të njoftimit dhe rezultatet e yogo vikonannya.

Së pari, më lejoni të përfundoj një vështrim të shkurtër përreth, ne do të flasim pak për to, si të marrim informacion shtesë rreth tyre. Në Microsoft SQL Server 7.0, ne mund të rregullojmë procedurat e mëposhtme të sistemit që ruhen:

  • Për të marrë informacion rreth dosjeve, mund të përdorni procedurën e sistemit sp_help. Për shembull, sp_help EastTerr për të kthyer situatën në lidhje me incidentin;
  • për të modifikuar tekstin e hyrjes, mund të rregulloni procedurën sp_helptext, e cila ruhet;
  • për të njohur listën e tabelave në të cilat ruhet një paraqitje, mund të përdorni procedurën e sistemit sp_depends;
  • për të riemërtuar një deklaratë, mund të ndryshoni procedurën e sistemit sp_rename, e cila ruhet.

Kemi parë se kë kemi ndarë, si të fitojmë provat për heqjen e të dhënave, si të plotësojmë këto dhe kritere të tjera. Le të kthehemi te pjesa tjetër e prapanicës. Në bazën e të dhënave NorthWind ka disa rajone, dhe për zgjedhjen e listës së territoreve të rajoneve të zgjedhura, na duhen disa deklarata të ndryshme. Detyra mund të falet, yakbee mund të ketë kaluar vlerën RegionID si parametër. Mund të punohet për procedura shtesë, për çfarë të kujdesemi, për të cilat do të flasim në divizionin sulmues.

Procedurat e ruajtjes

Procedura që ruhet është përpilimi i një grupi propozimesh SQL, kursimet në bazën e të dhënave si emërtimi i objekteve dhe bashkimi si një fragment kodi i vetëm. Procedurat e ruajtjes mund të pranojnë dhe rrotullojnë parametrat. Nëse krijoni një procedurë që ruhet, serveri e përpilon atë dhe e vendos në cache, e cila shpërndahet, pas së cilës kodi i përpilimit mund të bllokohet nga dekadat. Nëse programi fiton procedurën që ruhet, ai kalon parametrat sipas nevojës dhe serveri fiton procedurën pa rikompilim.

Procedurat e ruajtjes ju lejojnë të rrisni produktivitetin e programeve. Në radhë të parë, porіvnjano іz SQL-kërkesa të mëdha, të cilat mbizotërohen nga programet e klientëve, era e keqe kërkon më pak se një orë për t'u përgatitur para se të vykonannya, skіlki erë e keqe të përpilohet dhe ruhet tashmë. Nga ana tjetër, më pak trafik është gjithashtu më pak në kohë, më pak në kohën e transferimeve të pyetjeve SQL, më pak numër i të dhënave transmetohet në lidhje. Oriz. 3 procedura ilustruese javore, të cilat merren nga shtesa e klientit.

Procedurat e ruajtjes ripërpilohen automatikisht, sikur me objekte, duke derdhur erë të keqe në to, zrobleno be-yaki ndryshim; іnakshe kazhuchi, erë e keqe zavzhdi aktuale. Siç u përmend më lart, procedurat që ruhen mund të pranojnë parametra që lejojnë shtesa të ndryshme të fitojnë të njëjtën procedurë, zastosovayuchi grupe të ndryshme të dhënash hyrëse.

Procedurat e ruajtjes kërkohen për të mbështetur integritetin e të dhënave dhe zbatimin e rregullave të biznesit. Ndonjëherë, fleksibiliteti dodatkova, copëzat janë të disponueshme, ndërsa rregullat e biznesit ndryshojnë, ju mund të ndryshoni tekstin e procedurës, pa ndryshuar shtesat e klientit.

Për të krijuar, ndryshuar dhe modifikuar procedurat, përdorni propozime të veçanta SQL - CREATE PROCEDURE, ALTER PROCEDURE dhe DROP PROCEDURE. Ne i shikojmë ata në divizionin sulmues.

Propozimi KRIJO PROCEDURË

Klauzola CREATE PROCEDURE zgjidhet për të krijuar procedurën që do të ruhet. Mund të ketë një sintaksë analizuese fyese:

CREATE PROC proc_name [(@parameter data_type) [= default] ] [...] AS sql_statements

Argumenti proc_name vendos emrin e procedurës, e cila mund të ruhet nëse mund të jetë unike brenda bazës së të dhënave të thread-it. Argumenti @parameter specifikon një parametër të procedurës. Klauzola CREATE PROCEDURE mund të ketë një ose më shumë parametra. Megjithëse parametri nuk ka një vlerë për promovime, mund të ketë transferime nga një korrespondent (ose shtesa e një klienti) sipas orës së një procedure javore. Në Microsoft SQL Server 7.0, numri i parametrave të procedurës që merren nuk është përgjegjës për tejkalimin e 1024; për umovchannyam erë e keqe mozhut nënë znachennya NULL.

Në mënyrë domethënëse, ekzistenca e mekanizmave universalë për aksesimin e të dhënave mund të vendosë kufizime shtesë në numrin e parametrave të procedurës që ruhen. Për shembull, drejtuesi BDE për Oracle 8 është i ndërtuar për të punuar vetëm me procedura, numri i parametrave të të cilave nuk ndryshon 10.

Argumenti data_type specifikon llojin e të dhënave për parametrin. Fjala kyçe e paracaktuar mund të përdoret për të vendosur një vlerë pas një promovimi - mund të jetë një konstante ose NULL. Kur një vlerë është specifikuar për një bllokim, procedura mund të lihet jashtë pa një vlerë për parametrin. Po kështu, procedura përdor një parametër me fjalën kyçe LIKE, vlera e promovimit mund të zëvendësohet me karaktere grupore (%, _, dhe [^]).

Fjala kyçe OUTPUT tregon se cilin parametër duhet ta ktheni.

Fjala kyçe AS tregon se procedura duhet të fajësohet për ndryshimin midis shikimit të sa propozimeve SQL dhe propozimeve në shtrirjen procedurale SQL specifike për këtë server.

Procedura, e krijuar për klauzolën shtesë CREATE PROCEDURE, do të ruhet nga databaza e transmetimit. Në Microsoft SQL Server, emrat e procedurave vendosen në tabelën e sistemit sysobjects dhe teksti i daljes vendoset në tabelën e syscomments.

Për të ndryshuar atë që është bërë më parë, zgjidhet procedura e mëposhtme për të fituar propozimin ALTER PROCEDURE, i përshkruar shkurtimisht në seksionin vijues.

PROCEDURA E HEQJES SË propozimit

Tsya propozim vikoristovuetsya për procedurat në distancë që merren nga baza e të dhënave. Propozimi i PROCEDURËS SË HIQJES kërkon një argument, emri i procedurës për t'u parë.

Kur hiqni procedurat që ruhen, informacioni rreth tyre hiqet nga tabelat e sistemit sysobjects dhe syscomments.

Krijimi i procedurave të zgjedhura që ruhen

Në degën e caktuar për ngjarjet, ne i respektuam ato që do të kishin qenë të dobishme, kështu që mund të kalonim një parametër në prezantim për të zëvendësuar vlerën RegionID për zgjedhjen e një prej katër rajoneve në bazën e të dhënave NorthWind. Le ta shohim sërish, gjë që e kthen listën e territoreve në rajon:

ZGJIDH Territoret.TerritoryDescription, Region.RegionDescription FROM Territories BASHKOHU I BRENDSHËM Rajoni ON Territories.RegionID = Region.RegionID WHERE Territories.RegionID = 1

Për të zgjedhur një rajon tjetër, duhet të ndryshojmë mendjen në klauzolën WHERE në pjesën tjetër të rreshtit. Gjithashtu, siç kemi ndryshuar (të quajtur RegID), ne mund të zgjedhim një nga katër rajonet pa ndryshuar pjesët e tjera të regjistrimit.

Baza e të dhënave NorthWind ka disa rajone me numra nga 1 deri në 4. Kjo do të thotë se RegID mund të ndryshohet si një lloj i tërë. Kodi i procedurës që do të merret është paraqitur më poshtë:

KRIJO PROCEDURË Shfaq Rajoni @RegID int AS ZGJEDHJE Territore.TerritoryDescription, Region.RegionDescription FROM Territories BASHKOHU I BRENDSHËM Rajoni ON Territories.RegionID = Region.RegionID WHERE Territories.RegionID = @RegID

Jepini kredi atyre që mund të kenë privuar të gjithë tekstin e kërkesës SELECT nuk është i zënë (në vizione me shkronja të pjerrëta) dhe ka shtuar vetëm propozimin CREATE PROCEDURE në emrin e procedurës së ruajtur rishtazi (në rreshtin e parë), anulimin e parametrit (në rreshtin tjetër) dhe fjalën kyçe AS, scho vkazuє propositions cob, me të vërtetë vykonuyut diї.

Rezultati i procedurës së krijuar të SQL Server Query Analyzer për RegID = 2 lexime në fig. 3 .

Natyrisht, ne mund të ruajmë procedurat që po ruhen, jo vetëm për zbatimin e versioneve të zgjeruara të manifestimit, por të kërkesave "intelektuale" SELECT. Procedurat e ruajtjes ofrojnë mekanizma që ju lejojnë të automatizoni shumë detyra rutinë.

Me Microsoft SQL Server 7.0, ne gjithashtu mund të modifikojmë procedurat e kursimit të sistemit për të punuar me procedurat më të rëndësishme që ruhen:

  • sp_stored_procedures - tregoni një listë të procedurave për të ruajtur;
  • sp_helptext - tregoni tekstin e procedurës që do të ruhet;
  • sp_varet - tregoni informacion në lidhje me ngecjen e procedurave të ruajtjes;
  • sp_procoption - vendos opsionet për procedurat që ruhen ose vendosen;
  • sp_recompile - ripërpiloni procedurën në kohën e javës së ardhshme;
  • sp_rename – ndryshoni emrin e një procedure.

Procedurat e sistemit që ruhen

Po flasim për Microsoft SQL Server, por nënkuptojmë numrin e madh të procedurave të sistemit që ruhen dhe zbatohen prej tij. Emrat e procedurave të sistemit që ruhen fillojnë nga SP_ ose XP_ dhe ruhen në bazën e të dhënave kryesore. Më shpesh, ne kemi përshkruar tashmë veprat e procedurave sistemike shpesh fitimtare që janë shpëtuar.

Zbuloni respektin, se shkaktarët nuk janë fajtorë për ndryshimin e të dhënave koristuvaçev.

Propozimi CREATE TRIGGER mund të ketë dy tabela të veçanta. Për shembull, tabelat e fshira dhe të futura mund të kenë të njëjtën strukturë si një tabelë, të caktohet një shkas dhe të fshihen vlerat e vjetra dhe të reja të rekordeve që janë ndryshuar. Për shembull, ne mund të kthejmë propozimin e mëposhtëm SQL për të kërkuar regjistrime në distancë:

SELECT * FROM u fshi

Ne tavoline Figura 3 tregon si tabelat e fshira ashtu edhe ato të futura për të gjitha ndryshimet e mundshme të të dhënave.

Për të ndryshuar një shkas të hapur, ndiqni propozimin ALTER TRIGGER. Le të flasim për diçka të re në divizionin sulmues.

Për kalli, duhet të shtojmë dy fusha të reja në tabelë, në të cilat numrat do të reduktohen. Domethënë їх UpdatedBy (emri i menaxherit që ndaloi regjistrimin) dhe UpdatedWhen (ora kur u ndryshua rekordi). Le të krijojmë një shkas të quajtur KeepTrack. Kodi i boshtit të jogës:

KRIJO KRIJUESIN KeepTrack ON Klientët INSERT, PËRDITËSO SI PËRDITËSIM Klientët SET Customers.UpdatedBy = USER_NAME(), Customers.UpdatedWhen = GETDATE() FROM futur, klientët WHERE futur.CustomerID = Customers.CustomerID

Siç mund ta shihni nga teksti i daljes së këmbëzës, vin kontrollohet pas operacioneve INSERT dhe UPDATE skin në tabelën Customers. Ky aktivizues do të ruajë emrin e menaxherit (bazën e të dhënave) nga fusha Customers.UpdatedBy dhe do të ndryshojë datën dhe orën nga fusha Customers.UpdatedWhen. Numrat e të dhënave janë të përjashtuara nga tabela kohore, të paraqitura.

Ashtu si Bachimo, ky shkas ju lejon të ndiqni ndryshimet dhe të futni të dhëna të reja në tabelë.

Përpara kësaj, si të përfundojmë një vështrim të shkurtër të nxitësve, ne jemi fajtorë për ndihmë, kështu që ju mund të dini informacionin rreth nxitësve. Tabela e sysobjekteve ruan informacione rreth nxitësve dhe llojeve, dhe tabela e syscomments ruan tekstin e tyre të daljes.

Visnovok

Në këtë pjesë, ne shikuam disa lloje të objekteve të bazës së të dhënave - procedurat, zbulimin dhe nxitësit që ruhen. Ne njohëm përparimin:

  • Pamja - tabela virtuale tse, tingulli i krijuar si një nëngrup kolonash në një numër tabelash. Për të krijuar një pamje, përdoret propozimi CREATE VIEW, për ta modifikuar, propozimi ALTER VIEW dhe për të fshirë, propozimi DROP VIEW.
  • Procedura që ruhet është përpilimi i një grupi propozimesh SQL, kursimet në bazën e të dhënave si emërtimi i objekteve dhe bashkimi si një fragment kodi i vetëm. Për të krijuar një procedurë që ruhet, vendoset propozimi CREATE PROCEDURE, për të ndryshuar - ALTER PROCEDURE, dhe për të fshirë - DROP PROCEDURE.
  • Një nxitës është një lloj i veçantë i procedurës që ruhet, pasi thirret automatikisht, nëse të dhënat në tabelën e vetme shtohen, shfaqen ose ndryshohen për propozime shtesë SQL INSERT, DELETE ose UPDATE. Kërcuesit krijohen për ndihmën e klauzolës CREATE TRIGGER. Për të ndryshuar një shkaktar, zgjidhet propozimi ALTER TRIGGER dhe propozimi DROP TRIGGER hiqet.

ComputerPress 12"2000

Ruajtja e procedurave SQL - hakimi i një moduli programi, i cili mund të ruhet nga shikimi i objekteve të ndryshme. Me fjalë të tjera, objekti që ka instruksionet SQL. Procedurat që ruhen mund të përdoren në klientët e aplikacionit për të arritur produktivitet të mirë. Për më tepër, objekte të tilla shpesh thirren nga skenarë të tjerë, ose për të frymëzuar ndonjë lloj tjetër shpërndarjeje.

Hyrja

Është e rëndësishme që kushdo të dijë se ato janë të ngjashme me procedurat e tjera (për shembull, MS SQL). Ndoshta ke te drejte. Ata mund të kenë parametra të ngjashëm, ata mund të shohin vlera të ngjashme. Mbi to, era e keqe qëndron për një orë. Për shembull, erërat janë të lidhura me bazat e të dhënave DDL dhe DML, si dhe me funksionet kryesore (emri i koduar - UDF).

Në fakt, procedurat SQL për të cilat kujdeset janë të afta për një gamë të gjerë avantazhesh, pasi shohin mesin e proceseve të tilla. Bezpeka, ndryshueshmëria e programimit, produktiviteti - të gjitha shtohen në thelbin, i cili funksionon nga bazat e të dhënave, më shumë të dhëna. Kulmi i popullaritetit të procedurave ra në 2005-2010, nëse programi u lëshua me emrin "Microsoft" me emrin SQL Server Management Studio. Me ndihmën e bazave të të dhënave, është bërë shumë më e thjeshtë, më praktike dhe më e përshtatshme. Nga shkëmbi në botë, një popullaritet i tillë po fiton në mesin e programuesve. Sot është një program absolutisht i shëndoshë, si për koristuvaçivët, si “lidhja” me bazat e të dhënave, është bërë si “Exel”.

Kur klikoni mbi procedurën, ajo përpunohet menjëherë nga vetë serveri pa zayvih protsessіv se vtruchannya coristuvacha. Nëse po, ju mund të zdiyasnyuvati të jetë-si një i largët, vikonannya, ndryshim. Për të gjitha këto, ju duhet një operator DDL, i cili është vetë-mësuar për të grabitur pjesët më të ndërlikuara të përpunimit të objekteve. Për më tepër, duket se është shumë i shpejtë, dhe serveri në fakt nuk është navantazhuetsya. Kjo lloj shpejtësie dhe produktiviteti ju lejon të transferoni lehtësisht sasi të mëdha informacioni nga serveri në server.

Për zbatimin e kësaj teknologjie, robotët me informacion bazohen në programimin mov. Para tyre, ju mund të shihni, për shembull, PL / SQL si Oracle, PSQL në sistemet InterBase dhe Firebird, si dhe Transact-SQL klasik "Microsoft". Të gjitha erërat njihen për krijimin dhe shtypjen e procedurave që ruhen, që lejojnë zotërimin e algoritmeve në baza të të dhënave të shkëlqyera. Është e nevojshme që ata që menaxhojnë një informacion të tillë të jenë në gjendje të mbrojnë të gjitha objektet nga aksesi i paautorizuar në sistemet e palëve të treta dhe, padyshim, të krijojnë, ndryshojnë ose shikojnë të dhëna të tjera.

Produktiviteti

Objektet e bazës së të dhënave Qi mund të programohen me shtigje të ndryshme. Tse i lejon koristuvachas të zgjedhë llojin e metodës vikoroze, e cila do të jetë më e përshtatshme, e cila do të kursejë forcën e asaj ore. Përveç kësaj, vetë procedura është duke u përpunuar, e cila ju lejon të fshehni kurset e shkëlqyera të këmbimit për orë midis serverit dhe serverit. Gjithashtu, moduli mund të riprogramohet dhe ndryshohet në çdo kohë. Veçanërisht varto nënkupton shpejtësinë, me të cilën është e nevojshme të nisni një procedurë të ruajtur SQL: ky proces është më i rëndësishëm për të tjerët të ngjashëm me të, në mënyrë që të mund të bëhet lehtësisht dhe universalisht.

Bezpeka

Ky lloj përpunimi i informacionit përdoret në procese të ngjashme, gjë që garanton siguri të përmirësuar. Tse bezpechuetsya për faktin se qasja e të tjerëve në procedura mund të fiket përsëri. Tse për të lejuar administratorin të kryejë operacione me ta në mënyrë të pavarur, duke mos pasur frikë nga tejmbushja e informacionit ose aksesi i paautorizuar në bazën e të dhënave.

Transferimi i të dhënave

Lidhja ndërmjet procedurës SQL, e cila merret, dhe shtojcës së klientit bazohet në parametra dhe vlera të ndryshme, të cilat rrotullohen. Le të mos obov'yazkovo transferimin e të dhënave në procedurë, e cila është ruajtur, informacioni përpunohet (kryesisht sipas kërkesës) dhe përpunohet për SQL. Meqenëse procedura, e cila është ruajtur, ka përfunduar punën e saj, ka paketa të dhënash (ale, e di, për gabimet) në shtesë, në mënyrë që të përdorni jogën, metodat fitimtare, për ndihmën e të cilave mund të gjeni se si të ruani procedurën SQL, kështu që kthej, për shembull:

Kalimi i të dhënave për një parametër shtesë në llojin Output;

Transferimi i të dhënave për ndihmë të operatorit;

Forca e haraçit për ndihmën e operatorit për zgjedhjen.

Dhe tani le t'i hedhim një sy, sikur të shohim të gjithë procesin në mes.

1. Krijimi i një procedure të ruajtur EXEC në SQL

Mund të krijoni një procedurë në MS SQL (Managment Studio). Pasi të jetë krijuar procedura, ajo do të blihet nga programimi i të dhënave bazë, në të cilën procedura do të krijohet nga operatori. Për procedurën vykonannya SQL, scho zberіgayutsya, vykoristovuyut EXEC-proces, kaki m_sti іm'ya e vetë objektit.

Kur procedura kombinohet, emri deklarohet fillimisht, pas së cilës zgjidhen një ose më shumë nga parametrat që ju janë caktuar. Parametrat mund të jenë jo të detyrueshëm. Meqenëse parametri(et) për trupin e procedurës do të shkruhet, është e nevojshme të kryhen operacionet e nevojshme.

Në të djathtë, në atë që trupi mund të ndryshohet në nivel lokal, roztashovani në nіy, dhe tsі ndryshon lokalisht edhe sipas datës para procedurave. Me fjalë të tjera, ato mund të shihen vetëm në mes të trupit të një procedure të Microsoft SQL Server. Procedurat e kursimit nganjëherë janë vvazhayutsya lokale.

Kështu, për të krijuar një procedurë, na duhet emri i procedurës dhe të paktën një parametër në trupin e procedurës. Kapni respektin se opsioni më i rëndësishëm për një kohë të tillë është krijimi i procedurës për emrin e skemës në klasifikues.

Trupi i procedurës mund të jetë një lloj shembulli, si krijimi i tabelave, futja e një ose më shumë rreshtave të rreshtave në tabela, lloji dhe natyra e bazës së të dhënave, etj. Trupi proteo i procedurës është midis fitoreve të operacioneve aktuale në atë të re. Aktet e përcaktimit të rëndësishëm janë ndërtuar më poshtë:

Trupi nuk është fajtor për kryerjen e ndonjë procedure tjetër që po shpëtohet;

Trupi mund të krijojë një falje për objektin;

Trupi nuk është fajtor për krijimin e nxitësve të përditshëm.

2. Instalimi i një ndryshimi në trupin e procedurës

Ju mund t'i ndryshoni ato lokale në trupin e procedurës, dhe erërat do të ndryshohen vetëm në mes të trupit të procedurës. Praktikë e mirë është krijimi i procedurave që ndryshohen në kallirin e trupit, të cilat ruhen. Por është gjithashtu e mundur të instalohen ndryshime në çdo vend në trupin e një objekti të caktuar.

Në disa raste, mund të dalloni se disa nga ndryshimet janë instaluar në një rresht dhe lëkura e parametrit të ndryshimit është e përforcuar me ujë. Gjithashtu, ju lutemi respektoni që mund të ndryshoni prefiksin @. Ju mund të vendosni një ndryshim për llojin e procedurës, kudo që dëshironi. Për shembull, ndryshimi i @NAME1 mund të shprehet më afër fundit të procedurës. Për të dhënë kuptimin e ndryshimit pa zë, mblidhen një grup të dhënash të veçanta. Përsa i përket situatës, nëse shprehen më shumë se një ndryshim në një rresht, në një situatë të tillë ka më pak se një grup të dhënash speciale.

Shumë shpesh, kuizet pyesin: "Si e dalloni një vlerë të vogël në një deklaratë në titullin e procedurës?" mirë. Të ushqesh cicavën, por është më e lehtë ta bësh atë më të pasur, nuk mendon kështu. Këshillë: për ndihmën e çifteve të tilla, si "Zgjidh Var = vlerë". Ju mund t'i mposhtni shanset, duke i përhapur ato me një gjendje kome.

Në të pasmet më manipuluese, njerëzit tregojnë krijimin e një procedure të thjeshtë, për çfarë kujdeset dhe vikonannya її. Për këtë procedurë, ju mund të merrni parametra të tillë si procesi, çfarë quan ai, dhe vlera është afër asaj të re (por mos e ndryshoni atë). Ndërsa era e keqe ikën, atëherë në mes të trupit, fillojnë proceset. Për shembull, për të krijuar një procedurë, si të pranoni vendndodhjen e rajonit nga pajtimtari, çfarë të telefononi dhe të ktheni të dhënat rreth tyre, sa autorë dërgohen në vendndodhjen e rajonit. Procedura do të marrë parasysh tabelat e autorëve të bazës së të dhënave, për shembull, Pubs, deri në fund të listës së autorëve. Për t'i hedhur një sy bazës së të dhënave, për shembull, Google kap skriptin SQL nga ana e SQL2005.

Në rastin e përparmë, procedura merr dy parametra, të cilët në anglisht do të quhen @State dhe @City. Lloji i të dhënave është në përputhje me llojin e caktuar për suplementin. Titulli i procedurës mund të ndryshohet brenda vetes nga @TotalAuthors (i të gjithë autorëve) dhe do të ndryshohet për të shfaqur sasinë e tyre. Dalі z'yavlyaєtsya razdіl vyboru zaputu, yakii gjithë pіdrakhovuє. Nareshti, podrahovane znachennya vіdobrazhaєєtsya vіknі vyvodu për ndihmën e operatorit për një mik.

Si mund ta ruaj procedurën me SQL Viconati

Ka dy mënyra për të ndjekur procedurën. Shfaqet rruga e parë, duke kaluar parametrat, pasi lista e ndarjeve shfaqet pas emrit të procedurës. Është e lejuar, mund të kemi dy kuptime (si në prapanicën e përparme). Vlerat merren për ndryshimin e parametrave shtesë të procedurave @State dhe @City. E gjithë mënyra e transferimit të parametrave të të cilit është në një rend të rëndësishëm. Kjo metodë quhet kalim i argumentit rendor. Nga ana tjetër, parametrat njihen pa mëdyshje dhe në këtë mënyrë rendi nuk është i rëndësishëm. Një mënyrë tjetër për ta bërë këtë është kalimi i argumenteve me emër.

Procedura mund të ndryshohet si standard. Kështu shkon, si në prapanicën e përparme, por vetëm këtu tregohen parametrat. Pra, parametri @City merret fillimisht dhe @State merret nga vlerat e bllokimit. Parametri pas bllokimit do të tingëllojë sikur është në rregull. Procedurat SQL që ruhen kalohen si parametra të thjeshtë. Në këtë rast, kini parasysh, parametri UT tejkalon vlerën për bllokimin SA. Vicoon tjetër ka më shumë se një vlerë argumenti për parametrin @ City, dhe parametri @ State merr vlerën e çelësit CA. Përditësimet në program do të jenë të lumtura, në mënyrë që ndryshimet për shkurtesat të përditësohen më afër fundit të listës së parametrave. Në një mënyrë tjetër, ne nuk mund të vykonannya, madje edhe ju jeni fajtor që praktikoni transferimin e argumenteve të emërtimit, gjë që është më e mirë dhe më e palosshme.

4. Ruaj Procedurat e Serverit SQL: Mënyrat e Rrotullimit

Ekzistojnë tre mënyra të rëndësishme për të menaxhuar të dhënat në procedurat e konfiskimit që ruhen. Erë e keqe rehabilitohet më poshtë:

Kthimi i vlerës së procedurës që merret;

Përjashtoni parametrin e procedurave që ruhen;

Zgjidhni një nga procedurat që ruhen.

4.1 Kthimi i vlerës së ruajtjes së procedurave SQL

Në këtë metodë, procedura jep vlerën e ndryshimit lokal dhe e rrotullon atë. Procedura mund të kthehet pa vonesë. Në prapanicën sulmuese, ata krijuan një procedurë, sikur të kthenin një numër të madh autorësh. Nëse e krahasoni këtë procedurë me ato të mëparshme, mund të mendoni se kuptimi për tjetrin zëvendësohet me atë të kthimit.

Tani le të pyesim veten se si ta ndjekim procedurën dhe të futim kuptimin, si të kthehemi. Procedura Vikonannya vmagaє vstanovlennya zminnoї që mik, jak të kryhet pas procesit. Vini re se mund të zëvendësoni një operator Select, për shembull, Select @RetValue, si dhe OutputValue.

4.2 Hiq parametrat e procedurave SQL që janë ruajtur

Kuptimi i vіdpovіd mund të jetë vikoristane për kthimin e një zminnoy, të cilin ne dhe bachiled në prapanicë përpara. Varianti i parametrit Output lejon procedurën të korrigjojë njërën ose tjetrën vlerën e ndryshimit për anën tjetër. Parametri i daljes përcaktohet nga e njëjta fjalë kyçe "Output" kur krijohet procedura. Nëse një parametër i punës është një parametër në dalje, atëherë objekti i procedurës është përgjegjës për vendosjen e vlerës së tij. Procedurat e ruajtjes së SQL, të cilat mund të përdoren më poshtë, përdoren në raste të ndryshme me informacionin e nën-çantës.

Aplikacioni ynë do të ketë dy emra zyrtarë: @ TotalAuthors dhe @ TotalNoContract. Erë e keqe tregohet nga lista e parametrave. Qi zminnі japin kuptimin e mesit të trupit të procedurës. Nëse fitojmë parametrat, pajtimtari mund të zgjedhë vlerën e futur në mes të trupit të procedurës.

Përveç kësaj, në skenarin e mëparshëm, bëhen dy ndryshime për të rritur vlerën, sikur të ruash procedurën e MS SQL Server në parametrin e daljes. Më pas procedura goditet nga rruga e vendosjes së vlerës normale të parametrit CA. Parametrat vijues janë të njëjtë, dhe më vonë ndryshimet pa zë transmetohen sipas radhës. Kapni respektin se ora e kalimit të ditëve të ndryshuara është fjala kyçe jepet edhe këtu. Pasi procedura të ketë rezultuar e suksesshme, rëndësia që ata kërkojnë ndihmë shtesë të parametrave të fundit tregohet për rakordim të mëtejshëm.

4.3 Zgjidhni një nga procedurat SQL për të ruajtur

Kjo teknikë përdoret për të rrotulluar grupin e vlerave në tabelat e të dhënave (RecordSet) në procedurën e plotë që është marrë. Për këtë aplikacion, procedura SQL që ruhet, me parametrat @AuthID, ushqen tabelën "Authors" me një shteg filtri, të dhënat rrotullohen pas parametrit shtesë @AuthId. Deklarata Select anulon atë që mund të rrotullohet dhe thërret procedurat për të zgjedhur. Kur procedura dështon, AuthId kthehet prapa. Një procedurë e tillë këtu rrotullon gjithmonë vetëm një rekord, ose përndryshe është e nevojshme. Ale, procedura që po ndërmerret nuk lejohet të kthejë më shumë se një rekord çdo ditë. Shpesh është e mundur të përdoret një shembull, për disa nga rrotullimet e të dhënave me parametra të ndryshëm, me pjesëmarrjen e llogaritjes së ndryshimit, ekziston një mënyrë për të dhënë një numër vlerash qese.

Në fund

Procedura që po ruhet është të plotësohet me një modul serioz softueri, të cilin e kthen ose e transmeton, si dhe instalon ndryshimet e nevojshme në shtojcën e klientit. Procedura Oskіlki, e cila ruhet, vikonuєtsya në vetë serverin, shkëmbimi i të dhënave me detyrimet e mëdha midis serverit dhe shtesës së klientit (për ato të zbritshme) mund të fshihet. Kjo ju lejon të degradoni në serverin SQL, i cili, padyshim, shkon në duart e sundimtarëve të tyre. Një nga të parashikueshmet janë procedurat T SQL për të cilat kujdesen ata që janë të përfshirë në krijimin e bazave të të dhënave të rëndësishme. Gjithashtu, ka një numër të madh, madhështor nuancash, të cilat mund të jenë të ndryshme gjatë kryerjes së procedurave që ruhen, është e nevojshme më shumë për ata që planifikojnë të angazhohen në programim, përfshirë edhe profesionalisht.