niedziela, 5 sierpnia 2012

Oracle Kursory

Kursor w kontekście bazy danych można porównać o pętli, która iteruje po wierszach zwróconych przez zapytanie.

W bazie posiadam tabelę która zawiera dane o klientach:


Deklaracja ogólna kursora:

CURSOR nazwa [(parametry)] [RETURNS] IS selekt;

Przykład dla naszego kursora:

DECLARE
CURSOR myCursor IS
SELECT Imie, Nazwisko FROM klienci;

Po stworzeniu kursora możemy z niego pobrać dane na dwa sposoby:
- Instrukcja Fetch:
set serveroutput on format wraped;
DECLARE
v_pobrany_klient Klienci%ROWTYPE;
CURSOR myCursor IS
SELECT * FROM klienci;
BEGIN
dbms_output.enable;
OPEN myCursor;
LOOP
FETCH myCursor INTO v_pobrany_klient;
dbms_output.put_line(v_pobrany_klient.Imie ||' '|| v_pobrany_klient.Nazwisko);
EXIT WHEN myCursor%NOTFOUND;
END LOOP;
CLOSE myCursor;
END;

- pętla FOR:
set serveroutput on format wraped;
DECLARE
CURSOR myCursor IS
SELECT Imie, Nazwisko FROM klienci;
BEGIN
dbms_output.enable;
FOR row IN myCursor LOOP
  dbms_output.put_line(row.Imie ||' '|| row.Nazwisko);
END LOOP;
END;

Pętla ma tę przewagę nad instrukcją FETCH, że nie trzeba jawnie otwierać i zamykać kursora - prostsze użycie.

Brak komentarzy:

Prześlij komentarz