sql >> Databáze >  >> RDS >> Oracle

Co je kurzor v oracle

Co je kurzor v oracle

Oracle K provádění příkazů SQL a ukládání informací používá pracovní oblast nazvanou Private SQL areas. Oracle Cursor je konstrukce PL/SQL, která vám umožňuje pojmenovat tyto pracovní oblasti a přistupovat k jejich uloženým informacím

Typy kurzoru v Oracle

  • Implicitní kurzor v Oracle
  • Explicitní kurzor v Oracle

Explicitní kurzory

Explicitní kurzory mají následující fáze

1) Declare:Deklarujeme jméno kurzoru a definujeme strukturu dotazu

2) Open:  Příkaz open spustí dotaz a sváže jakoukoli proměnnou, na kterou se odkazuje. Řádky identifikované dotazem se nazývají aktivní sady. A nyní je k dispozici pro načtení

Co je aktivní sada: Sada řádků vrácených víceřádkovým dotazem

Jeho velikost je počet řádků, které splňují kritéria vyhledávání

3) Načtení:V této fázi jsou řádky načteny z kurzoru a po každém načtení otestujete kurzor na všechny zbývající řádky, pokud žádné řádky, přistoupíte k uzavření kurzoru

4) Close:Příkaz close uvolní aktivní sadu řádků a můžeme znovu otevřít kurzor pro načtení refresh aktivní sady

Podrobnosti

Vyhlášení kurzoru

  • Název kurzoru
  • Struktura dotazu
Syntax:
 CURSOR  IS   :  It includes most of the usual clauses, but INTO Clause is not allowed
Example:
 DECLARE
 CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’;
 ………………………………
 BEGIN
 ………………………………
 END;

Otevření kurzoru

Zde se provádí analýza a provádění dotazu. Po otevření kurzoru jsou řádky vrácené dotazem k dispozici pro načtení.

Syntax:
 Open <cursor name>
 This statement is used within the executable section of the block.
 It also establishes an active set of the rows
Example:
  OPEN cur1;
 DECLARE
 v_salary number;
 CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_salary;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE (v_salary);
 END LOOP;
 CLOSE cur1;
 END;
 /

Kurzor nyní bude ukazovat na první řádek v aktivní sadě.

Načítání řádků

Po otevření kurzoru se aktuální řádek načte do proměnných. Aktuální řádek je řádek, na který aktuálně ukazuje kurzor. Načítání dat do proměnné PL/SQL nebo hostitele

Proměnná se provádí pomocí příkazu FETCH

Syntax: 
 FETCH  INTO ;
  • Pro každou hodnotu sloupce vrácenou dotazem spojeným s kurzorem musí existovat

odpovídající proměnné v seznamu INTO.

  • TAKÉ jejich datové typy musí být kompatibilní

ZAVŘENÍ KURZORU

Explicitně zavře kurzor a v případě potřeby jej umožňuje znovu otevřít.

Syntax:
 CLOSE <cursor-name>;
Example: 
 CLOSE cur1
Example of Using CLOSE <Cursor Name>
 DECLARE
 v_address emp.address%TYPE;
 CURSOR cur1 is select address from emp;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_address;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE(v_address);
 END LOOP;
 CLOSE cur1;
 END;
 /

Explicitní atributy kurzoru

Atribut Typ Popis
%ISOPEN Booleovský Pokud je kurzor otevřený, vyhodnotí se jako TRUE
%NOTFOUND Booleovský Vyhodnocuje se jako TRUE, pokud poslední načtení nevrátí řádek
%FOUND Booleovský Vyhodnocuje se jako TRUE, pokud poslední načtení vrátí řádek
%ROWCOUNT NUMBER Vyhodnocuje se k celkovému počtu dosud vrácených řádků

Pokročilý koncept s kurzorem Oracle

Oracle Cursor and Records

1)O záznamech PLSQL jsme již četli.

2) Řádky aktivní sady můžeme zpracovat také načtením hodnot do PL/SQL záznamu

3) Můžeme také definovat záznam plsql na základě vybraného seznamu sloupců v explicitních kurzorech také

Příklad

DECLARE 
 CURSOR dept_cursor is Select deptno,dept_name  FROM   dept;
 dept_record dept_cursor%rowtype;
 BEGIN
 OPEN dept_cursor;
 LOOP
 FETCH dept_cursor INTO dept_record;
 Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name);
 EXIT WHEN dept_cursor%notfound;
 END LOOP;
 Commit;
 CLOSE dept_cursor;
 END;
 /

Kurzor s parametry/parametrizovaný kurzor v oracle

Syntax: 
 CURSOR cursor_name(parameter_name datatype,  )
 IS
 Select_statement;

1) Při otevření kurzoru a provedení dotazu předá hodnoty parametrů kurzoru

2) Otevřete explicitní kurzor několikrát s různými aktivními sadami pokaždé

Open cursor_name(parameter_value , ……);

Příklad

DECLARE 
 CURSOR cur1(v_deptno number) is
 Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno;
 Dept_record      cur1%rowtype;
 l_deptno  number:=111;
 BEGIN
 OPEN  cur1(112);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 OPEN cur1(l_deptno);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 END;
 /

 Související články

Jak pracovat s datem v Oracle sql
Tabulky Oracle PLSQL
Vše o záznamech Oracle PLSQL
Nejčastěji kladené 25 dotazů na rozhovory s Oracle plsql
Oracle PLSQL Block Structure a Oracle PLSQL proměnná
Atributy kurzoru


  1. Základy sys.dm_exec_requests

  2. Vývoj PostgreSQL pro Windows, část 3

  3. SELECT max(x) vrací hodnotu null; jak mohu dosáhnout toho, aby vrátil 0?

  4. Jak se mohu připojit k serveru SQL z počítače Mac s PHP PDO?