Do tej pory nauczyliśmy się używać instrukcji FORALL z gęstą kolekcją za pomocą klauzuli Lower &Upper bound oraz kolekcji rzadkiej za pomocą klauzuli INDICES OF bound. A co jeśli chcemy używać zestawienia FORALL tylko z wybranymi elementami kolekcji? Czy możemy to zrobić? Tak, możemy to łatwo zrobić za pomocą instrukcji FORALL z trzecią i ostatnią klauzulą związaną, czyli „VALUES-OF”.
Co to jest klauzula związana „Wartości”?
Instrukcja FORALL polega na powiązaniu elementów kolekcji z pojedynczą instrukcją DML w zoptymalizowany sposób. Używając klauzuli powiązanej „Values-of” instrukcji FORALL, możemy powiązać wybrane elementy kolekcji z instrukcją DML.
Jaka jest składnia klauzuli powiązanej „Wartości”?
Zanim zrozumiemy, jak działają wartości klauzuli bound, przyjrzyjmy się jej składni i dowiedzmy się, jaki jest poprawny składniowo sposób użycia klauzuli „Values-of” z instrukcją FORALL w bazie danych Oracle.
FORALL idx IN VALUES OF indexing-collection [Save exception] DML/MERGE statement;
Informacje:
Zawsze pamiętaj, że nazwa klauzuli to VALUES-OF, a nie VALUE-OF. Zapisanie VALUE-OF spowoduje błąd, który może spowodować zamknięcie programu.
WARTOŚCI PRAWA
WARTOŚĆ błędna
Jak działa klauzula Values-of-bound?
Klauzula Values-of bound będzie wymagać dwóch kolekcji. Pierwszą kolekcją będzie „Kolekcja źródłowa” . Będziemy wykonywać operacje DML, takie jak wstawianie, usuwanie i aktualizowanie danych tego zbioru za pomocą instrukcji FORALL.
Drugim zbiorem będzie „Kolekcja indeksowania ’, który określi numer indeksu wybranych elementów z pierwszej kolekcji. Te wybrane elementy będą tymi elementami, na których chcesz wykonać operacje DML.
Klauzula Values-of bound określa, że wartość zmiennej Loop Index („idx” w powyższej składni) instrukcji FORALL jest oparta na wartościach elementu w innej kolekcji. Dlatego w powyższej składni nazwaliśmy tę inną kolekcję Indexing-collection.
Co to za kolekcja Indeksowanie?
Kolekcja indeksowania to grupa indeksów, przez którą może przejść instrukcja FORALL. Ta kolekcja może być zbiorem gęstym lub rzadkim. Również numery indeksów przechowywane w zbiorze nie muszą być unikatowe i mogą być wymienione w dowolnej kolejności.
Czy są jakieś ograniczenia dotyczące klauzuli wartości, o których powinniśmy wiedzieć?
Tak, jest kilka rzeczy, o których musisz wiedzieć przed przystąpieniem do pracy z klauzulą value-of bound w Oracle Database. Te ograniczenia to –
- Kolekcja indeksowania musi być TABELĄ ZAgnieżdżoną lub tablicą asocjacyjną.
- Jeśli kolekcja indeksowania jest tablicą asocjacyjną, musi być indeksowana przez PLS_INTEGER lub BINARY_INTEGER.
- Elementy kolekcji indeksowania muszą mieć wartość PLS_INTEGER lub BINARY_INTEGER.
Przykład klauzuli wartości powiązanej z instrukcją FORALL w bazie danych Oracle:
Krok 1:Utwórz tabelę
CREATE TABLE tut_79 ( selected_data NUMBER(5) );
Krok 2:Napisz blok PL/SQL demonstrujący, jak używać klauzuli Values-of z instrukcją FORALL w bazie danych Oracle.
SET SERVEROUTPUT ON; DECLARE --Source collection TYPE My_NestedTable IS TABLE OF NUMBER; source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90); --Indexing collection TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; index_col My_Array; BEGIN --Initializing indexing collection with the index numbers. index_col (1) := 3; index_col (5) := 7; index_col (12):= 8; index_col (28):= 10; --FORALL statement FORALL idx IN VALUES OF index_col INSERT INTO tut_79 VALUES (source_col (idx)); END; /
Możesz obejrzeć szczegółowe wyjaśnienie tego kodu w samouczku wideo. Tam szczegółowo wyjaśniłem każdy wiersz tego bloku PL/SQL.
To jest samouczek dotyczący używania klauzuli Values-of bound z instrukcją FORALL w Oracle Database. Mam nadzieję, że okaże się to pomocne. Podziel się tym blogiem ze znajomymi w ich mediach społecznościowych. Zasubskrybuj również mój kanał YouTube, aby uzyskać więcej informacji i interesujących samouczków.
Dziękuję i życzę miłego dnia.