Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Tu je zrútenie toho, čo sú a prečo sa používajú:
Kľúčové koncepty:
* Výsledok: Zbierka riadkov vrátených dotazom SQL. Keď spustíte príkaz „Vyberte“, databázový server generuje set výsledkov.
* Spracovanie riadku: Kurzory vám umožňujú načítať a spracovať každý riadok nastaveného výsledku individuálne. Je to v rozpore so štandardnými operáciami SQL, ktoré zvyčajne pracujú na celom výsledku stanovenom naraz.
* ukazovateľ/iterátor: Kurzor v podstate pôsobí ako ukazovateľ alebo iterátor, ktorý sleduje prístup k aktuálnemu radu. Kurzor môžete posunúť vpred a získať prístup k nasledujúcim riadkom.
Prečo používať kurzory?
Kurzory sa všeobecne používajú, keď potrebujete vykonávať komplexné operácie v každom riadku výsledkovej sady, ktoré je ťažké alebo nemožné dosiahnuť pri štandardných príkazoch SQL. Bežné scenáre zahŕňajú:
* Podmienené aktualizácie/deletes: Možno budete musieť aktualizovať alebo odstrániť riadok na základe hodnôt nájdených v iných riadkoch rovnakej sady výsledkov alebo v iných tabuľkách.
* Výpočty založené na predchádzajúcich riadkoch: Možno budete musieť vypočítať bežný celkový, kĺzavý priemer alebo inú kumulatívnu hodnotu, ktorá závisí od hodnôt v predchádzajúcich riadkoch.
* Integrácia s externými systémami: Možno budete musieť načítať údaje z databázy a potom tieto údaje použiť na interakciu s externými aplikáciami alebo API, pričom každý riadok spracujte jednotlivo.
* Komplexná logika v uložených postupoch: Kurzory sa často používajú v rámci uložených postupov, keď potrebujete implementovať komplexnú obchodnú logiku, ktorá vyžaduje iterovanie prostredníctvom súboru výsledkov.
* Nahlásiť: Generovanie vlastných správ alebo vykonávanie zložitého formátovania údajov sa často spolieha na spracovanie riadku po riadku.
Ako fungujú kurzory (zjednodušené):
1. deklarujte kurzor: Najprv deklarujete kurzor, v ktorom zadáte príkaz „Select“, ktorý vygeneruje súbor výsledkov, s ktorým bude kurzor fungovať.
2. Otvorte kurzor: Otvorenie kurzora vykonáva príkaz „select` a vytvorí súpravu výsledkov. Kurzor je umiestnený pred prvým riadkom.
3. načítať riadky: Na získanie údajov z aktuálneho riadku a presunutie kurzoru do nasledujúceho riadku použijete príkaz „Fetch`.
4. spracujte údaje: Vo vnútri slučky spracujete údaje získané z každého riadku. To by mohlo zahŕňať aktualizáciu ďalších tabuliek, vykonávanie výpočtov alebo volanie externých postupov.
5. Zatvorte kurzor: Po spracovaní všetkých riadkov zatvoríte kurzor a uvoľníte zdroje, ktoré používa.
6. Nakoniec vyriešite kurzor.
Príklad (Konceptuálna - špecifická syntax sa líši podľa databázy):
`` sql
- Vyhláste kurzor
Deklarovať kurzor my_cursor
Vyberte zamestnanec_id, plat od zamestnancov, kde oddelenie_id =10;
- Otvorte kurzor
Otvorte my_cursor;
- Načítať prvý riadok
Načítať ďalej z my_cursora do @emp_id, @Salary;
- slučka prostredníctvom súpravy výsledkov
Zatiaľ čo @@ fetch_status =0 - Skontrolujte, či bol načítanie úspešný
Začať
- Spracujte údaje (príklad:Zvýšte plat, ak je pod prahom)
Ak @Salary <50000
Začať
Aktualizácia zamestnancov stanovila plat =plat * 1.10 kde zamestnanec_id =@emp_id; - zvýšiť plat o 10%
Koniec;
- Načítať ďalší riadok
Načítať ďalej z my_cursora do @emp_id, @Salary;
Koniec;
- Zatvorte kurzor
Close My_Cursor;
- Dealling kurzoru
DealLocate my_Cursor;
`` `
Dôležité úvahy a nevýhody:
* Vplyv na výkon: Kurzory môžu byť výrazne pomalšie ako operácie SQL založené na stanovení, najmä pri riešení veľkých súprav výsledkov. Spracovanie riadku po rade je vo svojej podstate menej účinné ako spracovanie údajov v dávkach. Vždy, keď je to možné, skúste dosiahnuť požadovaný výsledok pomocou štandardných dopytov SQL.
* zložitosť: Kurzory môžu váš kód zložitejšie a ťažšie udržiavať.
* Uzamknutie problémov: Kurzory môžu držať zámky na databázových zdrojoch dlhšie obdobia, čo potenciálne vedie k problémom s tvrdením a výkonom.
* Alternatívy: Predtým, ako sa uchýlite k kurzorom, preskúmajte alternatívy, ako napríklad:
* SET-založené operácie SQL: Rovnaký výsledok často môžete dosiahnuť pomocou šikovného dotazu SQL.
* uložené postupy s dočasnými tabuľkami: Vytvorte dočasnú tabuľku na zadržanie medziproduktovej sady výsledkov a potom vykonajte operácie na dočasnej tabuľke.
* Použitie aplikačného kódu (napr. Python, Java) na spracovanie údajov: Načítajte celý výsledok nastavený do vašej aplikácie a vykonajte tam spracovanie riadku po riadku. To môže byť niekedy efektívnejšie ako používanie kurzorov.
V súhrne sú kurzory výkonným, ale často menej efektívnym nástrojom na spracovanie riadku po riadku v databázach. Používajte ich iba v prípade potreby a starostlivo zvážte dôsledky výkonu. Snažte sa používať SQL Operations, kedykoľvek je to možné.