Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Metoda gromadzenia:funkcje PRIOR i NEXT w bazie danych Oracle

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!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zabawa z wiadomościami

  2. Instalacja pakietów RODBC/ROracle na OS X Mavericks

  3. Jakieś wady flag bitowych w kolumnach bazy danych?

  4. Nie ma więcej danych do odczytania z gniazda

  5. Używając Oracle SQL, w jaki sposób jeden dzień wyprowadza numer tygodnia i dzień tygodnia?