sql >> Databáze >  >> RDS >> Database

Co je to kurzor v SQL a jak jej implementovat?

Kurzory v SQL tvoří nedílnou součást každé databáze, která v podstatě pomáhá uživateli procházet databází bez větších potíží. Prostřednictvím tohoto článku o kurzoru v SQL vám poskytnu všechny potřebné podrobnosti, které musíte potřebovat, než si s ním namočíte nohy.

Níže jsou témata, o kterých budu v tomto článku diskutovat:

  • Co je kurzor v SQL?
  • Typy SQL kurzorů
  • Syntaxe kurzoru SQL
  • Životní cyklus kurzoru

Co je kurzor v SQL?

Kurzor v SQL je objekt, který umožňuje procházení řádků libovolné sady výsledků. Díky tomu můžete zpracovat jednotlivý řádek databáze, který je vrácen dotazem. Je to dočasná pracovní oblast nebo kontextová oblast, která se vytváří v paměťovém systému během provádění příkazu SQL, který ukládá načtená data z databáze a pomáhá s nimi manipulovat. Můžete to považovat za uspořádání řádků spolu s ukazatelem ukazujícím na aktuální řádek. Kurzor je databázový objekt, který může obsahovat více než jeden řádek, ale může zpracovat pouze jeden řádek v daném okamžiku. Sada řádků, které drží kurzor, je známá jako aktivní soubor. Můžete tak ovládat záznam tabulky v technice singleton, tj. jeden řádek v libovolném okamžiku.

Nyní, když jste obeznámeni s tím, co je kurzor v SQL, pojďme nyní kupředu a podívejme se na jeho různé typy.

Typy SQL kurzoru

SQL poskytuje dva typy kurzorů, které jsem uvedl níže:

  1. Implicitní kurzor

Když jsou v databázi zpracovávány operace DML, jako je INSERT, UPDATE a DELETE, jsou automaticky generovány implicitní kurzory, které framework používá. Tyto typy kurzorů se používají pro interní zpracování a nelze je ovládat nebo odkazovat z jiné kódové oblasti. Implicitní kurzory v SQL pouze podrží ovlivněné řádky operací a mohou odkazovat pouze na nejnovější kurzor pomocí atributů kurzoru, které jsou uvedeny níže v tabulce.

Atribut Popis
%FOUND Vrátí hodnotu TRUE v případě, že příkaz INSERT, UPDATE nebo DELETE ovlivní jeden nebo více řádků nebo příkaz SELECT INTO vrátí jeden nebo více řádků. V ostatních případech vrátí hodnotu FALSE.
%NOTFOUND Je to technicky opak atributu %FOUND. Vrací hodnotu TRUE v případě, že příkaz INSERT, UPDATE nebo DELETE neovlivní žádné řádky nebo příkaz SELECT INTO nevrátí žádné řádky. Jinak vrátí pouze FALSE.
%ISOPEN Tento atribut vždy vrátí hodnotu FALSE pro implicitní kurzory, protože kurzor SQL se automaticky zavře ihned po provedení příslušného příkazu SQL.
%ROWCOUNT Vrátí celkový počet ovlivněných řádků příkazem INSERT, UPDATE nebo DELETE nebo řádků vrácených příkazem SELECT INTO.
  1. Explicitní kurzor

Tento typ kurzoru se generuje vždy, když uživatel zpracovává data prostřednictvím bloku SQL. Obecně platí, že použití dotazu SELECT spouští vytvoření explicitního kurzoru a může obsahovat více než jeden řádek, ale zpracovávat pouze jeden po druhém. Tento typ kurzoru se používá k udržení záznamů přítomných ve sloupci. To umožňuje programátorům vytvořit pojmenovanou kontextovou oblast pro provádění jejich operací DML pro lepší kontrolu. Také musí být definován v bloku SQL a následně je vytvořen pro SELECT dotaz pomocí tohoto kódu.

Abychom lépe porozuměli kurzoru, podívejme se nyní, jaká je syntaxe kurzoru v SQL.

Syntaxe kurzoru SQL

Níže je obecná syntaxe pro vytvoření explicitního kurzoru.

CURSOR cursorName IS selectStatement;

Zde:

cursorName – Představuje platný název kurzoru

selectStatement – ​​představuje výběrový dotaz, který vrátí více řádků

Pojďme nyní pokračovat dále v tomto článku a podívejme se na životní cyklus kurzoru SQL.

Životní cyklus kurzoru

Existuje v zásadě 5 fází životního cyklu kurzoru v SQL, které jsem uvedl níže:

  1. Prohlásit
DECLARE cursorName CURSOR
FOR selectStatement;

Tento krok vám pomůže určit název a datový typ kurzoru a příkaz SELECT bude definovat jeho sadu výsledků.

  1. Otevřít
OPEN cursorName;

Tento krok vám umožní otevřít a naplnit kurzor jeho provedením.

  1. Načíst
FETCH NEXT FROM cursor INTO variableList;

Tento krok načte řádek z kurzoru a uloží jej do jedné nebo více proměnných.

[Volitelné] CheckStatus

WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM cursorName;
END;

Tato funkce vrací stav posledního příkazu FETCH, který byl proveden proti kurzoru. V případě, že tato funkce vrátí 0, znamená to, že operace FETCH byla úspěšná. K načtení všech řádků z kurzoru se používá klauzule WHILE.

  1. Zavřít
CLOSE cursorName;

Tento krok vám pomůže zavřít kurzor po dokončení operací.

  1. Přidělit
DEALLOCATE cursor_name;

Tento krok pomůže uvolnit místo kurzoru a uvolnit místo v paměti.

Tímto bych rád uzavřel tento článek o kurzoru v SQL. Doufám, že vám tento článek pomohl zvýšit hodnotu vašich znalostí. Pro více informací o SQL nebo databázích se můžete podívat na náš komplexní seznam četby zde:Databáze Edureka .

Základy SQL pro začátečníky | Naučte se SQL | SQL kurz pro začátečníky | Edureka

Toto video Edureka o ‚Základech SQL pro začátečníky‘ vám pomůže pochopit základy SQL a také SQL dotazy, které jsou velmi oblíbené a zásadní.

Pokud si přejete absolvovat strukturované školení o MySQL, podívejte se na naše certifikační školení MySQL DBA který přichází s instruktorem vedeným živým školením a reálnými zkušenostmi z projektů. Toto školení vám pomůže porozumět MySQL do hloubky a pomůže vám dosáhnout zvládnutí tohoto předmětu.

Máte na nás otázku? Zmiňte to prosím v sekci komentářů „Kurzor v SQL “ a já se vám ozvu.


  1. Nebyl nalezen žádný vhodný ovladač pro jdbc:postgresql://192.168.1.8:5432/NexentaSearch

  2. Jak přidat zdroj dat PostgreSQL do WildFly 9.0?

  3. SQLSTATE[42000]:Chyba syntaxe nebo porušení přístupu:1064 Máte chybu v syntaxi SQL — PHP — PDO

  4. Nainstalujte MySQL na Ubuntu bez výzvy k zadání hesla