Oracle PL / SQL Cursor: Implicit, Explicit, Cursor FOR Loop (przykład)

Spisie treści:

Anonim

Co to jest CURSOR w PL / SQL?

Kursor jest wskaźnikiem do tego obszaru kontekstu. Oracle tworzy obszar kontekstowy do przetwarzania instrukcji SQL, który zawiera wszystkie informacje o instrukcji.

PL / SQL pozwala programiście kontrolować obszar kontekstu za pomocą kursora. Kursor przechowuje wiersze zwrócone przez instrukcję SQL. Zestaw wierszy, które utrzymuje kursor, nazywany jest zestawem aktywnym. Te kursory można również nazwać, aby można było do nich odwoływać się z innego miejsca kodu.

W tym samouczku nauczysz się:

  • Niejawny kursor
  • Jawny kursor
  • Atrybuty kursora
  • Instrukcja kursora pętli FOR

Kursor jest dwojakiego rodzaju.

  • Niejawny kursor
  • Jawny kursor

Niejawny kursor

Za każdym razem, gdy w bazie danych wystąpią jakiekolwiek operacje DML, tworzony jest niejawny kursor przechowujący wiersze, których dotyczy ta konkretna operacja. Tych kursorów nie można nazwać, a zatem nie można ich kontrolować ani odwoływać z innego miejsca kodu. Możemy odnosić się tylko do ostatniego kursora poprzez atrybuty kursora.

Jawny kursor

Programiści mogą tworzyć nazwane obszary kontekstowe, aby wykonywać swoje operacje DML, aby uzyskać nad nim większą kontrolę. Kursor jawny należy zdefiniować w sekcji deklaracji bloku PL / SQL i jest on tworzony dla instrukcji „SELECT”, której należy użyć w kodzie.

Poniżej znajdują się czynności związane z pracą z jawnymi kursorami.

  • Deklarowanie kursora

    Zadeklarowanie kursora oznacza po prostu utworzenie jednego nazwanego obszaru kontekstu dla instrukcji „SELECT”, która jest zdefiniowana w części deklaracji. Nazwa tego obszaru kontekstu jest taka sama jak nazwa kursora.

  • Otwieranie kursora

    Otwarcie kursora poinstruuje PL / SQL, aby przydzielił pamięć dla tego kursora. Spowoduje to, że kursor będzie gotowy do pobrania rekordów.

  • Pobieranie danych z kursora

    W tym procesie wykonywana jest instrukcja „SELECT”, a pobrane wiersze są zapisywane w przydzielonej pamięci. Są one teraz nazywane zestawami aktywnymi. Pobieranie danych z kursora jest czynnością na poziomie rekordu, co oznacza, że ​​możemy uzyskać dostęp do danych w sposób rekord po rekordzie.

    Każda instrukcja pobierania pobierze jeden aktywny zestaw i przechowuje informacje o tym konkretnym rekordzie. Ta instrukcja jest taka sama jak instrukcja „SELECT”, która pobiera rekord i przypisuje do zmiennej w klauzuli „INTO”, ale nie zgłosi żadnych wyjątków.

  • Zamykanie kursora

    Po pobraniu całego rekordu musimy zamknąć kursor, aby zwolniona została pamięć przydzielona do tego obszaru kontekstu.

Składnia:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • W powyższej składni część deklaracji zawiera deklarację kursora.
  • Kursor jest tworzony dla instrukcji „SELECT” podanej w deklaracji kursora.
  • W części wykonawczej zadeklarowany kursor jest ustawiany w pętli FOR i zmienna pętli „I” będzie w tym przypadku zachowywać się jak zmienna kursora.

Przykład 1 : W tym przykładzie wyświetlimy wszystkie nazwiska pracowników z tabeli emp za pomocą pętli kursor-FOR.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Wynik

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Objaśnienie kodu:

  • Linia kodu 2 : Deklaracja kursora guru99_det dla instrukcji „SELECT emp_name FROM emp”.
  • Linia kodu 4 : Konstruowanie pętli „FOR” dla kursora za pomocą zmiennej pętli lv_emp_name.
  • Linia kodu 5: Drukowanie nazwiska pracownika w każdej iteracji pętli.
  • Linia kodu 8: wyjście z pętli

Uwaga: W pętli Cursor-FOR nie można używać atrybutów kursora, ponieważ otwieranie, pobieranie i zamykanie kursora odbywa się niejawnie w pętli FOR.