Explicitní kurzor vs implicitní kurzor
Pokud jde o databáze, kurzor je řídicí struktura, která umožňuje procházet záznamy v databázi. Kurzor poskytuje mechanismus pro přiřazení názvu příkazu SQL select a poté jej lze použít k manipulaci s informacemi v tomto příkazu SQL. Implicitní kurzory jsou automaticky vytvářeny a používány pokaždé, když je v PL/SQL vydán příkaz Select, pokud neexistuje žádný explicitně definovaný kurzor. Explicitní kurzory, jak název napovídá, jsou explicitně definovány vývojářem. V PL/SQL je explicitní kurzor ve skutečnosti pojmenovaný dotaz definovaný pomocí kurzoru klíčového slova.
Co je implicitní kurzor?
Implicitní kurzory jsou automaticky vytvářeny a používány společností Oracle pokaždé, když je vydán příkaz select. Pokud je použit implicitní kurzor, systém správy databáze (DBMS) provede operace otevření, načtení a zavření automaticky. Implicitní kurzory by se měly používat pouze s příkazy SQL, které vracejí jeden řádek. Pokud příkaz SQL vrátí více než jeden řádek, použití implicitního kurzoru způsobí chybu. Implicitní kurzor je automaticky spojen s každým příkazem jazyka DML (Data Manipulation Language), konkrétně příkazy INSERT, UPDATE a DELETE. Ke zpracování příkazů SELECT INTO se také používá implicitní kurzor. Při načítání dat pomocí implicitních kurzorů může být vyvolána výjimka NO_DATA_FOUND, když příkaz SQL nevrátí žádná data. Kromě toho mohou implicitní kurzory vyvolat výjimky TOO_MANY_ROWS, když příkaz SQL vrátí více než jeden řádek.
Co je to Explicitní kurzor?
Jak bylo zmíněno dříve, explicitní kurzory jsou dotazy definované pomocí názvu. Explicitní kurzor si lze představit jako ukazatel na sadu záznamů a ukazatel lze v sadě záznamů posunout dopředu. Explicitní kurzory poskytují uživateli úplnou kontrolu nad otevíráním, zavíráním a načítáním dat. Více řádků lze také načíst pomocí explicitního kurzoru. Explicitní kurzory mohou také přebírat parametry stejně jako jakákoli funkce nebo procedura, takže proměnné v kurzoru lze měnit při každém jeho spuštění. Explicitní kurzory navíc umožňují načíst celý řádek do proměnné záznamu PL/SQL. Při použití explicitního kurzoru je nejprve nutné jej deklarovat pomocí názvu. K atributům kurzoru lze přistupovat pomocí názvu daného kurzoru. Po deklaraci je třeba nejprve otevřít kurzor. Poté lze spustit načítání. Pokud je třeba načíst více řádků, je třeba operaci načítání provést uvnitř smyčky. Nakonec je třeba zavřít kurzor.
Rozdíl mezi explicitním kurzorem a implicitním kurzorem
Hlavní rozdíl mezi implicitním kurzorem a explicitním kurzorem je v tom, že explicitní kurzor musí být definován explicitně zadáním názvu, zatímco implicitní kurzory jsou automaticky vytvořeny, když zadáte příkaz select. Kromě toho lze pomocí explicitních kurzorů načíst více řádků, zatímco implicitní kurzory lze načíst pouze jeden řádek. Také výjimky NO_DATA_FOUND a TOO_MANY_ROWS nejsou aktivovány při použití explicitních kurzorů, na rozdíl od implicitních kurzorů. Implicitní kurzory jsou v podstatě zranitelnější vůči chybám dat a poskytují méně programové kontroly než explicitní kurzory. Také implicitní kurzory jsou považovány za méně účinné než explicitní kurzory.