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.
niedziela, 5 sierpnia 2012
Subskrybuj:
Komentarze do posta (Atom)
Brak komentarzy:
Prześlij komentarz