Procedura Vіdminnіst vіd vіd, karrierës zberіgaєtsya. Propozimi DOP VIEW. Intoleranca ndaj funksioneve duhet shmangur

Procedura po ruhet procedura e ruajtur) - emërtimi i objektit të programit të bazës së të dhënave. SQL Server ka lloje decal të procedurave që ruhen.

Procedurat e sistemit që ruhen procedura e ruajtur në sistem) furnizohen nga shitësit me pakicë të DBMS dhe zgjidhen për t'u marrë nga katalogu i sistemit ose nga informacioni i sistemit. Emrat e tyre fillojnë me parashtesën "sp_". Procedurat e të gjitha llojeve që ruhen nisen, për ndihmën e komandës EXECUTE, kështu që ju mund të shkurtoni në EXEC. Për shembull, procedura sp_hellogins, e nisur pa parametra, formon dy thirrje për emrat e hyrjeve në renë kompjuterike (Angl. hyrje) (Angl. përdoruesit).

EXEC sp_hellogins;

Shchob deri më sot njoftimi për diy, scho vykonuyutsya për procedurat shtesë të sistemit që janë ruajtur, në Tabelën. 10.6 vihet prapanicë deyaki. Ka mbi një mijë procedura të sistemit që ruhen në SQL Server.

Tabela 10.6

Aplikoni Procedurat e Sistemit të Serverit SQL

Krijimi i disponueshëm i Koristuvachevi i procedurave të kursimit për DB-të koristuvac dhe DB-të për objektet timchasovye. Në pjesën tjetër të ditës, procedura që do të ndërmerret do të jetë timchasova. Pra, ashtu si në vipadku me tabelat timchasov, duke emërtuar procedurën timchasov, e cila ruhet, është fajtor të fillohet me parashtesën "#", pasi e gjithë procedura lokale e timchasov është ruajtur, por me "##" - është kështu. globale. Procedura e përcaktimit të kohës lokale mund të kryhet vetëm brenda kornizës së ditës në të cilën është krijuar, është globale - dhe në fusha të tjera.

Programimi i objekteve të SQL Server mund të funksionojë si për ndihmën e Transact-SQL, ashtu edhe për ndihmën e përzgjedhjeve (Angl. assembly) në mjedisin CRL (Common Language Runtime) të Microsoft.Net Framework. Kjo është vetëm mënyra e parë për të parë këtë asistent.

Për krijimin e procedurave që ruhen, përdoret deklarata CREATE PROCEDURE (mund ta shkurtoni në PROC), udhëzimi i formatit të të cilit është më poshtë:

CREATE(PROC I PROCEDURE) emri i proc[; numri]

[(gparameter të dhëna_lloji )

[“e parazgjedhur] |

[ME [ ,...n ] ]

[PER REPLIKIM]

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

Po kështu, procedura që ruhet (ose shkas, funksion, pamje) krijohet me opsionin ENCRYPTION, pra kodi rishkruhet në atë mënyrë që teksti të bëhet i palexueshëm. Në të njëjtën kohë, siç i është caktuar, algoritmi për transferimin nga versionet e mëparshme të SQL Server dhe nuk mund të shihet si një algoritëm superior bazohet në shërbime që lejojnë kthimin e algoritmit të bartjes.

Opsioni RECOMPILE tregon se sistemi do të ripërpilojë tekstin gjatë procedurave të heqjes së lëkurës. Në një mënyrë të jashtëzakonshme, procedura përpilohet në fillimin e parë dhe ruhet në cache, e cila ju lejon të ruani kodin.

EXECUTE AS Vendos kontekstin e sigurisë, i cili mund të ketë një procedurë. Jepni një nga vlerat f CALLER | VETË | PRONAR | "emri_përdorues"). CALLER është vlera pas promovimit dhe do të thotë që kodi do të zgjidhet në kontekstin e kodit të sigurisë që thërret modulin. Me sa duket, nëna është fajtore për koristuvach, jo vetëm për vetë objektin e programimit, por edhe për objektet e tjera të bazës së të dhënave, me të cilat kapen. EKZEKUTIMI AS VETË do të thotë në varësi të kontekstit të folësit, i cili krijon ose ndryshon objektin e programimit. OWNER specifikon se kodi do të mbështillet në kontekstin e menaxherit të fillit të procedurës. Nëse nuk i caktohet një vllasnik, atëherë ajo betohet në vllasnikun e skemës, të shtrihet. EKZEKUTOHET AS "user_name" ju lejon të specifikoni në mënyrë eksplicite emrin e koristuvach (në putra të vetme).

Parametrat mund të specifikohen për procedurën. Të gjitha ndryshimet lokale, të cilat ndryshohen për të transferuar vlera në procedurë. Përveç parametrit të zërit me fjalën kyçe OUTPUT (ose të shkurtuar në OUT), mund ta vendosni edhe në një vlerë pasi të përfundojë procedura, mund të zgjidhni programin që thirri procedurën. Fjala kyçe READONLY do të thotë se vlera e parametrit nuk mund të ndryshohet në mes të procedurës, e cila ruhet.

Parametrave mund t'u caktohet një vlerë për një promovim, pasi ato do të ndryshohen, në mënyrë që vlera e parametrit të mos specifikohet në mënyrë eksplicite në orën e ardhshme të procedurës. Le të shohim shembullin:

KRIJO PROC surma (@a int, @b int=0,

©rezultat int OUTPUT) AS

SET @result=0a+0b

Ne krijuam një procedurë me tre parametra, për më tepër, parametri @b ka vlerën për bllokim = 0, dhe parametri @rezult është jashtë: vlera rrotullohet përmes të resë në programin që thirri. Diya, çfarë të fitosh, bëje lehtë - parametri i daljes merr vlerën e shumës së dy hyrjeve.

Kur punoja në SQL Server Management Studio, krijova një procedurë që ruhet, mund ta gjeni në seksionin e programimit të bazës së të dhënave (Angl. Programueshmëria) në kllapa për procedurat që ruhen (Fig. 10.2).

Kur klikoni procedurën si parametrat e hyrjes, mund të ndryshoni si ndryshimin ashtu edhe konstantet. Le të hedhim një vështrim në dy shembuj. Parametrat e parë hyrës të procedurës vendosen në mënyrë eksplicite me konstante, parametri dalës i wiki-t ka fjalën kyçe OUTPUT. Në një opsion tjetër, si parametër i parë i hyrjes, vendoset vlera e ndryshimit, dhe për parametrin tjetër, pas ndihmës së fjalës kyçe DEFAULT, tregohet se çfarë vlere mund të ndryshohet për bllokimin:

Oriz. 10.2.

DEKLARONI @3 int;

Përmbledhja EXEC 10.5, @OUTPUT;

PRINT0c; - do të shfaqet 15

DEKLAROJ Gi int = 5;

- nën orën e vlerës së viklik vikoristovuєmo për zamovchuvannyam

Përmbledhja EXEC Gi, DEFAULT, 0s OUTPUT;

PRINT0c; – do të shfaqet 5

Tani le të shohim shembullin duke analizuar kodin e kthesës, me të cilin përfundon procedura. Më lejoni t'ju gëzoj, skilli në tavolina Libër librash, parë në një interval të caktuar vitesh. Nëse është kështu, rіk kalli u shfaq më i madh se kontsevy, procedura kthehet "1" dhe pidrakunok nuk kryhet, përndryshe - numri i librave gjithashtu ndryshohet dhe kthehet në 0:

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

NËSE KTHIMI 0Viti i parë>0KTHIMI i vitit të kaluar 1

SET @result= (ZGJIDH COUNT(*) FROM dbo.Bookl

KU MIDIS 0Viti i parë DHE 0Viti i kaluar);

Le të shohim një variant të kësaj procedure, në të cilën kodi i rrotullimit merret në të gjithë ndryshimin 0ret, pas së cilës analizohet vlera e tij (në këtë rast do të jetë 1). Funksioni CAST, i cili është fitues në operatorin PRINT, shërben për të kthyer vlerën e ndryshores së plotë Gres në llojin e rreshtit:

DEKLAROJ 0ret int, Gres int

EXEC Gret = rownum 2004, 2002, Gres OUT;

NËSE 0ret=l PRINT

PRINT "Numri i librave" + CAST(Gres si varchar(20))

Procedurat e ruajtjes mund të lexojnë të dhëna nga tabelat, të ndryshojnë të dhënat dhe të krijojnë tabela dhe objekte të tjera të bazës së të dhënave.

Megjithatë, nuk është e mundur të krijohen skema, funksione, nxitës, procedura dhe procedura e ruajtur.

Prapa fyese ilustron aftësinë dhe ushqimin e lidhur me fushën e dukshmërisë së objekteve të rojës. Procedura është dhënë më poshtë, e cila është marrë, duke riverifikuar praninë e tabelës kohore #Tab2; nëse nuk ka tabela, unë i krijoj ato. Pas tabelës #Tab2, futen vlerat e dy kolonave dhe në vend të tabelës, shfaqet me deklaratën SELECT:

KRIJO PROC My_Procl (@id int, @emri varchar(30))

NËSE OBJECT_ID("tempdb.dbo.#Tab21) ËSHTË NULL

INSERT INTO dbo.#Tab2 (id, emri)VALUES (0id,0name)

ZGJIDH * NGA dbo. #Tab2-#1

Përpara javës së parë të procedurës, e cila kryhet, do ta vendosim në tabelën e ardhshme kohore #Tab2. Kini respekt për operatorin ЄХES. Për prapanicën e përparme, parametrat u transferuan në procedurën "sipas pozicionit", dhe në këtë rast, një format tjetër për transferimin e parametrave - "sipas emrit", tregohet në mënyrë eksplicite me emrin e parametrit të asaj vlere:

KRIJO TABELE dbo. # Tab2 (id int, emri varchar (30));

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

ZGJIDH * NGA dbo. # tab2; -#2

Në prapanicën e pezulluar, deklarata SELECT ndryshon binarët: hera e parë - në mes të procedurës, e dyta - nga fragmenti i kodit që thërret (i caktuar nga komenti "№ 2").

Përpara një wiki tjetër të procedurës, ne pamë tabelën kohore #Tab2. Pastaj do të krijohet një tabelë e vetme kohore nga procedura që është marrë:

LIDHJE TABELA dbo. # tab2;

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

ZGJIDH * NGA dbo. # tab2; -#2

Në këtë rast kam dhënë vetëm deklaratën SELECT, e cila ndodhet në mes të procedurës (me komentin “Xa 1”). Hyrja SELECT "Nr. 2" është sjellë në falje, pasi është krijuar në procedurë, e cila ruhet, tabela kohore në momentin e kthimit nga procedura tashmë do të fshihet nga baza e të dhënave tempdb.

Procedura mund të shihet me ndihmën e operatorit DROP PROCEDURE. Formati Yogo është vendosur më poshtë. Me një operator, ju mund të shihni disa procedura që ruhen duke i ringjallur ato nëpërmjet dikujt:

DOP (PROC I PROCEDURA) ( procedura ) [

Për shembull, me sa duket më herët kam krijuar procedurën e përmbledhjes:

Përmbledhja DROP PROC;

Ju mund të bëni ndryshime në procedurën kryesore (dhe në fakt - ricaktoni її) duke përdorur ndihmën e operatorit ALTER PROCEDURE (shtojcë

shpejtësia e avullit PROC). Përveç fjalës kyçe ALTER, formati i deklaratës është praktikisht i ndryshëm nga formati CREATE PROCEDURE. Për shembull, ne ndryshojmë procedurën dbo. rownum, duke vendosur opsionin viscon në kontekstin e sigurisë së rreshterit:

ALTER PROC dbo.rownum(SFirsYear int,

SLast Year int, Rezultati int OUTPUT)

WITH EXECUTE AS Owner - opsioni për instalim

NËSE 0Viti i parë>0Viti i kaluar KTHIMI 1 TJETËR FILLON

SET 0result= (ZGJIDH NUMËRIN(*) FROM dbo.Bookl

KU NDËRMJET VITIT TË VJETËR DHE VITIT TË VJETËR);

Në disa raste, mund t'ju duhet të justifikoni nevojën për një komandë formimi dinamik dhe një viconann її në serverin e bazës së të dhënave. Tse zavdannya gjithashtu mund të kontrollohet për ndihmën e operatorit ЄХES. Në fundin e poshtëm të pezulluar, një përzgjedhje rekordesh nga tabelat Bookl zgjidhet për barazinë intelektuale të atributit Viti, vlera që është caktuar të ndryshohet:

DEKLARONI 0y int = 2000;

EXEC("SELECT * FROM dbo.Bookl WHERE = " [email i mbrojtur]) ;

Udhëzimet e formuara në mënyrë dinamike Vikonannya krijojnë rimendim të zbatimit të sulmeve kompjuterike të tilla si "SQL-injection" (Angl. injeksion SQL). Thelbi i sulmit qëndron në faktin se shkatërruesi përdoret në të dhënat, të cilat formohen në mënyrë dinamike, kodi kryesor në SQL. Tingëllon si ajo, nëse parametrat që janë paraqitur, marrin nga rezultatet e futjes së të dhënave me një stenografi.

Descho ndryshon prapanicën e përparme:

DEKLAROJ 0y varchar(100);

SET 0y = "2TOV"; - tse mi hoqi nga koristuvaçi

Duke supozuar se vlerën e rreshtit që përfshihet në deklaratat SET, ne e hoqëm si kod (pa marrë parasysh se çfarë renditjeje, për shembull, përmes një shtojce në internet), atëherë shembulli ilustron sjelljen "e rregullt" të kodit tonë.

DEKLAROJ 0y varchar(100);

SET 0y = "2000; FSHIJE NGA dbo.Book2"; – injeksion

EXEC("SELECT * FROM dbo.Book2 WHERE="+0y);

Rekomandohet, nëse është e mundur, të përdoret procedura e sistemit sp_executcsql në mënyra të ngjashme, e cila ruhet, pasi ju lejon të kontrolloni llojin e parametrave, i cili është një nga shiritat në shtegun SQL. Pa shqyrtuar detajet e formatit її, le të hedhim një vështrim të ngjashëm me atë të paraqitur më parë:

EKZEKUTON sp_executesql

N"SELECT * FROM dbo.Bookl WHERE = 0y",

Këtu specifikohet në mënyrë eksplicite lloji i parametrit, i cili do të fitohet në kërkesë dhe SQL Server do të kontrollohet në rast ndryshimi. Shkronja "N" përpara putrave tregon se karakteri është një konstante në formatin Unicode, që do të thotë procedurë. Parametri mund të caktohet si një vlerë e përhershme, dhe vlera e dytë është e ndryshme.

Meta roboti– mësoni se si të krijoni dhe modifikoni procedurat që ruhen në serverin e bazës së të dhënave.

1. Funksionimi i të gjitha aplikacioneve, analiza e rezultateve të zbatimit të tyre në programin SQL Server Management Studio. Rivlerësimi i pranisë së procedurave në një bazë të dhënash streaming.

2. Vikonannya të gjitha aplikacionet dhe detyrat në procesin e punës laboratorike.

3. Kërkimi i porosive individuale për opsione.

Shpjegim për vikonannya roboti

Për të përvetësuar programimin e procedurave që ruhen, përdorim prapanicën e bazës së të dhënave me emrin DB_Libra, si një bulë u krijua nga roboti laboratori nr. 1. Kur vykonannі prikladіv se zavdan respektojnë vlefshmërinë e emrave të bazës së të dhënave, tabelës dhe objekteve të tjera të projektit.

Procedurat e ruajtjes janë një grup komandash që përbëhen nga një ose një grup operatorësh ose funksionesh SQL që mblidhen në bazën e të dhënave me një shikim.

Llojet e procedurave që ruhen

Procedurat e sistemit që mbahen janë të njohura për mbikëqyrjen e veprimtarive të ndryshme administrative. Praktikisht të gjitha detyrat për administrimin e serverit numërohen për ndihmë. Mund të thuhet se procedurat e sistemit që ruhen nga ndërfaqja që sigurojnë punën me tabelat e sistemit. Procedurat e sistemit që ruhen, mund të parashtesohen me sp_, ruhen në bazën e të dhënave të sistemit dhe mund të thirren në kontekstin e çdo baze të dhënash tjetër.

Procedurat Koristuvatsky, të cilat ruhen, zbatohen nga ata chi dhe të tjerë. Procedurat e ruajtjes - një objekt i plotë i bazës së të dhënave. Në varësi të procedurës së lëkurës, e cila ruhet, ajo renditet në një bazë specifike të dhënash, de dhe vikonuetsya.

Procedurat e kohës, të cilat ruhen, zgjasin vetëm një orë, pas së cilës ato reduktohen automatikisht nga serveri. Erë e keqe ndahet në nivel lokal dhe global. Procedurat lokale të timchasovy, të cilat janë ruajtur, mund të tërhiqen vetëm nga ajo ditë, në çdo rast. Në orën e një procedure të tillë, është e nevojshme të jepet një emër që fillon nga një simbol #. Ashtu si të gjitha objektet e orës, procedurat e të njëjtit lloj, të cilat ruhen, fshihen automatikisht kur serveri ndizet, riniset ose serveri po funksionon. Procedurat globale të kohës që ruhen janë të disponueshme për çdo ditë serveri, në të cilën përdoret e njëjta procedurë. Për takimin її, mjafton të jepni їy іm'ya, e cila fillon nga ## simbolet. Procedurat Qi shihen kur rinisni secilin server, si dhe kur mbyllet seanca, në kontekstin e asaj që u krijua një erë e keqe.

Krijimi, ndryshimi i procedurave që ruhen

Krijimi i një procedure që kujdeset, duke transferuar detyrën tjetër: planifikimin e të drejtave të aksesit. Kur krijoni një procedurë të ruajtur, duhet të mbroni që nuk do të keni të drejtë të aksesoni objektet e bazës së të dhënave që keni krijuar; zgjedhja e parametrave për zgjedhjen e një procedure, procedurat që ruhen, mund të jenë nëna e parametrave hyrës dhe dalës; Kodi i procedurës rozrobka, karrierës zberіgaetsya. Kodi i procedurës mund të zëvendësojë sekuencën e çdo komande SQL, duke përfshirë rikthimin e procedurave të tjera që ruhen.

Sintaksa e operatorit për krijimin e një procedure të re ose ndryshimi të qartë në vlerat e MS SQL Server:

( KRIJO | ALTER ) PROC[ EDURE] emri_procedurës [ ;numri] [ ( @parameter_name tipi i të dhënave ) [ NDRYSHON ] [ = PARALAKTUAR ] [ OUTPUT] ] [ ,... n] [ ME ( RICOMPILE | ENCRIPTION | RICOMPILE , ENCFOR REPLICATION] AS sql_statement [ ... n]

Le të shohim parametrat e komandës.

Prefikset Vikoristovuyuchi sp_, #, ##, procedura që krijohet, mund të caktohet si sistem ose timchasova. Siç shihet nga sintaksa e komandës, nuk lejohet të specifikohet emri i rreshterit, për të cilin procedura është e nevojshme, si dhe emri i bazës së të dhënave, ku mund të vendoset. Kështu, për të krijuar një procedurë që ruhet në një bazë të dhënash specifike, është e nevojshme të shtypni komandën CREATE PROCEDURE në kontekstin e bazës së të dhënave. Me ndihmën e trupit të procedurës, për të cilin kujdeset, mund të bëhet përzgjedhja e emrave të shkurtuar para se të deklarohen bazat e të dhënave, pra pa specifikuar emrat e bazave të të dhënave. Nëse keni nevojë të shkoni te objektet e listuara në bazat e tjera të të dhënave, shkruani emrin e bazës së të dhënave obov'yazkovo.

Për të transferuar të dhënat hyrëse dhe dalëse në procedurat e krijuara, të cilat ruhen, emrat e parametrave që do të përdoren fillojnë me simbolin @. Në një procedurë, e cila zgjidhet, mund të vendosni parametra anonimë, të ndarë me koma. Lloji i procedurës nuk është fajtor për ndryshimet lokale, emrat e të cilave zgjidhen me emrat e parametrave të procedurës. Për caktimin e llojit të parametrave të të dhënave të procedurës, e cila merret, është e përshtatshme nëse llojet e të dhënave janë SQL, duke përfshirë edhe vargjet. Megjithatë, lloji i të dhënave CURSOR mund të përdoret vetëm si një parametër opsional i procedurës, i cili duhet të merret parasysh. nga caktimet e fjalës kyçe OUTPUT.

Prania e fjalës kyçe OUTPUT do të thotë se është një parametër i vlefshëm i caktimit për kthimin e të dhënave nga procedura që merret. Megjithatë, kjo nuk do të thotë se parametri nuk është i përshtatshëm për të kaluar një vlerë në procedurën që do të ruhet. Specifikimi i fjalës kyçe OUTPUT udhëzon serverin, me daljen nga procedura që ruhet, t'i caktojë një vlerë parametri ndryshimi lokal te thread-it që u specifikua kur thirret procedura si vlerë e parametrit. Në mënyrë domethënëse, kur specifikoni fjalën kyçe OUTPUT, vlera e parametrit të ndryshores për orën e dytë të procedurës mund të vendoset vetëm nga një ndryshim lokal. Nuk lejohet të shtrembërohet nëse është një virazi apo një konstante që vlen për parametra të konsiderueshëm. Fjala kyçe VARYING thirret menjëherë me parametrin OUTPUT, i cili mund të jetë i tipit CURSOR. Përcaktohet që parametri i daljes do të jetë shumëzuesi që rezulton.

Fjala kyçe DEFAULT është një vlerë, kështu që ne e marrim parametrin opsional si një kyç. Në këtë mënyrë, kur thirrni një procedurë, mund të specifikoni në mënyrë eksplicite vlerën e një parametri të caktuar.

Serveri Oscilki ruan planin për shkarkimin dhe përpilimin e kodit, me një vonesë të vogël në procedurë, vlerat tashmë janë gati. Sidoqoftë, në disa situata, është ende e nevojshme të ripërpiloni kodin e procedurës. Futja e fjalës kyçe RECOMPILE udhëzon sistemin të krijojë një plan trajtimi që do të ruhet në rast skuqjeje të lëkurës.

Parametri PËR REPLIKACION i kërkesës gjatë përsëritjes së të dhënave dhe përfshirjes së procedurave të krijuara, i cili merret si artikuj në botim. Fjala kyçe ENCRYPTION udhëzon serverin Viconity të kodojë kodin e procedurës që ruhet, që mund të mbrojë mbrojtjen e algoritmeve të së drejtës së autorit që roboti zbaton procedurën që ruhet. Fjala kyçe AS vendoset në kallirin e trupit, gjë që kursen procedurën. Në të njëjtën procedurë, praktikisht të gjitha komandat SQL mund të ngrihen, transaksionet mund të shurdhohen, bllokimi mund të vendoset dhe procedurat e tjera që ruhen mund të thirren. Dalja nga procedura, e cila ruhet, mund të bëhet me ndihmën e komandës RETURN.

Procedurat e Vidalennya që merren

PROCEDURA E HEQJES (emri_procedurës) [ ,... n]

Vikonannya procedurat që janë marrë

Për të fituar një procedurë, komanda është: [ [ EXEC [UTE] emri_procedurës [ ;numri] [ [ @parameter_name= ] (vlera | @name_change) [ OUTPUT ] | [ PARALAKTUAR ] ] [ ,...n]

Nëse procedura që do të ndërmerret nuk është një komandë e vetme në paketë, atëherë prania e komandës EXECUTE është e detyrueshme. Për më tepër, kjo komandë nevojitet për një procedurë thirrjeje të shpejtë nga një procedurë tjetër ose një shkas.

Zgjedhja e fjalës kyçe OUTPUT për orën e ciklit të procedurës nuk vlen më për parametrat, sikur të ishte lënë jashtë ora e krijimit të procedurës me fjalën kyçe OUTPUT.

Nëse fjala kyçe DEFAULT është specifikuar për parametrin gjatë ciklit të procedurës, vlera për promovimin do të përsëritet. Natyrisht, fjala e specifikuar DEFAULT lejohet vetëm për ato parametra, për të cilët është caktuar një vlerë standarde.

Nga sintaksa e komandës EXECUTE, shihet se emrat e parametrave mund të hiqen në fund të ciklit të procedurës. Sidoqoftë, në këtë rast, koristuvach është fajtor për specifikimin e vlerave për parametrat në rendin në të cilin erëra e keqe u rimbroj gjatë procedurës së kombinuar. Nuk është e mundur të caktohet një vlerë për promovimin e parametrit, thjesht duke anashkaluar orën e parë të ringjalljes. Nëse është e nevojshme të hiqen parametrat për të cilët është caktuar vlera, mjafton të specifikohen në mënyrë eksplicite emrat e parametrave kur thirret procedura që do të ndërmerret. Për më tepër, në këtë mënyrë është e mundur të rivendosni parametrat dhe vlerat e tyre në një renditje të mjaftueshme.

Është e rëndësishme që në fund të ciklit të procedurës, ose emrat e parametrave të specifikohen me vlera, ose më shumë se një vlerë pa emër parametri. Këto kombinime nuk lejohen.

Lidhja RETURN për procedurat që janë ruajtur

Kjo ju lejon të dilni nga procedura në çdo pikë përtej asaj mendore të specifikuar, dhe gjithashtu ju lejon të transferoni rezultatin e procedurës me një numër, me të cilin mund të gjykoni korrektësinë e procedurës. Një shembull i krijimit të një procedure pa parametra:

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

Detyra 1.

EXEC Count_Books

Shkeleni rezultatin.

Një shembull i krijimit të një procedure me një parametër hyrës:

KRIJO PROCEDURE Count_Books_Pages @Count_pages AS INT AS SELECT COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages GO

Menaxheri 2. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni komandën її për ndihmë

EXEC Count_Books_Pages 100

Shkeleni rezultatin.

Një shembull i krijimit të një procedure me parametra hyrës:

CREATE PROCEDURE Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) AS SELECT COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages DHE Title_book LIKE @Title GO

Detyra 3. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni komandën її për ndihmë

EXEC Count_Books_Title 100 "P%"

Shkeleni rezultatin.

Një shembull i krijimit të një procedure me parametrat hyrës dhe parametrat e daljes:

KRIJO PROCEDURE Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo INT OUTPUT AS SELECT @Itogo = COUNT (Code_book) FROM Books WHERE Pages>= @Count_pages AND Title_itbook LIKE @T

Detyra 4. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni për një grup komandash shtesë:

Sql> Deklaroni @q si int EXEC Count_Books_Itogo 100, "P%", dalje @q zgjidhni @q

Shkeleni rezultatin.

Një shembull i krijimit të një procedure me parametrat e hyrjes dhe RETURN:

CREATE PROCEDURE checkname @param INT AS IF (ZGJIDHni Name_autor NGA autorët WHERE Code_author = @param) = "Pushkin A.S." KTHIMI 1 TJETËR KTHIMI 2

Detyra 5. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni її për komanda shtesë:

DEKLARONI @return_status INT EXEC @return_status = emrin e kontrollit 1 ZGJIDH "Statusi i Kthimit" = @return_status

Një shembull i krijimit të një procedure pa parametra për të rritur vlerën e fushës kryesore në tabelën Blerjet 2 herë:

KRIJO PROC update_proc AS PËRDITËSIM Blerjet SET Code_purchase = Code_purchase* 2

Detyra 6. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni komandën її për ndihmë

EXEC update_proc

Një shembull i një procedure me një parametër hyrës për marrjen e të gjithë informacionit rreth një autori të caktuar:

CREATE PROC select_author @k CHAR (30) AS SELECT * FROM Autorët WHERE name_author= @k

Detyra 7.

EXEC select_autor "Pushkin A.S." ose zgjidhni_autor @k= "Pushkin A.S." ose EXEC select_author @k= "Pushkin A.S."

Një shembull i krijimit të një procedure me një parametër hyrës dhe vlera për kyçje për të rritur vlerën e fushës së çelësit në tabelën Blerjet për një numër të caktuar herë (për mbyllje për 2 herë):

CREATE PROC update_proc @p INT = 2 AS PËRDITËSIM Blerjet SET Code_purchase = Code_purchase * @p

Procedura nuk i kthen të dhënat e pritura.

Menaxheri 8. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni її për komanda shtesë:

EXEC update_proc 4 ose EXEC update_proc @p = 4 ose EXEC update_proc --zastosovuєtsya vlerë për promovim.

Një shembull i krijimit të një procedure nga parametrat hyrës dhe dalës. Krijoni një procedurë për përcaktimin e numrit të porosive, të llogaritur për periudhën e treguesit:

CREATE PROC count_purchases @d1 SMALLDATETIME, @d2 SMALLDATETIME, @c INT OUTPUT AS SELECT @c= COUNT (Code_purchase) NGA Blerjet WHERE Date_order BETWEEN @d1 DHE @d2 SET @c = ISNULL(@,

Menaxheri 9. Krijo këtë procedurë në degën Procedurat e ruajtura të bazës së të dhënave DB_Books duke përdorur programin SQL server Management Studio. Ekzekutoni її për komanda shtesë:

DEKLARONI @c2 INT EXEC count_purchases '01- qershor- 2006 ', '01- korrik- 2006', @c2 OUTPUT SELECT @c2

Opsionet për të shkuar në punën laboratorike nr. 4

Pozicioni Zagalni. Në programin SQL Server Management Studio, krijoni një anë të re për kodin (butoni "Krijo kërkesë"). Krijoni programatikisht një bazë të dhënash aktive DB_Books pas ndihmës së deklaratës Use. Krijoni procedura që kujdesen për plotësimin e deklaratave të procedurës Krijoni dhe caktoni vetë emrat e procedurave. Procedura e lëkurës vikonuvatime në një kërkesë SQL, e cila është vikonovimi i një roboti tjetër laboratorik. Për më tepër, kodi SQL duhet të ndryshohet në mënyrë të tillë, në mënyrë që ata të mund të transferojnë vlerat e fushave, në të cilat bëhet kërkimi.

Për shembull, jashtë kokës së robotit të laboratorit nr. 2:

/*Zgjidhni numrin e punonjësve të postës (tabela e dërgesave) emërtoni kompanitë, telefonia dhe IPN (fushat Emri_kompania, Telefoni dhe INN), për të cilat emri i kompanisë (fusha Emri_kompania) "BAT SVIT".

SELECT Emri_kompany, Telefon, INN NGA Dorëzimi WHERE Name_company = "BAT SVIT"

*/ – Procedura do të krijohet për këtë robot:

CREATE PROC select_name_company @comp CHAR (30 ) AS SELECT Emri_company, Phone, INN FROM Deliveries WHERE Name_company = @comp

- Për të nisur procedurën jepet komanda:

EXEC select_name_company "BAT SVIT"

Lista e drejtorëve

Krijo një program të ri në SQL Server Management Studio. Krijoni programatikisht një bazë të dhënash individuale aktive, të krijuar në robotin e laboratorit nr. 1, për ndihmën e operatorit Use. Krijoni procedura që kujdesen për plotësimin e deklaratave të procedurës Krijoni dhe caktoni vetë emrat e procedurave. Procedura e lëkurës vikonuvatime në një kërkesë SQL, siç paraqitet në pamjen e detyrës tjetër për opsionet.

opsioni 1

1. Futni një listë të spivrobitnikiv, yakі mund të dëshirojë një fëmijë.

2. Vendosni një listë të fëmijëve që panë dhurata në fund të periudhës.

3. Futni një listë të fëmijëve batkіv, yakі mayutnі inopnolіtnі.

4. Shkruani informacione për dhuratat me një sasi më të madhe se sasia e caktuar, të renditura sipas datës.

Opsioni 2

1. Futni një listë të aksesorëve me llojin e caktuar.

2. Informoni numrin e riparimeve të pajisjeve dhe numrin total të riparimeve tek masteri i caktuar.

3. Shkruani një listë të vlasnikëve të pajisjeve dhe numrit të kafshëve, duke renditur për numrin e kafshëve dhe mënyrën e rënies.

4. Futni informacione për punët me një numër më të madh të caktuar ose me një datë pranimi për një punë më të vogël se data e caktuar.

Opsioni 3

2. Vendosni një listë të kodeve të shitjes, për të cilat ngjyrat janë shitur për një shumë më të madhe se shuma e specifikuar.

3. Shkruani datën e shitjes, shumën, shitësin dhe biletën për kodin e specifikuar të shitjes.

4. Vendosni një listë biletash dhe notën për biletat me lartësi më të madhe se numri i specifikuar ose më elegante.

Opsioni 4

1. Futni një listë me etiketa nga treguesit e caktuar përpara se të ndaloni.

2. Vendosni një listë të datave të dorëzimit, për të cilat janë shitur më shumë se numri i caktuar i të njëjtave liq.

3. Shkruani datën e dorëzimit, shumën, PIB të sasisë sipas furnitorit dhe do ta emërtoj liqiv sipas kodit të nevojës për më shumë se sasia e specifikuar.

Opsioni 5

2. Vendosni një listë të pronës së debituar për një arsye të caktuar.

3. Shkruani datën e datës së caktuar, unë do të emërtoj posedimin, PIB të datës së debitimit për debitimin e periudhës së debituar.

4. Shkruani një listë të pasurive me një lloj të caktuar ose me një datë pronësie më të madhe se vlera e parë

Opsioni 6

1. Vendosni një listë sigurimesh për më shumë se numri i specifikuar.

2. Vendosni një listë produktesh, në emër të të cilave përdoren kuptimet, një fragment të një fjale.

3. Futni emrin e produktit, emërtoni linjën, emërtoni produktin me kodin e linjës nga vlera fillestare e caktuar pas vlerës së parë përfundimtare.

4. Shkruani rendin e përgatitjes së infuzionit dhe emërtoni infuzionin me numrin e karbohidrateve më shumë për vlerën e parë, ose sasinë e kalorive më shumë për vlerën e treguar.

Opsioni 7

1. Futni një listë të praktikuesve nga mbjellja e caktuar.

3. Shënoni datën e regjistrimit, llojin e dokumentit, PIB të regjistruesit dhe emrin e organizatës për dokumentet e regjistruara për emërimet e periudhës.

4. Vendosni një listë të dokumenteve të regjistruara me llojin e parë të dokumentit ose me një datë regjistrimi më të madhe se vlera e specifikuar.

Opsioni 8

1. Futni një listë të praktikuesve me një arsye të caktuar për thirrjen.

3. Shënoni datën e regjistrimit, arsyen e regjistrimit, PIB-në e referencës për dokumentet e regjistruara për emërimet e periudhës.

Opsioni 9

1. Futni një listë të praktikuesve që u lejuan të hynin në llojin e specifikuar.

2. Vendosni një listë të dokumenteve me datën e regjistrimit për caktimet e periudhës.

3. Shënoni datën e regjistrimit, llojin e lejes, PIB të referencës për dokumentet e regjistruara për emërimet e periudhës.

4. Futni një listë të dokumenteve të regjistruara nga kodi i dokumentit në intervalin e caktuar.

Opsioni 10

1. Futni një listë të praktikuesve nga mbjellja e caktuar.

2. Futni një listë dokumentesh, të cilat mund të kenë kuptimin e një fragmenti të një fjale.

3. Shënoni datën e regjistrimit, llojin e dokumentit, PIB të pronarit dhe emrin e organizatës për dokumentet e regjistruara për emërimet e periudhës.

4. Fusni një listë të dokumenteve të regjistruara nga lloji i dokumentit të specifikuar ose me një kod dokumenti më të vogël se vlera e fundit.

Opsioni 11

1. Shkruani një listë të praktikuesve që njihen për mbjelljen e dhënë.

2. Vendosni një listë të dokumenteve me datën e regjistrimit për caktimet e periudhës.

3. Shënoni datën e regjistrimit, shlyerjes, PIB të referencës për dokumentet e regjistruara për emërimet e periudhës.

4. Futni një listë të dokumenteve të regjistruara nga kodi i dokumentit në intervalin e caktuar.

Opsioni 12

3. Shkruani një listë të specialiteteve, si kanë marrë në zotërim nga marrja me qira e atij numri kafshësh, duke renditur për sasinë e kafshëve dhe sa bien.

Opsioni 13

1. Futni një listë të zotërimeve nga lloji i caktuar. 2. Shkruani një listë të pasurive, sikur të hiqni dorë nga një praktikues i këndimit.

3. Shënoni sasinë e pronës së dekomisionuar, e cila grupohet sipas llojeve të pronave.

4. Shkruani informacionin rreth rekrutimit me datën e punësimit më shumë se data e parë.

Opsioni 14

1. Futni një listë të biletave nga lloji i fletës së caktuar.

2. Vendosni një listë të kodeve të nevojës, për të cilat ngjyrat janë shitur për një shumë prej më shumë se një vlerë.

3. Shkruani datën e datës së caktuar, shumën, emrin e punonjësit të postës dhe ngjyrën pas kodit të këngës së punonjësit postar.

4. Futni një listë ngjyrash dhe notash për biletat me lartësi më të madhe se numri i këngës ose më elegante.

Opsioni 15

1. Vendosni një listë të klientëve që kanë arritur numrat e periudhës së takimeve.

2. Futni shumën totale të pagesave për numrat e klientëve të lëkurës.

3. Shkruani datën e mbërritjes, llojin e dhomës, PIB të klientëve, regjistrimet për periudhën e takimeve.

4. Vendosni një listë të klientëve të regjistruar për dhoma teke.

Opsioni 16

1. Futni një listë të zotërimeve nga lloji i caktuar.

2. Futni një listë të zotërimeve, të tilla si marrja me qira e një klienti kënge.

3. Shkruani një listë të osіb, yakі mori në zotërim nga qiraja e atij numri të kafshëve, të renditura për numrin e kafshëve dhe si të bien.

4. Futni informacione rreth klientëve të renditur sipas adresave.

Opsioni 17

1. Vendosni një listë vlerash nga çmimi i blerjes më i madh se vlera fillestare, ose nga afati i garancisë më i madh se sasia e specifikuar.

2. Për të futur vendin e rëndësisë së vlerave materiale, fjala është shënuar në emrat e tyre.

3. Futni shumën e vlerave vartosti nga kodi për diapazonin e caktuar.

4. Vendosni një listë të kushteve të vlefshme materialisht nga data e pranimit për të punuar në intervalin e caktuar.

Opsioni 18

1. Vivest një ndryshim i robits riparim, vikonanih këndojnë mjeshtër.

2. Shkruani një listë të fazave të punës, të cilat hyjnë përpara veprës, emrat e të cilave kanë një fjalë të caktuar.

3. Shkruani shumën e kostos së hapave të punës së riparimit për punën nga kodi për diapazonin e caktuar.

4. Futni një listë skedarësh nga data e pranimit në robot në intervalin e specifikuar.

Opsioni 19

1. Shkruani një listë të liqiv nga leximet e para.

2. Futni një listë me numra kontrolli për të cilët janë shitur më shumë se një numër liq.

3. Shkruani datën e shitjes, shumën, PIB të arkëtarit dhe arkëtarit për çekun nga numri i caktuar.

4. Shkruani një listë të lëngjeve dhe një prej tyre për lëngjet me një sasi në paketim më të madhe se sasia e treguar ose me një kod lëngu më të vogël se vlera e parë.

Opsioni 20

1. Futni një listë të praktikuesve nga mbjellja e caktuar.

2. Futni një listë dokumentesh, të cilat mund të kenë kuptimin e një fragmenti të një fjale.

3. Shkruani datën e regjistrimit, llojin e dokumentit, datën PIB dhe faktin e datës për dokumentet e regjistruara për një periudhë.

4. Futni një listë të dokumenteve të regjistruara nga lloji i dokumentit të caktuar ose kodi i dokumentit për diapazonin e parë.

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 konfigurimin 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.
Relobders, Scho shpesh mbarojnë, Early the "Procedurat thjesht Yak Kdіr SPEM SPL-SQL-guide, Yakі stonna robust dynami Basic Dones, BACK ISNUє DUMKA, SHO GRAYUVATI ME PROCTIONS, SHO ZEBYUGATO nivele të larta, Natyrore.
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.
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 riorganizohen në harqe, të cilat rrotullohen sipas llojeve të caktuara - në këtë kategori vetëm një - Rezultat.
Kjo procedurë nuk është fajtore për rrotullimin e parametrave, fjalës KTHIM dhe listës së 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, i cili ë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 sfidon 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 është krijuar posaçërisht për pyetjen e pyetjes SELECT, dhe procedura që zgjidhet është për pyetjen EKZEKUTIMI I PROCEDURES. 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 në tabelën Tabela_shembull). 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, kërkon ndihmë EKZEKUTOHET PROCEDURËN, si "wiymaє" nga HP vetëm një rresht, dhe reshta (navit që qelb!) Injoro.
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 > Faljen, le të ruajmë procedurën, jak pratsyuє kështu vetë, jak pyesni 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

Ky kod shmachok do të thotë fyes: 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 ato duhet të ndryshohen në mes të komandës SQL FOR SELECT, të veçohen fushat në tabelat që janë zgjedhur në SELECT dhe për t'i ndryshuar ato duhet të transferohet pjesa tjetër e 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 e përzgjedhjes 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

Krim komandat FOR SELECT... DO, i cili organizon një cikël nga të dhënat e çdo zgjedhjeje, një lloj tjetër cikli - WHILE...DO, i cili 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, ne kemi nevojë për 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ë unë do ta vendos ç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ë që të shprehim ndryshimin lokal, në mënyrë që të jeni fitimtar për të ruajtur vlerën mesatare. Zëri juaj do të duket 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 agregat 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 ta plotësoni atë në strukturën 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ë kërkesën 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ë zgjedhim 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 Pobutova
- 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. Misioni ynë është të ofrojmë një përzgjedhje të të gjithë elementëve të fundit të ditë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 mbledhjen 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 shkrepura" - për shembull, për kategorinë "Tre". -Dhoma" jashtë kategorisë do të duket si "Pobutov tehnіka Frigoriferë 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ë merrte 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:

Ashtu 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ë ishin në majat e vetë gjilpërave.

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_ishennu të situatave të faljes në procedurat që ruhen dhe nga robotët.

22 episode

Njohuritë e mia për të shkruar në programin kryesor Klient/Server WinForms janë të thjeshta, tek e cila kam ardhur:

Procedurat Vykoristovuvat për të cilat kujdeset:

  • Për të qenë një punëtor robotik i palosshëm. Nëse zgjidhni të punoni, do t'ju duhet efektivisht një kursor tabele ose një temp, prandaj thirrni mënyrën më të mirë për ta ekzekutuar atë në SQL Server.
  • Mund t'ju duhet të bllokoni aksesin në të dhëna. Nëse nuk jepni akses në tabelat e koristuvaçave (si rolet ashtu edhe të tjerat), mund të bindeni se e vetmja mënyrë për të ndërvepruar me ta është përmes sipërmarrjes së përbashkët, e cila krijohet.

Fitorja për kërkesa të veçanta:

  • Për CRUD, nëse nuk keni nevojë të ndërlidhni aksesin në të dhëna (sepse duhet ta bëni në mënyrë tjetër).
  • Për shakatë më të thjeshta. Krijimi i PS-së për kritere jopersonale për një shaka - kjo është e gjitha ajo palosje në shërbim. Nëse mund të krijoni një kërkesë për poke suedeze, mbyllni syrin.

Për shumicën e shtesave të mia, unë fitoj si SP, pra ad-hoc sql, dua të di që kam gjithnjë e më pak SP vicorist, copëza erë të keqe në thesin e fundit me kodin si C #, vetëm më shumë kontroll, test dhe përmirësuar. Unë rekomandoj bi-wirezim ad-hoc sql sepse nuk e dini arsyen specifike.

Procedurat e ruajtjes - një kontratë për një program sigurie, i cili i përmbledh ato, të drejtpërdrejta kundrejt bazave të të dhënave. Kodi për procedurat dhe vetë skema e bazës së të dhënave mund të ndryshohet pa kompiluar, zhvilluar kodin, në mënyrë që të dhënat e procedurës të mbeten të pandryshuara.

Kur pyesni programin tuaj, do t'i tregoni vetes qartë modelin tuaj të të dhënave.

Epo, nuk është gjithashtu një praktikë e mirë të krijosh thjesht procedura që ruhen, si kërkesat CRUD për tabelat e lëkurës në bazën e të dhënave, kështu që gjithçka është ende e shpjeguar qartë. Natyra e procedurës është për shkak të rëndë, të trashë.

Mendoj se ky është konflikti kryesor mes njerëzve, pasi është faji i tyre për të përmirësuar bazën e të dhënave të njerëzve, pasi është zgjerimi i ndërfaqes së korrespondentit.

Si një person me të dhëna, nuk i hodha një sy punës pas bazës së të dhënave, përpara se të kalonin përmes kërkesave adhoc, kështu që është e rëndësishme që ata të mësojnë ose të kujdesen në mënyrë efektive. Si mund të zbuloj se çfarë mund të kontribuoj në ndryshimin e skemave? Për më tepër, nuk mendoj se koristovatëve duhet t'u jepet akses direkt në tabelat e bazës së të dhënave me siguri pasqyruese (dhe nuk mund të sulmoj vetëm injeksionet SQL, por edhe faktin që kontrolli i brendshëm bazë, i cili nuk lejon të drejta dhe vimagaє vіd usіh koristuvachіv vikoristovyte vetëm procs, të njohura për programin, schob zapobіgti mozhlivogo shahraystvo.

Bazat e të dhënave janë të orientuara nga objekti dhe kodi që duket i mirë nga një këndvështrim i orientuar nga objekti mund të shkatërrohet plotësisht nga pikëpamja e të dhënave bazë.

Shitësit tanë me pakicë na kujtojnë, për hir të tij, se e gjithë aksesi ynë në bazat e të dhënave krijohet përmes procs, në mënyrë që ne të përshpejtojmë ndjeshëm korrigjimin e faljeve, në mënyrë që të gënjejmë të dhënat, dhe më pas thjesht të ekzekutojmë proc në punë mjedisi, dhe të mos krijoni një kod të ri dhe rikompiloni dhe ripërfitoni në virobnitstvo. Ne besojmë se të gjitha proceset tona ishin në duart e shoferit, kështu që kontrolli i xherelit nuk është aspak problem. Edhe pse vera nuk është në Subversion, dbas i verës shihet periodikisht dhe nuk ka mbështetje për Kontrollin e Burimit.

Ruajtja e procedurave, çmendurisht, ardhja... erë e keqe e përpiluar, duke hedhur planin para kallirit të punës, dhe ju mund t'i ruani të drejtat për to.

Nuk e kuptoj problemin me kodin e daljes në procedurën që po ruhet. Mund t'i kontrolloni lehtësisht, edhe nëse keni pak disiplinë.

Gjithmonë filloni nga skedari .sql, i cili është thelbi i procedurës për të ruajtur. Posto yogo në keruvannya me versione pasi ke shkruar kodin. Herën tjetër, nëse doni të ndryshoni procedurën tuaj, atë që ruhet, ju hiqni elementin tuaj të kontrollit të jashtëm, poshtë bazës së të dhënave. Nëse e ndiqni këtë, do të keni të njëjtin menaxhim të mirë si kodi juaj.

Do të doja të citoja Tom Kyte nga Oracle këtu... Ky është rregulli për të shkruar kodin... edhe nëse është paksa mospërputhje, por unë e di më mirë, mendoj.

Shtesa jonë ka një top kodi, të cilin mund ta përdorim për të kërkuar (dhe ndonjëherë na duhet një procedurë që ruhet). Tse na lejon:

  • lehtësisht otrimat të gjithë pyesni pіd orë keruvannya versionet
  • robiti të gjitha ndryshimet për kujdesin e lëkurës për serverë të ndryshëm të bazës së të dhënave
  • përfshin përsëritjen e të njëjtit kod përmes kodit tonë

Kontrolli i aksesit zbatohet në topin e mesëm, dhe jo në bazën e të dhënave, kështu që nuk kemi nevojë për procedura që ruhen. E gjithë bota është rruga e mesme midis kërkesave të veçanta dhe procedurave që trajtohen.

Është e nevojshme të ndryshohen argumentet për të dyja procedurat, të cilat ruhen si në depo qendrore, por (potencialisht) të rëndësishme për t'u transferuar, dhe specialitetet janë më të lehta për t'u gjetur, erëra e keqe me kodin tuaj, por edhe erërat mund të njihen më mirë. në kod.

Argumenti se procedurat që ruhen janë më efektive, mos u hakmerr më. teksti i dërguar

Këshilla e Google për procedurën që ndërmerret kundrejt Dynamic Query do t'ju tregojë disa argumente në çdo rast dhe, është më mirë që ju të pranoni vendimin tuaj.

Deyakі rechі, për yaki është e nevojshme të mendoni: Kush ka nevojë për procedura, çfarë po kursen ata, gjithsesi?

Është e qartë se ushqimi i nevojave tuaja të fuqisë është i rëndësishëm, por është akoma më e rëndësishme të mendoni për ato që, me pijet më të veçanta në mes, të orientuara nga pjesa më e madhe, janë të sigurta. Kujdes nga parametrizimi juaj dhe ndiqni mospërputhjet tipike siç janë injeksionet SQL.

Procs për arsye të tjera, dhe është gjithashtu më e lehtë të përmirësohet proc për profile shtesë ose pjesë të proc. Në këtë renditje, nuk keni nevojë t'i tregoni askujt për nisjen e programeve tuaja, për të zbuluar se çfarë po dërgohet në serverin SQL

Nëse doni të pyesni ad-hoc, ndërroni mendjen se ato janë të parametrizuara

Parametrimi i SQL ose SPROC... nuk ka shumë rëndësi për sa i përket performancës... mund të kërkoni optimizimin e njërit prej tyre.

Për mua, pjesa tjetër e avantazhit të SPROC është se unë mund të çaktivizoj shumë të drejta për menaxhimin e të drejtave SQL, thjesht jepni të drejtat e mia për t'u identifikuar në sprocs... kështu që ju mund të fitoni SQL të Parametizuar, të identifikoheni, të lidheni me rreshtin tuaj të lidhjes , ndoshta më shumë (regjistrimi i çdo lloj operatori për të zgjedhur në njërën nga tabelat, në të cilën ata kanë akses, për shembull).

Si më parë, unë kam favorizuar SQL të parametrizuar, duke dashur të...

Argumenti i produktivitetit sproc є spirnim - 3 RDBM-të e sipërme rifitojnë planin për pije dhe orët ditore. Yogo u dokumentua... Çfarë është ende 1995?

Megjithatë, zbatimi i SQL në programin tuaj është gjithashtu një dizajn i keq - mirëmbajtje e kodit, ndoshta jo një koncept mjaft i mirë për të pasurit.

Po kështu, programi mund të fillojë nga e para për ORM shtesë (shtesa nga fusha e gjelbër larg kіlkoh!), tse vіdminny vibrіr, oskіlki modeli i klasës suaj keruє modelin tuaj DB që vetëm një orë.

Meqenëse struktura ORM nuk është e disponueshme, ne kemi hakuar një pidhide hibrid për të krijuar një skedar XML të burimeve SQL për të kërkuar një rresht të SQL për të nevojshme (erë e keqe më pas ruhet në memorien e fshehtë nga infrastruktura e burimeve). Ashtu si SQL do të kërkojë disa manipulime të vogla që janë të ndryshme nga kodi, do të kërkojë gjithashtu një manipulim të madh të një rreshti SQL, të cilin ne e rimendojmë.

Ky pidkhid hibrid e bën më të lehtë menaxhimin e shitësve me pakicë (ndoshta, nëse jam më i vogël, copëzat e ekipit tim mund të pastrohen, në mënyrë që të mund të lexoj planin për kërkesën), dhe laringu është thjesht një riverifikim i SVN. Për më tepër, unë do t'ju kërkoj të ndërroni RDBM - thjesht zëvendësoni skedarin e burimit SQL (jo aq i thjeshtë sa një mjet ORM, natyrisht, por funksionon me sisteme të vjetra ose një bazë të dhënash, e cila nuk mbështetet)

Mendimi im është se 90% e kërkesave dhe/ose procedurave që ruhen nuk janë përgjegjëse për caktimin e një takimi (të pranuara, me dorë).

Qasja në të dhëna mund të gjenerohet automatikisht. Ju mund të zgjidhni nëse dëshironi të gjeneroni procedura në mënyrë statike në kohën e përpilimit ose në mënyrë dinamike në kohën e ndërtimit, ose nëse dëshironi të shtoni një kolonë në tabelë (autoriteti i objektit), duhet të ndryshoni vetëm një skedar.

Unë do t'i ruaj të gjitha të dhënat akses kodin e programit, me ç'rast qasja në të dhëna mund të merret direkt nga SQL-kërkesat. Nga ana tjetër, logjika menaxhimi, siç kam vendosur në bazën e të dhënave në pamjen e nxitësve, procedurave të ruajtjes, funksioneve bazë dhe më shumë. Një shembull i faktit që unë respektoj datën e bazës së të dhënave dhe gjenerimin e të dhënave - është e pranueshme që klienti ynë të ketë FirstName dhe LastName. Tani për ndërfaqen koristuvach, nevojitet DisplayName, siç duket nga një logjikë jo e parëndësishme. Për këtë gjeneratë, unë krijoj një procedurë që ruhet, më pas ajo do të niset nga një këmbëz sa herë që rreshti të përditësohet (përndryshe, të dhëna të tjera).

Duket se ka diçka më të pakuptueshme, që qasja në të dhëna është e njëjtë me bazën e të dhënave, dhe gjithçka që ia vlen të aksesosh të dhënat në ato të dhëna është vetë aty. Është thjesht e gabuar, por po drejtoj shumë projekte, si të bërtas nga idetë. Ndoshta një fenomen i tërë lokal.

Unë thjesht mund të aktivizoj idenë e PS-së duke bërë kaq shumë dizajne të këqija. Për shembull, në një projekt, në të cilin mora pjesë, u përpoqa të shkruaja CRUD për tabelat e lëkurës dhe lëkurat për një kërkesë të zgjuar dhe era e keqe më goditi. Me të cilët, era e keqe shtoi një tjetër top budallaqe. Më dhemb të mendosh për fjalime të tilla.

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 dhe programin e lehtë për t'u përdorur. 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
SHKARKONI 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 të tilla danitale mund të privilegjohen për vikonannya (EKZEKUTIM).
. Їх janë zgjedhur ті, në të cilat numri i parametrave përcaktohet nga numri i argumenteve në pyetje. Llojet dhe parametrat e caktuar të të dhënave të atyre pozicioneve janë rishikuar.
. Nëse më shumë se një nënprogram lihet jashtë, atëherë 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:

NDRYSHO PROCEDURËN [([{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.