Kursoret ne MySql

Problemi : Perpunimi i te dhenave te vijne nga shume tabela te ndryshme.

Ne rastin kur duam qe keto te dhena ti perpunojme rresht per rresht, ose duam te veprojme vetem mbi nje apo disa rreshta specifike, mund te na vije ne ndihme nje query e tejzgjatur  ose nje loop (p.sh.  while) me nje forme specifike inkrementimi. Performanca e ulet.

Zgjidhja: Kursoret

Cfare jane kursoret

Kursoret jane nje strukture kontrolli qe mundesojne shetitjen neper elementet e bazes se te dhenave.  Kursoret perdoren nga programuesit e bazave te te dhenave per te perpunuar te dhenat qe vijne si rezultat i query-ve, qe dergojme  ne bazen e te dhenave. Njesoj sikur ti perpunoje te dhenat me ane te nje loop-i. Kursoret mund te perdoren brenda stored procedures, stored functions.

Karakteristikat e kursoreve jane:

Jo te ndjeshem (asensitive): Nuk mund te krijojne kopje te tabeles.

Vetem te lexueshem (read only): Kursori nuk mund te behet update.

Jo e shkallezueshme (non scalable): Kursori shetit vetem ne nje drejtim dhe nuk mund te kaperceje ndonje rresht.

Perdorimi i tyre (sintaksa dhe shembull)

Me poshte jepet shembulli i procedures se usp_GetStudenti, versioni me kursore.

Per te testuar shembullin duhet krijuar paraprakisht edhe tabela liste_emrash.

CREATE TABLE liste_emrash (emri VARCHAR(20), mbiemri VARCHAR(20))

Ne shembull jepen 5 elementet qe perbejne kursorin.

 

 

Ne shembullin me siper eshte perzgjedhur CONTINUE HANDLER i cili percakton sjelljen ne rastin kur mberrijme ne fund te te dhenave te query-t. Ne nje rast te tille, dilet nga loop-i dhe ekzekutimi vazhdon me tej.

Handler te tjere jane:

EXIT HANDLER i cili kur plotesohet kushti ben nderprejen e ekzekutimit te bllokut

BEGIN

————–

END

UNDO HANDELR nuk suportohet ende.

Ekzekutojme proceduren:

CALL universiteti.ups_GetStudentetEmri

Rezultati i ekzekutimit te procedures eshte tabela universiteti.liste-emrash

 

 

Avantazhe

Kursoret, kane perdorim kryesor kur duam te kapim nje rresht te caktuar ose disa rreshte nje nga nje.

Jane efikase pasi me kursoret mund te kryesh veprime pa pasur nevojen e querive komplekse me shume INNER JOIN.

Disavantazhe

Kursori eshte me i shpejte se loop-i while por krijon me teper overhead ne bazen e te dhenave.

Kursori i kap rreshtat nga baza e te dhenave nje e nga nje, ndaj nese kemi shume te dhena edhe koha e ekzekutimit do te me e madhe.

Leave a Reply

Your email address will not be published. Required fields are marked *