Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czym jest kursor w wyroczni?

Czym jest kursor w wyroczni

Oracle Używa obszaru roboczego o nazwie Obszary prywatnego SQL do wykonywania instrukcji SQL i przechowywania informacji. Oracle Cursor to konstrukcja PL/SQL, która pozwala nazwać te obszary robocze i uzyskać dostęp do przechowywanych w nich informacji

Rodzaje kursora w Oracle

  • Niejawny kursor w Oracle
  • Wyraźny kursor w Oracle

Wyraźne kursory

Wyraźne kursory mają następujące etapy

1) Zadeklaruj:Deklarujemy nazwę kursora i definiujemy strukturę zapytania

2) Open:  instrukcja open wykonuje zapytanie i wiąże każdą zmienną, do której się odwołuje. Wiersze identyfikowane przez zapytanie nazywane są zestawami aktywnymi. A teraz można to pobrać

Co to jest zestaw aktywny: Zbiór wierszy zwrócony przez wielowierszowe zapytanie

Jego rozmiar to liczba wierszy, które spełniają Twoje kryteria wyszukiwania

3) Pobieranie:na tym etapie wiersze są pobierane z kursora, a po każdym pobraniu testujesz kursor pod kątem pozostałych wierszy, jeśli nie ma wierszy, kontynuujesz zamykanie kursora

4) Zamknij:Instrukcja close zwalnia aktywny zestaw wierszy i możemy ponownie otworzyć kursor, aby pobrać aktywny zestaw odświeżenia

Szczegóły etapów

Deklarowanie kursora

  • Nazwa kursora
  • Struktura zapytania
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;

Otwieranie kursora

Tutaj odbywa się parsowanie i wykonywanie zapytań. Po otwarciu kursora wiersze zwrócone przez zapytanie są dostępne do pobrania.

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;
 /

Kursor będzie teraz wskazywał pierwszy wiersz w aktywnym zestawie.

Pobieranie wierszy

Po otwarciu kursora bieżący wiersz jest ładowany do zmiennych. Bieżący wiersz to wiersz, na który aktualnie wskazuje kursor Pobieranie danych do zmiennej PL/SQL lub hosta

Zmienna jest wykonywana za pomocą instrukcji FETCH

Syntax: 
 FETCH  INTO ;
  • Dla każdej wartości kolumny zwróconej przez zapytanie powiązane z kursorem musi istnieć

odpowiednia zmienna na liście INTO.

  • RÓWNIEŻ ich typy danych muszą być kompatybilne

ZAMYKANIE KURSORA

Wyraźnie zamyka kursor, umożliwiając jego ponowne otwarcie, jeśli jest to wymagane.

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;
 /

Wyraźne atrybuty kursora

Atrybut Typ Opis
%ISOPEN Boole'a Ocenia TRUE, jeśli kursor jest otwarty
%NOTFOUND Boole'a Zwraca wartość TRUE, jeśli ostatnie pobranie nie zwraca wiersza
%FOUND Boole'a Zwraca wartość TRUE, jeśli ostatnie pobranie zwraca wiersz
%ROWCOUNT NUMBER Ocenia całkowitą liczbę wierszy zwróconych do tej pory

Zaawansowana koncepcja z kursorem Oracle

Kursor i zapisy Oracle

1)Przeczytaliśmy już o rekordach PLSQL.

2) Możemy przetwarzać wiersze aktywnego zestawu, pobierając również wartości do rekordu PL/SQL

3) Możemy również zdefiniować rekord plsql na podstawie wybranej listy kolumn w wyraźnych kursorach

Przykład

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;
 /

Kursor z parametrami/sparametryzowanym kursorem w Oracle

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

1)Przekaż wartości parametrów do kursora, gdy kursor jest otwarty i zapytanie jest wykonywane

2) Otwórz kilka razy wyraźny kursor z różnymi aktywnymi zestawami za każdym razem

Open cursor_name(parameter_value , ……);

Przykład

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;
 /

 Powiązane artykuły

Jak pracować z datami w Oracle sql
Oracle PLSQL Tables
Wszystko o rekordach Oracle PLSQL
Najczęściej zadawane 25 pytań podczas wywiadów dotyczących Oracle PLSQL
Oracle PLSQL Block Structure i Oracle PLSQL Variable
Atrybuty kursora


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela przestawna z wartościami niekardynalnymi

  2. Oracle SQL Developer 21.4.2 i SQLcl 21.4.1 są już dostępne

  3. Przykład demonstrujący podatność na wstrzykiwanie SQL i zapobieganie jej w Oracle

  4. Jak usunąć wiele partycji interwałowych na podstawie daty?

  5. Jakich kryteriów zamówienia używa LITAGG z ORDER BY NULL?