Procedura e ruajtur MySQL kundrejt funksionit që do ta përdor kur? Procedurat e ruajtura në MySQL

Kujdes! Kjo vepër bazohet në përkthimin e seksionit “17.1. Rutinat e ruajtura dhe tabelat e granteve" përshkrim i softuerit MySQL 5.0.19, "Manual referencë. Ai dokumenton MySQL 5.0 deri në 5.0.19. Dokument i krijuar më: 2006-01-23 (rishikimi:995)"
"Lexoni gjithçka së pari, pastaj provoni shembujt."

Procedurat e ruajtura janë një grup komandash SQL që mund të kompilohen dhe ruhen në një server. Në këtë mënyrë, në vend që të ruajnë një pyetje të përdorur shpesh, klientët mund të referojnë procedurën përkatëse të ruajtur. Kjo siguron performancë më të mirë sepse një kërkesë e caktuar duhet të analizohet vetëm një herë dhe redukton trafikun midis serverit dhe klientit. Niveli konceptual gjithashtu mund të rritet duke krijuar një bibliotekë funksionesh në server.

Një nxitës është një procedurë e ruajtur që ekzekutohet kur ndodh një ngjarje specifike. Për shembull, mund të përcaktoni një procedurë të ruajtur që ekzekutohet çdo herë që një rekord fshihet nga një tabelë transaksionesh, duke siguruar kështu që klienti përkatës të fshihet automatikisht nga tabela e klientit kur të gjitha transaksionet e tij fshihen.

Programet e ruajtura (procedurat dhe funksionet) mbështeten në MySQL 5.0. Procedurat e ruajtura janë një grup shprehjesh SQL që mund të ruhen në server. Pasi të bëhet kjo, klienti nuk ka më nevojë të ritransmetojë kërkesën, por thjesht thërret programin e ruajtur.

Kjo mund të jetë e dobishme kur:

  • Aplikacione të shumta klientësh janë shkruar në gjuhë të ndryshme ose ekzekutohen në platforma të ndryshme, por duhet të përdorin të njëjtën bazë të dhënash transaksionesh
  • siguria vjen e para

Procedurat dhe funksionet e ruajtura (rutinat) mund të ofrojnë performancë më të mirë sepse kërkohet më pak informacion për t'u dërguar midis klientit dhe serverit. Zgjedhja rrit ngarkesën në serverin e bazës së të dhënave, por zvogëlon kostot nga ana e klientit. Përdoreni këtë nëse shumë makineri klientësh (siç janë serverët e uebit) shërbehen nga një ose më shumë baza të dhënash.

Rutinat e ruajtura ju lejojnë gjithashtu të përdorni bibliotekat e funksioneve të ruajtura në bazën e të dhënave të serverit. Ky funksion ofrohet për shumë gjuhë programimi moderne, të cilat i lejojnë ato të thirren drejtpërdrejt (për shembull, duke përdorur klasa).

MySQL ndjek sintaksën e SQL:2003 për procedurat e ruajtura, e cila përdoret tashmë në DB2 të IBM.

Nga fjalët tek veprat...

Kur krijon, modifikon, fshin rutinat e ruajtura, serveri manipulon tabelën mysql.proc

Që nga MySQL 5.0.3 kërkohen privilegjet e mëposhtme:

KRIJO RUTINË për të krijuar procedura të ruajtura

Ndrysho rutinën të nevojshme për të ndryshuar ose fshirë procedurat. Ky privilegj i caktohet automatikisht krijuesit të procedurës (funksionit)

EKZEKUTOHET do të kërkohet privilegj për të ekzekutuar nënprogramin. Megjithatë, ai i caktohet automatikisht krijuesit të procedurës (funksionit). Gjithashtu, si parazgjedhje, parametri SQL SECURITY për rutinën DEFINER, i cili u lejon përdoruesve me akses në bazën e të dhënave të thërrasin rutina të lidhura me këtë bazë të dhënash.

Sintaksa e procedurave dhe funksioneve të ruajtura

Një rutinë e ruajtur është një procedurë ose funksion. Rutinat e ruajtura krijohen duke përdorur deklaratat CREATE PROCEDURE ose CREATE FUNCTION. Një rutinë e ruajtur thirret duke përdorur një deklaratë CALL, me vetëm variablat që kthejnë vlerën që përdoren si variabla dalëse. Funksioni mund të thirret si çdo funksion tjetër dhe mund të kthejë një vlerë skalare. Rutinat e ruajtura mund të thërrasin rutina të tjera të ruajtura.

Që nga MySQL 5.0.1, procedura ose funksioni i ngarkuar shoqërohet me një bazë të dhënash specifike. Kjo ka disa kuptime:

  • Kur thirret një nënprogram, implikimi është se ajo duhet të thërrasë USE db_name (dhe të heqë bazën e të dhënave kur nënprogrami të ketë përfunduar dhe baza e të dhënave nuk është më e nevojshme)
  • Ju mund të kualifikoni emrat e rregullt me ​​një emër të bazës së të dhënave. Kjo mund të përdoret për të referuar një rutinë që nuk është në bazën aktuale të të dhënave. Për shembull, për të ekzekutuar një procedurë të ruajtur p ose një funksion f që është i lidhur me bazën e të dhënave të testit, mund t'i tregoni interpretuesit të komandës si kjo: CALL test.p() ose test.f().
  • Kur një bazë të dhënash fshihet, të gjitha rutinat e ngarkuara që lidhen me të fshihen gjithashtu. Në MySQL 5.0.0, rutinat e ngarkuara janë globale dhe nuk lidhen me bazën e të dhënave. Ata trashëgojnë bazën e të dhënave të paracaktuar nga deklarata thirrëse. Nëse USE db_name kryhet brenda një nënprogrami, baza e të dhënave origjinale aktuale do të rikthehet pas daljes nga nënprogrami (Për shembull, baza aktuale e të dhënave është db_11, ne e quajmë një nënprogram që përdor db_22, pas daljes nga nënprogrami mbetet db_11 aktuale)

MySQL mbështet plotësisht shtesat që ju lejojnë të përdorni shprehje të rregullta SELECT (pa përdorur kursorë ose ndryshore lokale) brenda procedurave të ruajtura. Seti i rezultateve i kthyer nga pyetja thjesht i dërgohet direkt klientit. Një pyetje e shumëfishtë SELECT gjeneron grupe të shumta rezultatesh, kështu që klienti duhet të përdorë një bibliotekë që mbështet grupe të shumta rezultatesh.

KRIJO PROCEDURA- krijoni një procedurë të ruajtur.

KRIJO FUNKSION- krijoni një funksion të ruajtur.

Sintaksë:

KRIJO PROCEDURA emri_procedurës ([parametri_procedurës[,...]])
[karakteristikat...] nënrutinë_trup

KRIJO FUNKSION emri_funksionit ([parametri_funksioni[,...]])
KTHIMET lloji
[karakteristikë...] nënprogram_trup

procedura_parametri:
[ | JASHTË | BRENDA JASHTE] lloji i emrit të parametrit
funksioni_parametri:
lloji i emrit të parametrit

lloji:
Çdo lloj të dhënash MySQL

karakteristike:
GJUHA SQL
| DETERMINISTIKE
| ( PËRMBAN SQL | JO SQL | LEXON TË DHËNAT SQL | MODIFIkon TË DHËNAT SQL )
| SQL SIGURIA (DEFINER | INVOKER)
| KOMENT "string"

nënprogrami_trupi:
Shprehja e saktë SQL.

Le të shohim gjithçka në praktikë.

Së pari, le të krijojmë një procedurë të ruajtur me pyetjen e mëposhtme:

KRIJO PROCEDURE `my_proc`(JALË T INTEGER(11))
JO DETERMINISTE
INVOKER SQL SECURITY
KOMENT ""
FILLOJ
zgjidhni val1+val2 në "t" nga "my" LIMIT 0,1;
FUND;

Përdorimi i shprehjes LIMIT në këtë pyetje është bërë në njohjen e faktit që jo çdo klient është në gjendje të pranojë një grup rezultatesh me shumë rreshta.

Pas kësaj, le ta quajmë atë:

THIRRJE my_proc(@a);
ZGJIDH @a;

Për të ndarë një kërkesë të brendshme nga një e jashtme, përdoret gjithmonë një ndarës i ndryshëm nga ai i zakonshëm (për detyrën, përdorni komandën DELIMITER <строка/символ>)

Këtu është një shembull tjetër duke marrë parasysh të gjitha kërkesat.

Mysql> delimiter //
mysql> KRIJO PROCEDURE simpleproc (OUT param1 INT)
-> FILLO
-> SELECT COUNT(*) INTO param1 FROM t;
->FUND;
-> //

mysql>kufizues;
mysql> THIRRJE simpleproc(@a);
Kërkesa në rregull, 0 rreshta të prekur (0,00 sek)
mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 rresht në grup (0,00 sek)

I gjithë procesi mund të shihet në figurën më poshtë:

Shkaqet

Mbështetja e aktivizimit ka qenë e disponueshme në MySQL që nga versioni 5.0.2.

Kthesë- një objekt i emërtuar i bazës së të dhënave që lidhet me një tabelë dhe aktivizohet kur ndodh një ngjarje e caktuar, një ngjarje e lidhur me këtë tabelë.

Për shembull, kodi më poshtë krijon një tabelë dhe një nxitës INSERT. Shkaku përmbledh vlerat e futura në një nga kolonat e tabelës.

Mysql> CREATE TABLE account (acct_num INT, shuma DECIMAL(10,2));
Kërkesa në rregull, 0 rreshta të prekur (0,03 sek)
mysql> KRIJO TRIGGER ins_sum PARA INSERT ON llogarinë
-> PËR ÇDO RRESHT SET @sum = @sum + NEW.samount;
Kërkesa në rregull, 0 rreshta të prekur (0,06 sek)

Le të deklarojmë variablin shuma dhe t'i caktojmë vlerën 1. Pas kësaj, sa herë që fusim në tabelë llogari vlera e kësaj variabli do të rritet sipas pjesës së futur.

Koment. Nëse vlera e ndryshores nuk inicializohet, këmbëza nuk do të funksionojë!

Sintaksë për krijimin e një shkas

KRIJONI

SHKËZUES trigger_name trigger_time trigger_event
ON tabela_emri PER CDO RRESHT shprehje_ekzekutuar_when_trigger_fires

Nëse gjithçka është e qartë menjëherë me emrin e aktivizimit dhe emrin e përdoruesit, atëherë do të flasim veçmas për "kohën e nxitjes" dhe "ngjarjen".

koha_shkakëzimi

Përcakton kohën në të cilën ndodh veprimi i nxitjes. PARA do të thotë që këmbëza do të ekzekutohet përpara se të përfundojë ngjarja e nxitjes, dhe AFTER do të thotë pas. Për shembull, kur futni rekorde (shih shembullin më lart), këmbëza jonë u ndez përpara futjes aktuale të rekordit dhe llogariti shumën. Ky opsion është i përshtatshëm për llogaritjen paraprake të disa fushave shtesë në tabelë ose futjen paralele në një tabelë tjetër.

shkaktari_ngjarja

Gjithçka është më e thjeshtë këtu. Ai tregon qartë se në cilën ngjarje ekzekutohet këmbëza.

  • INSERT: d.m.th. gjatë operacioneve të futjes ose shprehjeve të ngjashme (INSERT, LOAD DATA dhe REPLACE)
  • UPDATE: kur modifikohet një ent (rresht).
  • FSHIJE: Kur një regjistrim fshihet (pyetjet që përmbajnë deklarata DELETE dhe/ose REPLACE)

Përkufizimi 1

Procedura e ruajturështë një pjesë e pavarur e kodit të softuerit që krijohet dhe ruhet në një bazë të dhënash MySQL.

Një procedurë e ruajtur mund të përfshijë deklarata SQL dhe struktura të veçanta kontrolli. E dobishme kur i njëjti funksion duhet të kryhet nga aplikacione ose platforma të ndryshme, ose si një mjet për të fshehur funksionalitetin. Në një bazë të dhënash, procedurat e ruajtura konsiderohen analoge me qasjen e orientuar nga objekti në programim. Procedurat e ruajtura mund të përdoren për të kontrolluar se si aksesohen të dhënat.

Krijimi i një procedure të ruajtur

Le të krijojmë një procedurë të quajtur GetAllProducts() për të marrë një listë të të gjitha produkteve nga tabela.

Për ta bërë këtë, duhet të shkarkoni klientin mysql dhe të ekzekutoni komandat e mëposhtme:

Ekipi DELIMITER // nuk përfshihen në procedurat e ruajtura. DELIMITER është një komandë e veçantë që ndryshon ndarësin standard të pyetjes (parazgjedhja ";") në atë të specifikuar pas tij. Me këtë komandë do ta ndryshojmë atë në 2 të pjerrëta (//).

Nëse nuk e ndryshoni kufirin, mysql do të keqinterpretojë procedurën dhe do të hedhë një gabim. Pas FUNDIT, përdoret një përcaktues // dhe komanda DELIMITER kthen vlerën e ndarësit ";".

Fjalët e rezervuara CREATE PROCEDURE i thonë mysql që të krijojë një PROCEDURE. Pas këtyre fjalëve, duhet të tregoni emrin e procedurës së ruajtur (në shembullin GetAllProducts). Kllapat e zbrazëta "()" pas emrit të procedurës do të thotë që procedura nuk pranon asnjë ndryshore.

Komandat BEGIN dhe END respektivisht hapin dhe mbyllin një bllok të kodit SQL.

Nuk është shumë i përshtatshëm për të shkruar procedurat e ruajtura në tastierën mysql. Në këtë rast, mund të përdorni mjete GUI, me të cilat mund të krijoni procedura të ruajtura në një ndërfaqe intuitive.

MySQL Workbench një procedurë krijohet duke klikuar me të djathtën mbi Rutinat dhe duke zgjedhur artikullin nga menyja rënëse Krijo procedurë…

Ju mund të shikoni kodin e plotë që do të dërgohet në MySQL përpara se të shkruhet në bazën e të dhënave. Nëse nuk ka gabime, klikoni Aplikoni.

Pas kompilimit, MySQL shkruan procedurën në një direktori. Pas përfundimit të regjistrimit, shtypni butonin Përfundo.

Ju mund të shihni procedurën e ruajtur të krijuar në listën e Rutinave.

Thirrja e një procedure të ruajtur

Për të thirrur një procedurë të ruajtur, përdorni komandën e integruar SQL THIRRJE(TELONI):

Në vend të STORED_PROCEDURE_NAME Tregohet emri i procedurës së ruajtur dhe një listë e variablave tregohet në kllapa. Për të thirrur procedurën e krijuar pa variabla, do të përdoret kodi:

Sepse procedura duhet të ekzekutojë komandën * ZGJIDH NGA produktet;**, d.m.th. ZGJIDHni të gjitha NGA tabela PRODUKTET, atëherë një shembull se si do të funksiononte do të ishte rezultati i mëposhtëm:

Variablat në procedurat e ruajtura

Përkufizimi 2

E ndryshueshmeështë një objekt i emërtuar i të dhënave që përmban një vlerë kur ekzekutohet një procedurë e ruajtur.

Ato përdoren për të ruajtur çdo rezultat të një pyetjeje ose shprehjeje. Variablat në procedurat e ruajtura janë lokale, d.m.th. ato nuk mund të thirren nga jashtë.

Deklarimi i variablave

Përkufizimi 3

Quhet procesi për t'i thënë mysql se duhet përdorur një variabël deklaratë.

Për të deklaruar variabla, përdorni operatorin DEKLARONI:

DEKLARONI– operator i rezervuar.

emri_ndryshore– emri i një variabli, për të cilin zbatohen të njëjtat rregulla si për emrin e një kolone të dhënash në MySQL.

lloji i të dhënave (madhësia)– llojin e variablit që përdoret dhe madhësinë e tij. Variablat në MySQL mund të marrin vlera të çdo lloji të të dhënave, si DATETIME, VARCHAR, INT, etj.

Vlera_default_default– ju lejon të vendosni vlerën fillestare të ndryshores. Nëse nuk specifikohet, vlera e paracaktuar do të jetë NULL.

Për të krijuar një variabël total_sale, i cili do të ruajë një listë blerjesh të llojit INT dhe që do të jetë e barabartë me 0 si parazgjedhje, shkruani kodin:

Për të deklaruar disa variabla të të njëjtit lloj, mund të shkruani kodin:

Caktimi i vlerave për një ndryshore

Për t'i caktuar një vlerë një ndryshoreje, përdorni operatorin SET.

Për shembull, ne deklarojmë variablin total_count dhe më pas i caktojmë vlerën 10:

Përveç operatorit SET, operatori SELECT INTO mund të përdoret për të transferuar rezultatin e një pyetjeje në një variabël. Ju lutemi vini re se pyetja duhet të kthejë një vlerë skalare (d.m.th. një).

Rreshti i parë i kodit deklaron variablin total_products dhe vendos vlerën e tij në 0.

Rreshti i dytë dhe i tretë përdorin deklaratën SELECT INTO për të shkruar rezultatin e pyetjes SELECT COUNT(*) FROM produkteve në variablin e krijuar.

Fusha e ndryshueshme

Çdo variabël ka shtrirjen e vet, e cila përcakton jetëgjatësinë e saj.

Nëse krijoni një ndryshore brenda një procedure të ruajtur, ajo do të ekzistojë ndërsa është në përdorim.

Nëse deklaroni një variabël brenda një blloku BEGIN END, atëherë ai do të ekzistojë vetëm brenda këtij blloku.

Variablat me @ në fillim të emrave të tyre janë globale, d.m.th. ato janë të disponueshme gjatë gjithë seancës.

Puna laboratorike nr.1 “Procedurat e ruajtura në M

ySQL"

3.1.Qëllimi i punës

Studioni llojet e përdorura në MySQL procedurat e ruajtura.

Fitoni aftësi për të punuar me procedurat e ruajtura duke përdorur komandat SQL dhe duke përdorur një program dbForge për MySQL.

3.2. Prezantimi

Procedurat e ruajtura janë një nga mjetet më të fuqishme të ofruara për zhvilluesit e aplikacioneve të bazës së të dhënave MySQL për të zbatuar logjikën e biznesit. Procedurat e ruajtura (anglisht, stoied proceduies) ju lejojnë të zbatoni një pjesë të konsiderueshme të logjikës së aplikacionit në nivelin e bazës së të dhënave dhe në këtë mënyrë të rrisni performancën e të gjithë aplikacionit, të centralizoni përpunimin e të dhënave dhe të zvogëloni sasinë e kodit të kërkuar për të përfunduar detyrat e caktuara. Pothuajse çdo aplikacion mjaft kompleks i bazës së të dhënave nuk mund të bëjë pa përdorimin e procedurave të ruajtura.

Përveç këtyre avantazheve të njohura të përdorimit të procedurave të ruajtura, të zakonshme për shumicën e DBMS-ve relacionale, procedurat e ruajtura InterBase mund të veprojnë si grupe pothuajse të plota të të dhënave, duke lejuar që rezultatet që ata kthehen të përdoren në pyetjet e zakonshme SQL.

3.3. Mënyra e kryerjes së punës

2. Zhvilloni tekstin e procedurave të ruajtura për tre pyetje në përputhje me variantin e detyrës për punë laboratorike nr.4.

3. Modifikoni aplikacionin në përputhje me modifikimin e bazës së të dhënave. Lëreni aplikacionin të funksionojë siç duhet. Organizoni një kërkesë për të dhëna në një aplikacion përmes procedurave të ruajtura në SQL.

3.4. Opsionet e detyrave

Të dhënat fillestare për punën laboratorike janë variantet e detyrave dhe rezultatet e punës së mëparshme laboratorike.

3.5. Përmbajtja e raportit

Raporti duhet të përmbajë një përshkrim dhe rezultatet e punës të paraqitura në sekuencën vijuese:

1. Përshkrimi i rregullave të biznesit të zbatuara duke përdorur procedura të ruajtura.

2. Shtypja e skriptit për krijimin e procedurave të ruajtura me komente mbi procedurat e krijuara të ruajtura.

3. 6. Pyetjet e testit

1. Përcaktoni një procedurë të ruajtur.

2. Si krijohet një procedurë e ruajtur?

3. Si të vendosen parametrat e daljes së një procedure të ruajtur?

4. Si u caktohen vlerat variablave?

5. Si të organizohet një lak në një procedurë të ruajtur?

6. Si të zbatohet një kërcim i kushtëzuar në një procedurë të ruajtur?

7. Si të trajtohen gabimet e ekzekutimit të një procedure të ruajtur?

3.7.1. Koncepti i një procedure të ruajtur

Një procedurë e ruajtur është një mënyrë për të përmbledhur veprimet e përsëritura. Procedurat e ruajtura mund të deklarojnë variabla, të manipulojnë rrjedhën e të dhënave dhe të përdorin teknika të tjera programimi.

Arsyeja e krijimit të tyre është e qartë dhe konfirmohet nga përdorimi i shpeshtë.

Mbrapa

  • Ndarja e logjikës me aplikacione të tjera. Procedurat e ruajtura përmbledhin funksionalitetin; kjo siguron lidhje për aksesin dhe menaxhimin e të dhënave nëpër aplikacione të ndryshme.
  • Izolimi i përdoruesve nga tabelat e bazës së të dhënave. Kjo ju lejon të jepni akses në procedurat e ruajtura, por jo në vetë të dhënat e tabelës.
  • Ofron një mekanizëm mbrojtës. Sipas pikës së mëparshme, nëse mund t'i qaseni të dhënave vetëm përmes procedurave të ruajtura, askush tjetër nuk mund t'i fshijë të dhënat tuaja përmes komandës SQL DELETE.
  • Përmirësimi i ekzekutimit si rezultat i trafikut të reduktuar të rrjetit. Duke përdorur procedurat e ruajtura, mund të kombinohen pyetje të shumta.

Kundër

  • Rritja e ngarkesës në serverin e bazës së të dhënave për faktin se pjesa më e madhe e punës kryhet në anën e serverit, dhe më pak në anën e klientit.
  • Do t'ju duhet të mësoni shumë. Ju do të duhet të mësoni sintaksën e shprehjes MySQL për të shkruar procedurat tuaja të ruajtura.
  • Ju po dyfishoni logjikën e aplikacionit tuaj në dy vende: kodin e serverit dhe kodin për procedurat e ruajtura, duke e komplikuar kështu procesin e manipulimit të të dhënave.
  • Migrimi nga një DBMS në tjetrin (DB2, SQL Server, etj.) mund të çojë në probleme.

Si të punoni me procedurat e ruajtura

Krijimi i një procedure të ruajtur

KRIJO PROCEDURËN p2()

INVOKER SQL SECURITY

KOMENT "Kjo është procedura ime e parë"

FILLOJ

ZGJIDH "Përshëndetje";

Pjesa e parë e kodit krijon një procedurë të ruajtur. Tjetri përmban parametra opsionalë. Pastaj vjen emri dhe, së fundi, trupi i vetë procedurës.

Emrat e procedurave të ruajtura janë të ndjeshme ndaj shkronjave të vogla. Ju gjithashtu nuk mund të krijoni procedura të shumta me të njëjtin emër. Nuk mund të ketë shprehje brenda një procedure të ruajtur që modifikojnë vetë bazën e të dhënave.

4 karakteristikat e një procedure të ruajtur:

  • Gjuha: Për qëllime transportueshmërie, parazgjedhja është SQL.
  • Deterministik: nëse procedura kthen gjithmonë të njëjtin rezultat dhe merr të njëjtat parametra hyrës. Kjo është për procesin e përsëritjes dhe regjistrimit. Vlera e paracaktuar NUK është DETERMINISTIKE.
  • SQL Security: të drejtat e përdoruesit kontrollohen gjatë telefonatës. INVOKER është përdoruesi që thërret procedurën e ruajtur. DEFINER është “krijuesi” i procedurës. Vlera e paracaktuar është DEFINER.
  • Koment: Për qëllime dokumentacioni, vlera e paracaktuar është

Thirrja e një procedure të ruajtur

Për të thirrur një procedurë të ruajtur, duhet të shkruani fjalën kyçe CALL, e ndjekur nga emri i procedurës, e ndjekur nga parametrat (variablat ose vlerat) në kllapa. Kërkohen kllapa.

THIRRJE p2();

THIRRJE emrin e_procedurës_sponuar (param1, param2, ....)

Procedura CALL1(10, "parametri i vargut", @parameter_var);

Modifikimi i një procedure të ruajtur

MySQL ka një deklaratë ALTER PRO CEDURE për ndryshimin e procedurave, por është i përshtatshëm për të ndryshuar vetëm disa karakteristika. Nëse keni nevojë të ndryshoni parametrat ose trupin e një procedure, duhet ta fshini dhe rikrijoni atë.

Heqja e një procedure të ruajtur

PROCEDURA E HEQJES NËSE EKZISTON p2;

Ky është një komandë e thjeshtë. Deklarata IF EXISTS kap një gabim nëse një procedurë e tillë nuk ekziston.

Opsione

Le të shohim se si mund t'i kalojmë parametrat në një procedurë të ruajtur.

  • CREATE PROCEDURE proc1(): lista e parametrave bosh
  • KRIJO PROCEDURËN proc1 (Në emrin e vargut TË DHËNAT-TYPE): një parametër hyrës. Fjala IN është opsionale sepse parametrat e paracaktuar janë IN (in).
  • KRIJO PROCEDURËN proc1 (JASHTË TË DHËNAVE TË LLOJIT të emrit të varrit): një parametër kthimi.
  • KRIJO PROCEDURE proc1 (INOUT varname DATA-TYPE): një parametër, i përfshirë dhe i kthyer.

Natyrisht, ju mund të specifikoni disa parametra të llojeve të ndryshme.

Shembull i parametrit IN

KRIJO PROCEDURE proc_IN (NE var1 INT)

FILLOJ

SELECT var1 + 2 rezultat AS;

FUND

Shembull parametri OUT

KRIJO PROCEDURE proc_OUT (JALË var1 VARCHAR(100))

FILLOJ

SET var1 = "Ky është një test";

FUND

Shembull i parametrit INOUT

KRIJO PROCEDURE proc_INOUT (JASHTË var1 INT)

FILLOJ

SET var1 = var1 * 2;

FUND

Variablat

Le të shohim krijimin e variablave dhe ruajtjen e tyre brenda procedurave. Variablat duhet të deklarohen në mënyrë eksplicite në fillim të bllokut BEGIN/END, së bashku me llojet e tyre të të dhënave. Pasi të keni deklaruar një variabël, mund ta përdorni atë në të njëjtën mënyrë si variablat e sesioneve, literalet ose emrat e kolonave.

Sintaksa e deklarimit të ndryshores duket si kjo:

DEKLAROJ emrin e vargut TË DHËNAT-LLOJI DEFAULT vlerën e paracaktuar ;

Le të deklarojmë disa variabla:

DEKLARONI a, b NË PARALAKTUAR 5;

DECLARE rr VARCHAR(50);

DEKLAROJ v1, v2, v3 TINYINT;

Puna me variablat

Pasi të keni deklaruar një ndryshore, mund të vendosni vlerën e saj duke përdorur komandat:

KRIJO PROCEDURE var_proc (NE paramstr VARCHAR(20))

FILLOJ

DEKLARONI a, b NË PARALAKTUAR 5;

DECLARE rr VARCHAR(50);

DEKLAROJ sot TIMESTAMP DEFAULT CURRENT_DATE;

DEKLAROJ v1, v2, v3 TINYINT;

VLERA NË TABELËN 1 (a);

SET str = "Unë jam një varg";

SELECT CONCAT(str,paramstr), sot NGA tabela2 WHERE b >=5;

Strukturat e kontrollit të fijeve

MySQL mbështet konstruktet IF, CASE, ITERATE, LEAVE LOOP, WHILE dhe REPEAT për të kontrolluar thread-et brenda një procedure të ruajtur. Ne do të shohim se si të përdorim IF, CASE dhe WHILE pasi ato janë më të përdorurat.

IF dizajni

Duke përdorur konstruktin IF, ne mund të kryejmë detyra që përmbajnë kushte:

KRIJO PROCEDURE proc_IF (NE param1 INT)

FILLOJ

DECLARE variabël1 INT;

Ndryshorja SET1 = param1 + 1;

NËSE variabli 1 = 0 atherë

SELECT variabël1;

ENDIF;

NËSE param1 = 0 atherë

SELECT "Vlera e parametrit = 0";

TJETER

SELECT "Vlera e parametrit<> 0";

ENDIF;

FUND

Dizajn CASE

CASE është një metodë tjetër e testimit të kushteve dhe zgjedhjes së një zgjidhjeje të përshtatshme. Kjo është një mënyrë e shkëlqyer për të zëvendësuar shumë konstruksione IF. Konstrukti mund të përshkruhet në dy mënyra, duke siguruar fleksibilitet në menaxhimin e shprehjeve të shumta të kushtëzuara.

FILLOJ

DECLARE variabël1 INT;

Ndryshorja SET1 = param1 + 1;

Ndryshorja CASE1

KUR 0 PASTAJ

KUR 1 PASTAJ

TJETER

RASTI FUNDIT;

ose:

KRIJO PROCEDURE proc_CASE (NE param1 INT)

FILLOJ

DECLARE variabël1 INT;

Ndryshorja SET1 = param1 + 1;

RAST

KUR variabli 1 = 0 PASTAJ

INSERT NË TABELËN 1 VLERAT (param1);

KUR variabli 1 = 1 PASTAJ

INSERT NË TABELËN 1 VLERAT (variabla1);

TJETER

INSERT NË tabelën1 VLERAT (99);

RASTI FUNDIT;

FUND

NDERSA dizajn

Teknikisht, ekzistojnë tre lloje sythe: cikli WHILE, cikli LOOP dhe cikli REPEAT. Ju gjithashtu mund të qarkulloni duke përdorur teknikën e programimit Darth Vader: deklaratat GOTO. Këtu shembull i ciklit:

KRIJO PROCEDURE proc_WHILE (NË param1 INT)

FILLOJ

DECLARE variable1, variable2 INT;

Ndryshorja SET1 = 0;

WHILE variabli1< param1 DO

INSERT NË TABELËN 1 VLERAT (param1);

SELECT COUNT(*) INTO variabël2 FROM tabela1;

Ndryshorja SET1 = ndryshore1 + 1;

PËRFUNDON NDERSA;

FUND

Kursorët

Kursorët përdoren për të përshkuar grupin e rreshtave të kthyer nga një pyetje dhe për të përpunuar çdo rresht.

MySQL mbështet kursorët në procedurat e ruajtura. Këtu është një sintaksë e shkurtër për krijimin dhe përdorimin e një kursori.

/*Deklarimi i kursorit dhe plotësimi i tij */

DEKLAROJ kursorin - emri KURSOR PËR ZGJEDHJE ...;

/*Çfarë të bëni kur nuk ka më hyrje*/

DEKLARONI VAZHDIM TRAJTUESI PER NUK GJENDET……

/*Hap kursorin*/

HAPUR emrin e kursorit;

/*Cakto një vlerë për një ndryshore të barabartë me vlerën aktuale të kolonës*/

FETCH kursorin - emri INTO variabli [, variabla ];

/* Mbyll kursorin */

MBYLL emrin e kursorit;

Në këtë shembull ne do të kryejmë disa operacione të thjeshta duke përdorur një kursor:

KRIJO PROCEDURE proc_CURSOR (JASHTË param1 INT)

FILLOJ

DEKLARONI a, b, c INT;

DEKLARO KURSORIN kur1 PËR ZGJEDHJE col1 NGA tabela1;

DEKLARONI VAZHDIM TRAJTUESI PËR SETIN NUK GJETUR b = 1;

HAPUR cur1;

SET b = 0;

SET c = 0;

NDERSA b = 0 BËJ

SHKOJ cur1 NE a;

NËSE b = 0 ATËHERË

SET c = c + a;

ENDIF;

PËRFUNDON NDERSA;

MBYLL cur1;

SET param1 = c;

Kursorët kanë tre veti që duhet t'i kuptoni për të shmangur marrjen e rezultateve të papritura:

  • Jo i ndjeshëm: kursori që hapet një herë nuk do të pasqyrojë ndryshimet në tabelë që ndodhin më vonë. Në realitet, MySQL nuk garanton që kursori do të përditësohet, prandaj mos u mbështetni në të.
  • Vetëm për lexim: Kursorët nuk mund të modifikohen.
  • Nuk ka kthim prapa: kursori mund të lëvizë vetëm në një drejtim - përpara, nuk do të mund të kaloni rreshta pa i zgjedhur ato.

konkluzioni

Ju duhet të llogaritni përfitimet e përdorimit të procedurave të ruajtura në aplikacionin tuaj specifik dhe më pas të krijoni vetëm procedurat e nevojshme. Në përgjithësi, unë përdor procedura; Sipas mendimit tim, ato ia vlen të zbatohen në projekte për shkak të sigurisë së tyre, mirëmbajtjes së kodit dhe dizajnit të përgjithshëm. Gjithashtu, mbani në mend se procedurat MySQL janë ende një punë në progres. Prisni përmirësime në lidhje me funksionalitetin dhe përmirësimet. Ju lutem mos ngurroni të ndani mendimet tuaja.

Shembuj:

Testi CREATE PROCEDURE.p2(NË P_date DATE)

INVOKER SQL SECURITY

KOMENT "Kjo është procedura ime e parë"

FILLOJ

SELECT * NGA persona WHERE bdate<=P_bdate;

CREATE PROCEDURE test.p1(NË renditjeFusha VARCHAR(255), NË renditjeRendosja VARCHAR(255), NË Rreshtin e parëIndeksi SMALLINT, NË rreshtaPerFaqe SMALLINT)

INVOKER SQL SECURITY

KOMENT "Kjo është procedura ime e parë"

FILLOJ

SET @var = concat("ZGJIDH fio, Numëro(*) AS numërim FROM person,pnumber WHERE persona.id_person=pnumber.id_person GROUP BY fio",

" ORDER BY ", sortingField, " ", sortingOrder, " LIMIT ", firstRowIndex, ",", rowsPerPage);

PËRGATITNI zxc NGA @var;

EKZEKUTIMI zxc;

E thënë thjesht, procedurat e ruajtura (“SP”) janë procedura të ruajtura në një bazë të dhënash (të shkruara duke përdorur SQL dhe deklarata të tjera kontrolli) që mund të ekzekutohen nga një motor i bazës së të dhënave dhe të thirren nga kodi i programit që funksionon me atë motor. """ Lexo plotësisht

Procedurat e ruajtura në MySQL dhe PHP. Pjesa 2

Taylor Wren (Taylor Ren), 03.01.2014

Krijimi i një procedure të ruajtur në MySQL

Meqenëse HP-të ruhen në server, rekomandohet krijimi i tyre direkt në server, d.m.th. Ju nuk duhet të përdorni PHP ose gjuhë të tjera programimi për të ekzekutuar komandat SQL për të krijuar procedura të ruajtura.

Le të shohim se si të krijojmë një HP në një server MySQL, si të krijojmë një përdorues për të dhe si t'i caktojmë atij privilegje për të drejtuar HP-në tonë. Pastaj do të kontrollojmë korrektësinë e rezultatit. Për këtë unë do të përdor MySQL Workbench. Ju gjithashtu mund të përdorni programe të tjera (për shembull, PHPMyAdmin). Ju mund të zgjidhni paketën e veglave që ju përshtatet më së miri.

Le të themi se tabela jonë duket si kjo:

KRIJO TABELA `paga` (`empid` int(11) NOT NULL, `sal` int(11) DEFAULT NULL, ÇELËSI KRYESOR (`empid`)) ENGINE=InnoDB KARSET DEFAULT KARSET=utf8;

Për punonjësin tonë që ka nevojë për informacion statistikor mbi pagat (mesatare, maksimale, minimale, etj.) nga kjo tabelë, ne do të krijojmë një përdorues "tr" si më poshtë:

KRIJO PERDORUES "tr"@"localhost" I IDENTIFIKUAR NGA "mypass";

Tani le t'i caktojmë këtij përdoruesi të vetmin privilegj EXECUTE në skemën ku ndodhet tabela e pagave:

Granto ekzekutimin në hris.* në tr@`%`

Mund të verifikojmë që kemi caktuar privilegjin e saktë duke hapur "Përdoruesit dhe privilegjet" në MySQL Bench:

Tani le të krijojmë vetë HP-në si më poshtë:

DELIMITER $$ KRIJO PROCEDURE `avg_sal` (nga mesatarja dhjetore) FILLO zgjidhni mesataren (sal) në mesatare nga paga; FUND

Pas ekzekutimit të kësaj komande në MySQL Workbench, do të krijohet një avg_sal HP gati për përdorim. E kthen pagën mesatare nga tabela e pagave.

Për të kontrolluar nëse përdoruesi tr mund të ekzekutojë vërtet HP dhe nuk ka akses në tabelën e pagave, duhet të rilidhemi me serverin MySQL, duke u identifikuar si tr. Në MySQL Workbench, kjo mund të bëhet duke krijuar një lidhje tjetër dhe duke specifikuar përdoruesin e dëshiruar dhe fjalëkalimin e tij.

Pas lidhjes nga nën tr, gjëja e parë që vërejmë është se përdoruesi nuk sheh fare tabela, ai sheh vetëm HP:

Natyrisht, përdoruesi tr nuk mund të hyjë në asnjë nga tabelat (dhe për këtë arsye nuk mund të shohë informacion të detajuar rreth pagave nga tabela e pagave), por ai mund të drejtojë HP-në që kemi krijuar, e cila do t'i kthejë atij pagën mesatare për kompaninë:

Thirrni avg_sal(@out); zgjidhni @out;

Do të shfaqet paga mesatare.

Pra, ne kemi bërë të gjithë punën përgatitore: kemi krijuar një përdorues, i kemi caktuar privilegje, kemi krijuar një HP dhe e kemi testuar atë. Tani le të shohim se si ta quajmë këtë HP nga PHP.

Thirrja e një procedure të ruajtur nga PHP

Kur përdorni PDO, thirrja e HP-së është mjaft e thjeshtë. Këtu është kodi përkatës PHP:

$dbms = "mysql"; // Zëvendësoni parametrat e mëposhtëm të lidhjes me ato të përshtatshme për mjedisin tuaj: $host = "192.168.1.8"; $db = "hris"; $user = "tr"; $pass = "mypass"; $dsn = "$dbms:host=$host;dbname=$db"; $cn=PDO e re ($dsn, $user, $pass); $q=$cn->exec("thirrni avg_sal(@jashtë)"); $res=$cn->query("select @out")->fetchAll(); print_r($res);

Variabli $res përmban pagën mesatare nga tabela e pagave. Tani përdoruesi mund të kryejë përpunim të mëtejshëm të daljes duke përdorur PHP.

konkluzionet

Në këtë artikull, ne shikuam një komponent të harruar prej kohësh të bazave të të dhënave MySQL: procedurat e ruajtura. Përfitimet e përdorimit të HP janë të dukshme, por më lejoni t'ju kujtoj: Procedurat e ruajtura na lejojnë të aplikojmë kontroll më të rreptë të aksesit në të dhëna të caktuara kur logjika e biznesit e kërkon atë.

Përveç kësaj, ne demonstruam hapat bazë në krijimin e procedurave të ruajtura, përdoruesve dhe caktimin e privilegjeve të duhura dhe treguam se si thirret HP nga PHP.

Ky artikull nuk mbulon të gjithë temën e procedurave të ruajtura. Disa aspekte të rëndësishme si parametrat I/O, deklaratat e kontrollit, kursorët, sintaksa e plotë etj. nuk u trajtuan në këtë artikull të shkurtër.

Nëse jeni të interesuar, ju lutemi lini një koment këtu. Nëse është e nevojshme, ne do të jemi të lumtur të ofrojmë artikuj më të thelluar mbi aspektin e dobishëm dhe të fuqishëm të procedurave të ruajtura të MySQL.

Taylor Wren

Taylor është një zhvillues i pavarur i aplikacioneve në internet dhe desktop me bazë në Suzhou në Kinën lindore. Filloi me mjetet e zhvillimit Borland (C++Builder, Delphi), botoi një libër në InterBase. Që nga viti 2003 ai është ekspert i certifikuar i Borland. Pastaj kalova në zhvillimin e uebit në një konfigurim tipik LAMP. Më vonë fillova të punoj me jQuery, Symfony, Bootstrap, Dart etj.

Publikimet e mëparshme:

MySQL 5 ka shumë veçori të reja, një nga më të rëndësishmet prej të cilave është krijimi i procedurave të ruajtura. Në këtë tutorial, unë do të flas se cilat janë ato dhe si mund ta bëjnë jetën tuaj më të lehtë.

Prezantimi

Një procedurë e ruajtur është një mënyrë për të përmbledhur veprimet e përsëritura. Procedurat e ruajtura mund të deklarojnë variabla, të manipulojnë rrjedhën e të dhënave dhe të përdorin teknika të tjera programimi.

Arsyeja e krijimit të tyre është e qartë dhe konfirmohet nga përdorimi i shpeshtë. Nga ana tjetër, nëse flisni me ata që punojnë me ta në mënyrë të parregullt, mendimet do të ndahen në dy krahë krejtësisht të kundërt. Mos harroni këtë.

Mbrapa

  • Ndarja e logjikës me aplikacione të tjera. Procedurat e ruajtura përmbledhin funksionalitetin; kjo siguron lidhje për aksesin dhe menaxhimin e të dhënave nëpër aplikacione të ndryshme.
  • Izolimi i përdoruesve nga tabelat e bazës së të dhënave. Kjo ju lejon të jepni akses në procedurat e ruajtura, por jo në vetë të dhënat e tabelës.
  • Ofron një mekanizëm mbrojtës. Sipas pikës së mëparshme, nëse mund t'i qaseni të dhënave vetëm përmes procedurave të ruajtura, askush tjetër nuk mund t'i fshijë të dhënat tuaja përmes komandës SQL DELETE.
  • Përmirësimi i ekzekutimit si rezultat i trafikut të reduktuar të rrjetit. Duke përdorur procedurat e ruajtura, mund të kombinohen pyetje të shumta.

Kundër

  • Rritja e ngarkesës në serverin e bazës së të dhënave për faktin se pjesa më e madhe e punës kryhet në anën e serverit, dhe më pak në anën e klientit.
  • Do t'ju duhet të mësoni shumë. Ju do të duhet të mësoni sintaksën e shprehjes MySQL për të shkruar procedurat tuaja të ruajtura.
  • Ju po dyfishoni logjikën e aplikacionit tuaj në dy vende: kodin e serverit dhe kodin për procedurat e ruajtura, duke e komplikuar kështu procesin e manipulimit të të dhënave.
  • Migrimi nga një DBMS në tjetrin (DB2, SQL Server, etj.) mund të çojë në probleme.

Mjeti me të cilin punoj quhet MySQL Query Browser, i cili është mjaft standard për ndërveprim me bazat e të dhënave. Mjeti i linjës së komandës MySQL është një tjetër zgjedhje e shkëlqyer. Arsyeja që po ju them këtë është sepse phpMyAdmin i preferuar i të gjithëve nuk mbështet ekzekutimin e procedurave të ruajtura.

Nga rruga, unë jam duke përdorur një strukturë bazë të tabelës për ta bërë më të lehtë për ju të kuptoni këtë temë. Unë po flas për procedurat e ruajtura, dhe ato janë mjaft komplekse për të kërkuar thellimin në strukturën e rëndë të tabelës.

Hapi 1: Vendosni një kufizues

Një ndarës është një karakter ose varg karakteresh që përdoret për t'i treguar klientit MySQL që keni përfunduar së shkruari shprehjen SQL. Për shekuj me radhë, pikëpresja ka qenë kufizues. Megjithatë, mund të lindin probleme sepse mund të ketë shprehje të shumta në një procedurë të ruajtur, secila prej të cilave duhet të përfundojë me një pikëpresje. Në këtë tutorial përdor vargun "//" si kufitar.

Hapi 2: Si të punoni me procedurat e ruajtura

Krijimi i një procedure të ruajtur

KUFIZUES // KRIJO PROCEDURË `p2` () GJUHË SQL DETERMINISTIC SQL PËRCAKTOR I SIGURISË KOMENT "Një procedurë" FILLO ZGJIDH "Përshëndetje Botë!"; FUND//

Pjesa e parë e kodit krijon një procedurë të ruajtur. Tjetri përmban parametra opsionalë. Pastaj vjen emri dhe, së fundi, trupi i vetë procedurës.

Emrat e procedurave të ruajtura janë të ndjeshme ndaj shkronjave të vogla. Ju gjithashtu nuk mund të krijoni procedura të shumta me të njëjtin emër. Nuk mund të ketë shprehje brenda një procedure të ruajtur që modifikojnë vetë bazën e të dhënave.

4 karakteristikat e një procedure të ruajtur:

  • Gjuha: Për qëllime transportueshmërie, parazgjedhja është SQL.
  • Deterministik: nëse procedura kthen gjithmonë të njëjtin rezultat dhe merr të njëjtat parametra hyrës. Kjo është për procesin e përsëritjes dhe regjistrimit. Vlera e paracaktuar NUK është DETERMINISTIKE.
  • SQL Security: të drejtat e përdoruesit kontrollohen gjatë telefonatës. INVOKER është përdoruesi që thërret procedurën e ruajtur. DEFINER është “krijuesi” i procedurës. Vlera e paracaktuar është DEFINER.
  • Koment: Për qëllime dokumentacioni, vlera e paracaktuar është ""

Thirrja e një procedure të ruajtur

Për të thirrur një procedurë të ruajtur, duhet të shkruani fjalën kyçe CALL, e ndjekur nga emri i procedurës, e ndjekur nga parametrat (variablat ose vlerat) në kllapa. Kërkohen kllapa.

Thirrje e ruajtur_procedurës_emri (param1, param2, ....) Procedura e Thirrjes1(10 , "parametri i vargut" , @parameter_var);

Modifikimi i një procedure të ruajtur

MySQL ka një deklaratë ALTER PROCEDURE për ndryshimin e procedurave, por është e përshtatshme vetëm për ndryshimin e disa karakteristikave. Nëse keni nevojë të ndryshoni parametrat ose trupin e një procedure, duhet ta fshini dhe rikrijoni atë.

Heqja e një procedure të ruajtur

PROCEDURA E HEQJES NËSE EKZISTON p2;

Ky është një komandë e thjeshtë. Deklarata IF EXISTS kap një gabim nëse një procedurë e tillë nuk ekziston.

Hapi 3: Opsionet

Le të shohim se si mund t'i kalojmë parametrat në një procedurë të ruajtur.

  • CREATE PROCEDURE proc1(): lista e parametrave bosh
  • CREATE PROCEDURE proc1 (Në varname DATA-TYPE): një parametër hyrës. Fjala IN është opsionale sepse parametrat e paracaktuar janë IN (in).
  • KRIJO PROCEDURËN proc1 (JASHTË emrit të varrit TË DHËNA-TYPE): u kthye një parametër.
  • CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE): një parametër, si hyrje ashtu edhe kthim.

Natyrisht, ju mund të specifikoni disa parametra të llojeve të ndryshme.

Shembull i parametrit IN

DELIMITER // KRIJO PROCEDURE `proc_IN` (IN var1 INT) FILLO ZGJIDH var1 + 2 SI rezultat; FUND//

Shembull parametri OUT

DELIMITER // KRIJO PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100)) BEGIN SET var1 = "Ky është një test"; FUND //

Shembull i parametrit INOUT

KUFIZUES // KRIJO PROCEDURË `proc_INOUT` (OUT var1 INT) FILLO SET var1 = var1 * 2; FUND //

Hapi 4: Variablat

Tani do t'ju mësoj se si të krijoni variabla dhe t'i ruani ato brenda procedurave. Ju duhet t'i deklaroni ato në mënyrë eksplicite në fillim të bllokut BEGIN/FUND, së bashku me llojet e tyre të të dhënave. Pasi të keni deklaruar një variabël, mund ta përdorni atë në të njëjtën mënyrë si variablat e sesioneve, literalet ose emrat e kolonave.

Sintaksa e deklarimit të ndryshores duket si kjo:

DEKLARONI vlerën e paracaktuar të emrit të vargut DATA-TYPE DEFAULT;

Le të deklarojmë disa variabla:

DEKLARONI a, b NË PARALAKTUAR 5; DECLARE rr VARCHAR(50); DEKLAROJ sot TIMESTAMP DEFAULT CURRENT_DATE; DEKLAROJ v1, v2, v3 TINYINT;

Puna me variablat

Pasi të keni deklaruar një ndryshore, mund të vendosni vlerën e saj duke përdorur komandat SET ose SELECT:

DELIMITER // KRIJO PROCEDURE `var_proc` (NE paramstr VARCHAR(20)) FILLO DEKLAROJE a, b INT DEFAULT 5; DECLARE rr VARCHAR(50); DEKLAROJ sot TIMESTAMP DEFAULT CURRENT_DATE; DEKLAROJ v1, v2, v3 TINYINT; VLERA NË TABELËN 1 (a); SET str = "Unë jam një varg"; SELECT CONCAT(str,paramstr), sot NGA tabela2 WHERE b >=5; FUND //

Hapi 5: Strukturat e kontrollit të fijeve

MySQL mbështet konstruktet IF, CASE, ITERATE, LEAVE LOOP, WHILE dhe REPEAT për të kontrolluar thread-et brenda një procedure të ruajtur. Ne do të shohim se si të përdorim IF, CASE dhe WHILE pasi ato janë më të përdorurat.

IF dizajni

Duke përdorur konstruktin IF, ne mund të kryejmë detyra që përmbajnë kushte:

DELIMITER // CREATE PROCEDURE `proc_IF` (IN param1 INT) BIGIN DECLARE variable1 INT; Ndryshorja SET1 = param1 + 1; NËSE ndryshorja1 = 0 THËNË ZGJEDH variablin1; ENDIF; NËSE param1 = 0 THËNË ZGJEDH "Vlera e parametrit = 0"; ELSE SELECT "Vlera e parametrit<>0"; FUND NËSE; FUND //

Dizajn CASE

CASE është një metodë tjetër e testimit të kushteve dhe zgjedhjes së një zgjidhjeje të përshtatshme. Kjo është një mënyrë e shkëlqyer për të zëvendësuar shumë konstruksione IF. Konstrukti mund të përshkruhet në dy mënyra, duke siguruar fleksibilitet në menaxhimin e shprehjeve të shumta të kushtëzuara.

KUFIZUES // CREATE PROCEDURE `proc_CASE` (IN param1 INT) FILLO DEKLARO variabli1 INT; Ndryshorja SET1 = param1 + 1; Ndryshorja CASE1 WHEN 0 THE INSERT NE tabelen1 VLERAT (param1); WWEN 1 THEND INSERT NË TABELËN 1 VLERAT (ndryshore 1); TË TJETËR INSERT NË tabelën1 VLERAT (99); RASTI FUNDIT; FUND //

KUFIZUES // CREATE PROCEDURE `proc_CASE` (IN param1 INT) FILLO DEKLARO variabli1 INT; Ndryshorja SET1 = param1 + 1; RASTI KUR variabli 1 = 0 PASTAJ INSERT NE tabelen1 VLERAT (param1); KUR variabli 1 = 1 ATHE SHTU INSERT NE tabelen1 VLERAT (variabli 1); TË TJETËR INSERT NË tabelën1 VLERAT (99); RASTI FUNDIT; FUND //

NDERSA dizajn

Teknikisht, ekzistojnë tre lloje sythe: cikli WHILE, cikli LOOP dhe cikli REPEAT. Ju gjithashtu mund të qarkulloni duke përdorur teknikën e programimit Darth Vader: deklaratat GOTO. Këtu është një lak shembull:

DELIMITER // CREATE PROCEDURE `proc_WHILE` (NE param1 INT) BEGIN DECLARE variable1, variable2 INT; Ndryshorja SET1 = 0; WHILE variabli1< param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //

Hapi 6: Kursorët

Kursorët përdoren për të përshkuar grupin e rreshtave të kthyer nga një pyetje dhe për të përpunuar çdo rresht.

MySQL mbështet kursorët në procedurat e ruajtura. Këtu është një sintaksë e shkurtër për krijimin dhe përdorimin e një kursori.

DEKLAROJ emrin e kursorit KURSORIN PËR ZGJEDHJE ...; /*Deklarimi i kursorit dhe plotësimi i tij */ DEKLARONI VAZHDIM TRAJTUESI PER NUK FUND /*Çfarë duhet bërë kur nuk ka më regjistrime*/ HAPI emri i kursorit; /*Hap kursorin*/ FETCH emri i kursorit INTO variabli [, ndryshore]; /*Cakto një vlerë për një variabël të barabartë me vlerën aktuale të kolonës*/ CLOSE cursor-name; /*Mbyll kursorin*/

Në këtë shembull ne do të kryejmë disa operacione të thjeshta duke përdorur një kursor:

KUFIZUES // KRIJO PROCEDURË `proc_CURSOR` (OUT param1 INT) FILLO DEKLARONI a, b, c INT; DEKLARO KURSORIN kur1 PËR ZGJEDHJE col1 NGA tabela1; DEKLARONI VAZHDIM TRAJTUESI PËR SETIN NUK GJETUR b = 1; HAPUR cur1; SET b = 0; SET c = 0; NDËRSA b = 0 SHKALL kurre1 NE a; NËSE b = 0 ATEHERE SET C = c + a; ENDIF; PËRFUNDON NDERSA; MBYLL cur1; SET param1 = c; FUND //

Kursorët kanë tre veti që duhet t'i kuptoni për të shmangur marrjen e rezultateve të papritura:

  • Jo i ndjeshëm: kursori që hapet një herë nuk do të pasqyrojë ndryshimet në tabelë që ndodhin më vonë. Në realitet, MySQL nuk garanton që kursori do të përditësohet, prandaj mos u mbështetni në të.
  • Vetëm për lexim: Kursorët nuk mund të modifikohen.
  • Nuk ka kthim prapa: kursori mund të lëvizë vetëm në një drejtim - përpara, nuk do të mund të kaloni rreshta pa i zgjedhur ato.

konkluzioni

Në këtë tutorial, ju njoha me bazat e punës me procedurat e ruajtura dhe disa nga vetitë specifike që lidhen me të. Sigurisht, do t'ju duhet të thelloni njohuritë tuaja në fusha të tilla si siguria, shprehjet SQL dhe optimizimi përpara se të bëheni një mësues i vërtetë i procedurës MySQL.

Ju duhet të llogaritni përfitimet e përdorimit të procedurave të ruajtura në aplikacionin tuaj specifik dhe më pas të krijoni vetëm procedurat e nevojshme. Në përgjithësi, unë përdor procedura; Sipas mendimit tim, ato ia vlen të zbatohen në projekte për shkak të sigurisë së tyre, mirëmbajtjes së kodit dhe dizajnit të përgjithshëm. Gjithashtu, mbani në mend se procedurat MySQL janë ende një punë në progres. Prisni përmirësime në lidhje me funksionalitetin dhe përmirësimet. Ju lutem mos ngurroni të ndani mendimet tuaja.




Top