Jak widzieliśmy we wstępie do metod zbierania danych PL/SQL, w Oracle Database istnieje 7 funkcji zbierania. Wśród tych siedmiu funkcji poznaliśmy już pierwszych pięć metod. Przed i Dalej to dwie ostatnie metody/funkcje gromadzenia danych PL/SQL, które wciąż pozostały do zbadania.
Dlatego w dzisiejszym blogu PL/SQL będziemy szczegółowo badać te dwie nietknięte metody gromadzenia danych.
Co to są funkcje wcześniejszej i następnej kolekcji?
Zawsze dobrze jest mieć pod ręką kilka funkcji, które pomogą Ci w poruszaniu się po zawartości Twojej kolekcji. Funkcja Prior &Next może być tymi funkcjami.
Obie te funkcje pobierają indeks kolekcji jako dane wejściowe i zwracają wynik.
Na przykład metoda zbierania PL/SQL PRIOR pobiera indeks jako dane wejściowe i zwraca wartość przechowywaną w poprzednim najniższym indeksie. Natomiast metoda zbierania NEXT zwraca wartość z następnego wyższego indeksu.
Czy są funkcje lub procedury wcześniejszego i następnego zbierania?
Zarówno Prior, jak i Next są funkcjami.
Czy możemy używać obu tych funkcji we wszystkich trzech typach kolekcji?
Tak, zarówno funkcji wcześniejszej, jak i następnej kolekcji można używać ze wszystkimi trzema typami kolekcji.
Kiedy metody zbierania danych PL/SQL poprzednie i następne zwrócą wartość null?
Metoda zbierania Prior zwraca wartość null, gdy nie ma dostępnych niższych wartości indeksu dolnego, a Metoda zbierania Next zwraca wartość null, gdy nie ma dostępnych wyższych wartości indeksu dolnego.
Prostymi słowami możemy powiedzieć, że obie te funkcje kolekcji zwracają wartość Null, jeśli są używane odpowiednio z indeksami First i Last w kolekcji .
Jakie będą dane wyjściowe metody Collection Next i Prior, jeśli użyjemy ich z tablicą asocjacyjną?
Jeśli metody zbierania PRIOR i NEXT są używane z tablicami asocjacyjnymi, zwrócą one dane wyjściowe typu danych VARCHAR2 lub LONG.
Słyszałem, że te metody powodują pewien rodzaj wyjątków. Czy to prawda?
Tak to jest prawda. Jeśli którakolwiek z tych funkcji zostanie zastosowana do niezainicjowanej tabeli zagnieżdżonej lub Varray, wywołają wyjątek COLLECTION_IS_NULL.
Czy możesz nam zademonstrować, jak korzystać z tych funkcji w naszym kodzie?
Jasne, czemu nie! Pokażę Ci zastosowanie zarówno funkcji wcześniejszej, jak i następnej kolekcji za pomocą bardzo łatwego kodu.
Przykład wcześniejszej metody odbioru.
W tej metodzie nauczymy się korzystać z metody zbierania Prior z zagnieżdżoną tabelą.
SET SERVEROUTPUT ON; DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
W powyższym anonimowym bloku PL/SQL mamy dwie instrukcje wyjściowe z „Prior Function Call”. Pierwsza instrukcja wyjściowa zwróci numer indeksu przed numerem indeksu 3, w którym zapisana jest pewna wartość. W naszym przypadku indeks przed indeksem numer 3 to 2. Zatem 2 będzie wynikiem pierwszej instrukcji wyjściowej.
W drugiej instrukcji wyjściowej wywołaliśmy funkcję Prior i dostarczyliśmy ją jako dane wejściowe do obiektu kolekcji.
var_nt(var_nt.PRIOR(3))
Silnik Oracle wykona najpierw funkcję Collection Prior (nazwijmy ją częścią 1), a następnie korzystając z wyniku z części 1, wykona obiekt kolekcji (nazwijmy go częścią 2) i wygeneruje wynik końcowy, który w naszym przypadku będzie wynosił 18. Śmiało, skopiuj kod i spróbuj wykonać samodzielnie.
Co się stanie, jeśli usuniemy poprzedni najniższy indeks z zagnieżdżonej tabeli?
Więc teraz pytanie brzmi, co się stanie, jeśli usuniesz poprzedni najniższy indeks, który w naszym kodzie wynosi 2. W takim przypadku wynik na pewno nie będzie taki sam. Funkcja Prior zwraca poprzedni najniższy indeks. Ale ten indeks musi zawierać jakąś wartość.
Spróbuj sam. Oto kod.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN var_nt.DELETE(2); dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); END; /
Przykład metody pobierania Dalej.
Możesz użyć metody PL/SQL Collection Next tak samo, jak użyłeś funkcji Prior w powyższym kodzie. Metoda zbierania NEXT zwraca wartość z następnego wyższego indeksu. Oto przykład
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90); BEGIN dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); END; /
Oba przykłady są prawie takie same, z wyjątkiem wywołania funkcji kolekcji. W sekcji wykonania tego bloku PL/SQL ponownie mamy dwie instrukcje wyjściowe. Pierwsza instrukcja wyjściowa zwróci następny niepusty numer indeksu, podczas gdy druga zwróci dane zapisane w tym indeksie. Działanie obu tych stwierdzeń będzie takie samo, jak omówiliśmy powyżej. Śmiało, skopiuj kod i zobacz wynik.
To był szczegółowy samouczek dotyczący metody PL/SQL Collection Next and Prior. Mam nadzieję, że podobało Ci się czytanie i nauczyłeś się czegoś nowego. Upewnij się, że udostępniasz tego bloga w swoich mediach społecznościowych. Aby udostępnić ten blog na swoim Facebooku, kliknij tutaj, a na Twitterze kliknij tutaj.
Dzięki i życzę miłego dnia!