PL / SQL – Kurzory
V této kapitole probereme kurzory v PL / SQL. Oracle vytváří paměťovou oblast, známou jako kontextová oblast, pro zpracování příkazu SQL, která obsahuje všechny informace potřebné pro zpracování příkazu; například počet zpracovaných řádků atd.
Kurzor je ukazatel na tuto kontextovou oblast. PL / SQL ovládá kontextovou oblast pomocí kurzoru. Kurzor obsahuje řádky (jeden nebo více) vrácené příkazem SQL. Sada řádků, které kurzor obsahuje, se označuje jako aktivní sada.
Kurzor můžete pojmenovat tak, aby jej bylo možné v programu označit za účelem načtení a zpracování řádků vrácených příkazem SQL, jeden včas. Existují dva typy kurzoru –
- implicitní kurzory
- explicitní kurzory
implicitní kurzory
implicitní kurzory jsou automaticky vytvářeny společností Oracle při každém provedení příkazu SQL, pokud pro příkaz neexistuje žádný explicitní kurzor. Programátoři nemohou ovládat implicitní kurzory a informace v nich.
Kdykoli je vydán příkaz DML (INSERT, UPDATE a DELETE), je k tomuto příkazu přidružen implicitní kurzor. U operací INSERT obsahuje kurzor data, která je třeba vložit. U operací UPDATE a DELETE identifikuje kurzor řádky, které by byly ovlivněny.
V PL / SQL můžete na nejnovější implicitní kurzor odkazovat jako na kurzor SQL, který má vždy atributy jako% FOUND ,% ISOPEN,% NOTFOUND a% ROWCOUNT. Kurzor SQL má další atributy,% BULK_ROWCOUNT a% BULK_EXCEPTIONS, určené pro použití s příkazem FORALL. Následující tabulka obsahuje popis nejpoužívanějších atributů –
S.No | Atribut & Popis |
---|---|
1 |
% FOUND Vrací TRUE, pokud příkaz INSERT, UPDATE nebo DELETE ovlivnil jeden nebo více řádků nebo příkaz SELECT INTO vrátil jeden nebo více řádků. V opačném případě vrátí FALSE. |
2 |
% NOTFOUND Logický opak% FOUND. Vrátí hodnotu TRUE, pokud příkaz INSERT, UPDATE nebo DELETE neovlivní žádné řádky nebo příkaz SELECT INTO nevrátí žádné řádky. V opačném případě vrátí FALSE. |
3 |
% ISOPEN Vždy vrátí FALSE pro implicitní kurzory, protože Oracle po provedení přidruženého příkazu SQL automaticky zavře kurzor SQL. |
4 |
% ROWCOUNT Vrátí počet řádků ovlivněných příkazem INSERT, UPDATE nebo DELETE nebo vrácených příkazem SELECT INTO. |
Ke kterémukoli atributu kurzoru SQL bude přistupováno jako sql% attribute_name, jak je uvedeno níže v příkladu.
Příklad
Budeme používat tabulku ZÁKAZNÍKŮ, kterou jsme vytvořili a použili v předchozích kapitolách.
Následující program aktualizuje tabulku a zvýší plat každého zákazníka o 500 a použije% SQL Atribut ROWCOUNT k určení počtu ovlivněných řádků –
Když je výše uvedený kód spuštěn na příkazovém řádku SQL, vytvoří následující výsledek –
6 customers selected PL/SQL procedure successfully completed.
Pokud zkontrolujete záznamy v tabulce zákazníků, zjistíte, že řádky byly aktualizovány –
Explicit Cursors
Explicit cursors are programmer-defined cursors for geting more control over kontextová oblast. V sekci deklarace bloku PL / SQL by měl být definován explicitní kurzor. Je vytvořen na příkazu SELECT, který vrací více než jeden řádek.
Syntaxe pro vytvoření explicitního kurzoru je –
CURSOR cursor_name IS select_statement;
Práce s explicitním kurzorem zahrnuje následující kroky –
- Deklarace kurzoru pro inicializaci paměti
- Otevření kurzoru pro alokaci paměti
- Načtení kurzoru pro načtení dat
- Zavření kurzoru pro uvolnění přidělené paměti
Deklarování kurzoru
Deklarace kurzoru definuje kurzor se jménem a přidružený příkaz SELECT. Například –
CURSOR c_customers IS SELECT id, name, address FROM customers;
Otevření kurzoru
Otevření kurzoru přidělí paměť kurzoru a připraví jej na načtení vrácených řádků příkazem SQL. Například výše definovaný kurzor otevřete následovně –
OPEN c_customers;
Načtení kurzoru
Načtení kurzoru zahrnuje přístup k jednomu řádku na Doba. Například načteme řádky z výše otevřeného kurzoru následujícím způsobem –
FETCH c_customers INTO c_id, c_name, c_addr;
Zavření kurzoru
Zavření kurzoru znamená uvolnění přidělená paměť.Například výše otevřený kurzor zavřeme následovně –
CLOSE c_customers;
Příklad
Následuje ukázkový příklad pro ilustraci konceptů explicitních kurzorů & minua;
Když je výše uvedený kód spuštěn na příkazovém řádku SQL, vytvoří následující výsledek –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.