Kursor jawny kontra niejawny
Jeśli chodzi o bazy danych, kursor jest strukturą kontrolną, która umożliwia poruszanie się po rekordach w bazie danych. Kursor zapewnia mechanizm przypisywania nazwy do instrukcji SQL select, a następnie może być używany do manipulowania informacjami w tej instrukcji SQL. Niejawne kursory są automatycznie tworzone i używane za każdym razem, gdy w PL/SQL zostanie wydana instrukcja Select, gdy nie ma jawnie zdefiniowanego kursora. Jawne kursory, jak sama nazwa wskazuje, są wyraźnie zdefiniowane przez programistę. W PL/SQL jawny kursor jest w rzeczywistości nazwanym zapytaniem zdefiniowanym przy użyciu słowa kluczowego kursor.
Co to jest niejawny kursor?
Kursory niejawne są automatycznie tworzone i używane przez Oracle za każdym razem, gdy wydawana jest instrukcja SELECT. W przypadku użycia niejawnego kursora system zarządzania bazą danych (DBMS) automatycznie wykona operacje otwierania, pobierania i zamykania. Niejawnych kursorów należy używać tylko z instrukcjami SQL, które zwracają pojedynczy wiersz. Jeśli instrukcja SQL zwróci więcej niż jeden wiersz, użycie niejawnego kursora spowoduje błąd. Niejawny kursor jest automatycznie kojarzony z każdą instrukcją Data Manipulation Language (DML), a mianowicie INSERT, UPDATE i DELETE. Ponadto niejawny kursor jest używany do przetwarzania instrukcji SELECT INTO. Podczas pobierania danych za pomocą niejawnych kursorów wyjątek NO_DATA_FOUND może zostać zgłoszony, gdy instrukcja SQL nie zwraca żadnych danych. Co więcej, niejawne kursory mogą zgłaszać TOO_MANY_ROWS wyjątków, gdy instrukcja SQL zwraca więcej niż jeden wiersz.
Co to jest wyraźny kursor?
Jak wspomniano wcześniej, jawne kursory to zapytania zdefiniowane przy użyciu nazwy. Wyraźny kursor można traktować jako wskaźnik do zestawu rekordów, a wskaźnik można przesunąć do przodu w zestawie rekordów. Jawne kursory zapewniają użytkownikowi pełną kontrolę nad otwieraniem, zamykaniem i pobieraniem danych. Ponadto można pobrać wiele wierszy za pomocą wyraźnego kursora. Kursory jawne mogą również przyjmować parametry, tak jak każda funkcja lub procedura, dzięki czemu zmienne w kursorze mogą być zmieniane za każdym razem, gdy są wykonywane. Dodatkowo, jawne kursory pozwalają na pobranie całego wiersza do zmiennej rekordu PL/SQL. Używając jawnego kursora, najpierw należy go zadeklarować przy użyciu nazwy. Dostęp do atrybutów kursora można uzyskać za pomocą nazwy nadanej kursorowi. Po zadeklarowaniu należy najpierw otworzyć kursor. Następnie można rozpocząć pobieranie. Jeśli trzeba pobrać wiele wierszy, operację pobierania należy wykonać wewnątrz pętli. Na koniec kursor musi zostać zamknięty.
Różnica między jawnym a ukrytym kursorem
Główna różnica między niejawnym a jawnym kursorem polega na tym, że jawny kursor musi być zdefiniowany jawnie poprzez podanie nazwy, podczas gdy niejawne kursory są tworzone automatycznie po wydaniu instrukcji SELECT. Co więcej, wiele wierszy można pobrać za pomocą jawnych kursorów, podczas gdy niejawne kursory mogą pobrać tylko jeden wiersz. Również wyjątki NO_DATA_FOUND i TOO_MANY_ROWS nie są zgłaszane podczas używania jawnych kursorów, w przeciwieństwie do niejawnych kursorów. Zasadniczo niejawne kursory są bardziej podatne na błędy danych i zapewniają mniejszą kontrolę programową niż jawne kursory. Ponadto niejawne kursory są uważane za mniej wydajne niż jawne kursory.