ZSBD-2st-1.2-lab8.tresc-1.3-Slajd16
Zagnieżdżone tabele – PL/SQL
Prócz tablic o zmiennej długości istnieje również inny rodzaj kolekcji – zagnieżdżone tabele. Podobnie jak w przypadku tablic o zmiennej długości, zanim będzie można korzystać z zagnieżdżonych tabel, konieczne jest utworzenie typu danych reprezentującego kolekcję. Typy zagnieżdżonych tabel są tworzone w analogiczny sposób jak typy tablic o zmiennym rozmiarze. Jedyną różnicą jest tutaj to, iż zamiast wyrażenia VARRAY(maksymalny_rozmiar) używa się słowa kluczowego TABLE (tabele zagnieżdżone mają nieograniczony rozmiar). Przykład (1) pokazuje sposób utworzenia typu kolekcji łańcuchów, który będzie reprezentował zbiór towarów w koszyku w supermarkecie. Korzystanie z zagnieżdżonych tabel w PL/SQL jest bardzo podobne do korzystania z tablic o zmiennym rozmiarze. Kolekcje tego rodzaju są również, podobnie jak tablice o zmiennym rozmiarze, traktowane jako obiekty i posiadają takie prawie takie same metody. Tabele zagnieżdżone posiadają wszystkie metody tablic o zmiennym rozmiarze, ale posiadają one również kilka innych metod, które zostały zademonstrowane na przykładzie (2). Przykładowy program rozpoczyna się od deklaracji zmiennej KOSZYK typu TOWARY, który reprezentuje kolekcję – tabelę zagnieżdżoną oraz zmiennej pomocniczej typu liczbowego o nazwie X. Pierwszy wiersz właściwego programu stanowi wywołanie konstruktora kolekcji. Konstruktory tabel zagnieżdżonych działają analogicznie do konstruktorów tablic o zmiennej długości. Na przykładzie tworzona jest kolekcja przechowująca cztery towary: „Chleb”, „Masło”, „Mleko” i „Jogurt”. Podobnie jak w przypadku tablic o zmiennej długości, tabele zagnieżdżone są również indeksowane od jeden, dlatego „Chleb” będzie miał w kolekcji indeks 1, „Masło” 2 itd. Kolejny wiersz programu demonstruje działanie metody DELETE. Metoda DELETE w tabelach zagnieżdżonych posiada większą funkcjonalność niż w przypadku tablic o zmiennej długości. Prócz wersji bezparametrowej tej metody, istnieją również wersje z 1 albo 2 parametrami. Jeżeli parametr jest jeden, to oznacza on indeks elementu kolekcji, który ma zostać usunięty. Jeżeli użyte zostaną dwa parametry to są to indeksy pierwszego i ostatniego elementu kolekcji do usunięcia. W przykładowym programie podano parametry 2 i 3, co oznacza, że usunięte zostaną z kolekcji „Masło” i „Mleko”. Usuwanie elementów z tabeli zagnieżdżonej jest dosyć charakterystyczne. Otóż, usunięcie elementów ze środka nie powoduje przesunięcia elementów o wyższych indeksach na zwolnione miejsca w kolekcji. W naszej przykładowej kolekcji, po usunięciu elementów „Masło” i „Mleko”, pozostanie „Chleb” pod indeksem 1 i „Jogurt” pod indeksem 4. Próba odwołania do indeksów 2 albo 3 skończy się błędem. Po wywołaniu metody DELETE przedstawiono pętlę odczytującą kolejne wartości z kolekcji. Podobnie, jak w przypadku tablic o zmiennej długości, pętla wykorzystuje metody FIRST i LAST kolekcji w celu określenia poprawnego zakresu indeksów. Niestety, ponieważ usunęliśmy ze środka kolekcji jakieś elementy, zakres ten nie jest ciągły (indeksy 2 i 3 nie są poprawne). Aby sprawdzić, czy indeks jest poprawny (czyli, czy istnieje jakiś element pod danym indeksem) należy zastosować metodę kolekcji o nazwie EXISTS. Parametrem tej metody jest indeks, a metoda zwraca prawdę, jeśli jakiś element pod danym indeksem istnieje, bądź fałsz jeśli nie. Wykorzystując metodę EXISTS można przeczytać całą tabelę zagnieżdżoną bez błędnych odwołań do nieistniejących elementów kolekcji. ...