Kursor może być jawny lub niejawny, a dowolny typ może być użyty w pętli FOR. Są naprawdę dwa aspekty twojego pytania.
Po co używać jawnej pętli FOR kursora nad niejawną pętlą FOR kursora?
- Użyj jawnej pętli kursora FOR, gdy zapytanie zostanie ponownie użyte, w przeciwnym razie preferowany jest kursor domyślny.
Po co używać pętli z FETCH zamiast pętli FOR, która nie ma jawnego FETCH?
- Użyj FETCH wewnątrz pętli, gdy chcesz zbiorczo kolekcjonować lub gdy potrzebujesz dynamicznego SQL.
Oto kilka przydatnych informacji z dokumentacji.
Przykład niejawnego kursora dla pętli
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Przykład jawnego kursora dla pętli
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Domniemany Kursor
Kursor niejawny to kursor sesji, który jest konstruowany i zarządzany przez PL / SQL. PL / SQL otwiera niejawny kursor za każdym razem, gdy uruchamiasz instrukcję SELECT lub DML. Nie można kontrolować ukrytego kursora, ale można uzyskać informacje z jego atrybutów.
Ukryty kursor zamyka się po uruchomieniu powiązanej instrukcji; jednak jego wartości atrybutów pozostają dostępne do momentu uruchomienia innej instrukcji SELECT lub DML.
Ukryte atrybuty kursora to: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
Jawny kursor
Kursor jawny to kursor sesji, który tworzysz i którym zarządzasz. Musisz zadeklarować i zdefiniować wyraźny kursor, nadając mu nazwę i kojarząc go z zapytaniem (zwykle zapytanie zwraca wiele wierszy). Następnie możesz przetworzyć zestaw wyników zapytania na jeden z następujących sposobów:
Otwórz wyraźny kursor (za pomocą instrukcji OPEN), pobierz wiersze z zestawu wyników (za pomocą instrukcji FETCH) i zamknij wyraźny kursor (za pomocą instrukcji CLOSE).
Użyj jawnego kursora w instrukcji kursora FOR LOOP (patrz „Przetwarzanie zestawu wyników zapytania za pomocą kursora dla instrukcji LOOP”).
Nie można przypisać wartości do jawnego kursora, użyć jej w wyrażeniu ani użyć jako formalnego parametru podprogramu lub zmiennej hosta. Możesz to zrobić za pomocą zmiennej kursora (patrz „Zmienne kursora”).
W przeciwieństwie do niejawnego kursora, można odwoływać się do jawnego kursora lub zmiennej kursora według jego nazwy. Dlatego jawny kursor lub zmienna kursora nazywana jest kursorem nazwanym.
Instrukcje kursora dla pętli
Instrukcja kursora FOR LOOP pozwala uruchomić instrukcję SELECT, a następnie natychmiast przejść przez wiersze zestawu wyników. W tej instrukcji można użyć niejawnego lub jawnego kursora.
FOR
jest tylko innym sposobem korzystania z kursorów. Zobacz dokumentację: docs.oracle.com/cd/E11882_01/appdev.112/e10472/... W każdym razie, co robi htp.prn ()?