Úvod do kurzora v SQL

Kurzory sú dočasné pracovné priestory vytvorené v pamäti na spracovanie niektorých príkazov SQL na zväzku údajov. Príliš komplikovaná definícia? Pochopme to. Premýšľajte o kurzoroch pre každú slučku v SQL. Ak chcete vykonať úlohu na množine riadkov údajov, použijete kurzor. Povedzme, že máte zamestnanecký stôl, ktorý drží plat pre každého zamestnanca organizácie. Chcete zvýšiť plat každého zamestnanca o určité percento. Tu by ste použili kurzor. „Ako“ je ilustrované ďalej v tomto článku.

Kurzory teda vytvárajú dočasný pracovný priestor s vybranou sadou riadkov a ukazovateľom, ktorý ukazuje na aktuálny riadok. Táto sada riadkov, na ktorých kurzor vykoná požadovanú operáciu, sa nazýva aktívna množina údajov. Ukazovateľ načíta riadky z množiny výsledkov jeden po druhom. Potom môžete vykonať ľubovoľnú operáciu SQL naraz.

Implicitné kurzory

Implicitné kurzory, ako názov napovedá, sú generované analyzátorom SQL pre dotazy DML. Dotazy DML sú dotazy na spracovanie údajov. Tieto dotazy manipulujú alebo menia údaje. Nezasahujú do štruktúry alebo schémy databázy. Dotazy ako SELECT, INSERT, UPDATE a DELETE generujú implicitný kurzor. Implicitné kurzory sú pre koncového používateľa skryté.

Explicitné kurzory

Explicitné kurzory sú kurzormi generované používateľmi. Keď užívateľ prikáže analyzátoru SQL, aby vytvoril kurzor pre aktívnu množinu, takto vytvorený kurzor sa nazýva explicitný kurzor. Aktívna množina je definovaná používateľom prostredníctvom dotazu SELECT. V tomto článku by sme podrobne venovali výslovné kurzory.

Akcie kurzora - životný cyklus kurzora

Životný cyklus kurzora zvyčajne zahŕňa päť fáz:

1. Vyhlásiť: Prvým krokom je vyhlásenie kurzora. Tento krok dá systému pokyn na vygenerovanie kurzora s danou množinou údajov. Dátová sada sa zostavuje pomocou príkazu SQL. V tejto fáze sa vytvorí aktívna množina, ale dočasný pracovný priestor kurzora ešte nie je v pamäti otvorený.

2. Open: Ďalej je systém vyzvaný na otvorenie kurzora. V tejto fáze sa dočasný pracovný priestor načíta do pamäte pomocou aktívnej sady a vygeneruje sa ukazovateľ, ktorý ukazuje na prvý riadok aktívnej sady.

3. Načítať: Toto je opakujúci sa krok v celom procese. Aktuálny riadok, na ktorý ukazuje ukazovateľ, sa načíta a na údajoch z riadku sa vykoná požadovaná úloha. Ukazovateľ sa presunie na ďalší riadok kurzora.

4. Zatvoriť: Po dokončení manipulácie s údajmi musí byť kurzor zatvorený.

5. Deallocate: Toto je posledný krok na vymazanie kurzora a uvoľnenie pamäte, procesora a ďalších systémových prostriedkov pridelených kurzoru.

Explicitné kurzory - v akcii!

Dobre, takže teraz máme základné znalosti o tom, čo sú kurzory a ako fungujú. Je čas, aby sme si ušpinili ruky a sami si vytvorili výslovný kurzor.

Terminológia kurzorov v SQL

Poďme pochopiť terminológie použité v tejto syntaxi.

Rozsah kurzora

  • Rozsah kurzora môže byť buď GLOBAL alebo LOCAL . Počas pripojenia je k dispozícii globálny kurzor. Miestny kurzor je rozsahom obmedzený iba na uložené procedúry, funkcie alebo dotaz, ktorý drží kurzor.
  • Toto je funkcia špecifická pre MS SQL Server. MySQL podporuje iba lokálne kurzory.

Pohyb kurzora

  • MS SQL Server tiež dáva možnosť nastaviť pohyb kurzora. Môže to byť buď konvenčný režim Forward_Only, ktorý posúva ukazovateľ z prvého riadku na posledný riadok po riadku. Alebo sa dá posúvať na prvý, posledný, predchádzajúci alebo nasledujúci riadok.
  • Kurzory v MySQL nie sú posúvateľné.

Typ kurzora

  • Kurzor môže byť statický, pretože môže ukladať do vyrovnávacej pamäte aktívnu množinu až do deallokácie a prostredníctvom tejto vyrovnávacej aktívnej sady môže prepínať dopredu a dozadu. Kurzor môže byť rýchly vpred iba v statickom režime.
  • Môže byť tiež dynamický, aby umožnil pridávanie alebo mazanie riadkov v aktívnej množine, keď je kurzor otvorený. Tieto zmeny nie sú viditeľné pre ostatných používateľov kurzora v režime súpravy klávesov. Kurzory v MySQL sú iba rýchle.

Uzamknutie kurzora

  • Kurzorové zámky sú užitočné v prostredí viacerých používateľov. Uzamknú riadok tak, aby dvaja používatelia nepracovali na rovnakých údajoch súčasne. To zaisťuje integritu údajov.
  • Zámok iba na čítanie uvádza, že riadok nie je možné aktualizovať.
  • Posuvné zámky uzamknú riadok, keď sú vyvolané kurzorom, čo zaisťuje, že úloha je úspešná a aktualizované údaje sú dostupné mimo kurzora. Optimistické pokusy aktualizovať riadok bez zámku. Ak bol teda riadok aktualizovaný mimo kurzora, úloha nebude úspešná.
  • MySQL podporuje iba zámky iba na čítanie. To znamená, že MySQL neaktualizuje skutočnú tabuľku, skôr by skopírovala údaje na vykonanie aktualizačných príkazov.

Preto vidíme, že tieto možnosti sú dostupné iba v MS SQL Server. Toto robí syntax pre kurzory MySQL ešte jednoduchšou.

príklad

Aktualizujme teraz plat zamestnancov v tabuľke Zamestnanci.

Tieto príklady by sme použili v týchto kurzoroch v príklade SQL.

Náš kód kurzora by bol nasledujúci:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

Výstupom po vykonaní vyššie uvedeného príkazu kurzora bude:

Záver - Kurzory v SQL

Videli sme teda, čo sú kurzory, ako ich používať a kde im zabrániť. Kurzory sa ukázali ako užitočný nástroj pre vývojárov, ale na úkor výkonu. Preto buďte opatrní, keď sa rozhodnete pre kurzory.

Odporúčané články

Toto je sprievodca kurzory v SQL. Tu uvádzame príklady, životný cyklus a terminológiu kurzora v SQL s príkladmi. Môžete si tiež prečítať naše ďalšie navrhované články -

  1. Typy pripojení v SQL
  2. Príkaz SQL Alter
  3. Zobrazenia SQL
  4. SQL Management Tools
  5. Typy kurzorov v PL / SQL
  6. Top 6 typov spojení v MySQL s príkladmi