ZSBD-2st-1.2-lab8.tresc-1.3-Slajd34

Z Studia Informatyczne
Wersja z dnia 10:33, 10 sie 2006 autorstwa PKrzyzagorski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Konstrukcja CAST(MULTISET(...

Konstrukcja CAST(MULTISET(...


Operator TABLE omawiany poprzednio służy do zamiany kolekcji na tabelę, którą można następnie przetwarzać za pomocą poleceń DML. Istnieje również konstrukcja o działaniu odwrotnym. Jest to konstrukcja „CAST(MULTISET(...”. Pozwala ona na zamianę wyniku zapytania w kolekcję. Rozważmy przykład przedstawiony na slajdzie. Polecenie (1) tworzy typ NAZWISKA, który reprezentuje zagnieżdżoną tabelę przechowującą łańcuchy. Typ ten jest potrzebny w zapytaniu (2). Zapytanie (2) odczytuje wszystkie etaty zapisane w tabeli ETATY i zwraca NAZWY tych etatów, oraz wartość zwracaną przez wyrażenie:

CAST(MULTISET(

SELECT NAZWISKO FROM PRACOWNICY

WHERE ETAT=NAZWA) AS NAZWISKA)

Struktura tego wyrażenia jest następująca:

CAST(MULTISET( podzapytanie ) AS typ_kolekcji)

gdzie podzapytaniem jest:

SELECT NAZWISKO FROM PRACOWNICY WHERE ETAT=NAZWA,

a typem kolekcji jest typ NAZWISKA.

Podzapytanie zagnieżdżone w konstrukcji „CAST(MULTISET(...” to podzapytanie skorelowane, które zwraca zbiór nazwisk pracowników pracujących na etacie, który jest aktualnie analizowany przez zapytanie zewnętrzne. W wyniku działania konstrukcji „CAST(MULTISET(...”, wynik podzapytania jest konwertowany na kolekcję, której typ podano w wyrażeniu. Można zatem powiedzieć, że zapytanie (2) zwraca dla każdego etatu kolekcję nazwisk pracowników pracujących na tym etacie.

Konstrukcji „CAST(MULTISET(...„ można używać nie tylko w zapytaniach, ale również w innych miejscach. Jest to możliwe wszędzie tam, gdzie konieczne jest podanie wyrażenia, które zwraca całą kolekcję, np. w poleceniu INSERT, przy wstawianiu nowego obiektu zawierającego kolekcję do tabeli obiektowej.


<< Poprzedni slajd | Spis treści | Następny slajd >>