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