Dlaczego FORALL oświadczenie z indeksami klauzuli wiążącej?
Instrukcja FORALL z klauzulą Lower &Upper Bound jest prawdopodobnie najłatwiejszym sposobem przetwarzania danych zbiorczych, dopóki nie odwołujemy się do gęstego zbioru. Jeśli chodzi o rzadki zbiór, klauzula Lower &Upper Bound nie jest silna. Niestety w prawdziwym scenariuszu szanse na pracę z gęstym zbiorem są znacznie mniejsze niż praca z rzadkim zbiorem.
W każdym razie, jeśli jesteś ciekawy, zrobiliśmy demonstrację. Sprawdź, co się stanie, gdy użyjemy klauzuli dolnej i górnej granicy wyrażenia FORALL z rzadkim zbiorem w filmie na naszym kanale YouTube tutaj.
Wadą klauzuli Lower &Upper bound w instrukcji FORALL jest to, że nie można jej używać z rzadką kolekcją. Tę wadę można łatwo pokonać, korzystając z opcji takich jak „Wskaźniki ” lub „Wartości klauzula powiązana. Ten samouczek dotyczy pierwszej opcji.
klauzula INDICES-OF Bound
Podobnie jak w przypadku klauzuli Lower &Upper bound Klauzula INDICES-OF pomaga nam w masowym przetwarzaniu danych, umożliwiając nam iterację przez cały zbiór. Jedyna różnica polega na tym, że używając klauzuli INDICES OF możemy iterować zarówno przez gęstą, jak i rzadką kolekcję. Klauzula dolna i górna granica działa tylko w przypadku gęstego zbioru.
Składnia INDEKSÓW klauzuli związanej
FORALL index IN INDICES OF collection_variable [SAVE EXCEPTION] DML statements;
Gdzie:
DLA WSZYSTKICH to zastrzeżone słowo kluczowe Oracle Database, po którym następuje indeks. Ten indeks jest niejawnie zdefiniowanym licznikiem pętli, który jest deklarowany przez silnik PL/SQL. Następnie musisz napisać kolejne słowo kluczowe, które jest IN. Po słowie kluczowym IN mamy naszą klauzulę związaną, którą jest INDICE OF.
Zaraz po napisaniu zastrzeżonej frazy „INDICES OF” musimy określić zmienną kolekcji kolekcji, której danych chcemy użyć. Wiemy już, że odwoływaliśmy się do kolekcji w programie poprzez jej zmienną collection. Następnie mamy opcję ZAPISZ WYJĄTEK jest to opcja opcjonalna. Następnie mamy instrukcję DML, może to być dowolna instrukcja DML lub instrukcja MERGE.
Upewnij się, że instrukcja DML lub instrukcja MERGE, której używasz z FORALL, musi odwoływać się do kolekcji. Również instrukcja FORALL może przetwarzać jednocześnie tylko jedną instrukcję DML lub MERGE.
Przykład INDEKSY ZWIĄZANEJ klauzuli
Tutaj zobaczymy demonstrację klauzuli INDICES OF bound z instrukcją FORALL. Tutaj pobierzemy dane z już zainicjowanej rzadkiej tabeli zagnieżdżonej i zapiszemy je w tabeli.
Jak dowiedzieliśmy się w poprzednim samouczku, instrukcja FORALL pobiera dane z kolekcji i przechowuje je w tabeli. Dlatego najpierw utworzymy tabelę.
SET SERVEROUTPUT ON; CREATE TABLE tut_78( mul_tab NUMBER(5) );
W celu ułatwienia demonstracji stworzyliśmy bardzo prostą tabelę o nazwie tut_78. Ta tabela ma tylko jedną kolumnę mul_tab z NUMBER typem danych.
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); --Another variable for holding total number of record stored into the table tot_rec NUMBER; BEGIN var_nt.DELETE(3, 6); FORALL idx IN INDICES OF var_nt INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx)); SELECT COUNT (*) INTO tot_rec FROM tut_78; DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec); END; /
Możesz znaleźć szczegółowe wyjaśnienie powyższego kodu w samouczku wideo. Ale nadal miejmy tutaj również krótkie wyjaśnienie.
Sekcja deklaracji powyższego bloku PL/SQL
W tej sekcji najpierw utworzyliśmy zagnieżdżoną tabelę o nazwie „moja_zagnieżdżona_tabela ”. Przechowuje dane typu NUMBER. Następnie zadeklarowaliśmy zmienną kolekcji „var_nt ”. Używając go, zainicjowaliśmy pierwsze 10 indeksów, przechowując 10 elementów numerycznych w naszej kolekcji.
Oprócz tabeli zagnieżdżonej i jej zmiennej kolekcji zadeklarowaliśmy również dodatkową zmienną „tot_rec ’ typu danych liczba. Ta zmienna będzie używana do przechowywania całkowitej liczby danych, które będą przechowywane w tabeli.
Sekcja wykonania
Jeśli spojrzysz na pierwszą instrukcję w sekcji wykonania. Przekonasz się, że za pomocą metody zbierania DELETE usunąłem dane z indeksu 3 do indeksu 6. Oznacza to, że teraz indeks naszej kolekcji nie jest wypełniany sekwencyjnie. To zmienia charakter naszej kolekcji z DENSE na ROZPATRYWANIE.
Zaraz po wywołaniu metody zbierania DELETE mamy naszą instrukcję FORALL z klauzulą INDICES OF bound. Używając tej instrukcji, wstawiamy do kolekcji „my_nested_table” do tabeli tut_78.
Następnie mamy instrukcję SELECT-INTO. Ta instrukcja zwraca całkowitą liczbę wierszy wstawionych do tabeli tut_78 i przechowuje tę wartość w zmiennej tot_rec. Następnie za pomocą instrukcji DBMS_OUTPUT wyświetlamy użytkownikowi wartość zapisaną w zmiennej tot_rec ze sformatowanym łańcuchem.
Gorąco zachęcam do obejrzenia tego samouczka na moim kanale YouTube, aby uzyskać szczegółowe wyjaśnienie powyższego kodu. Nie zapomnij też zasubskrybować kanału, aby uzyskać więcej interesujących samouczków.
Dzięki temu jest tutorial PL/SQL, jak wykonać masowe przetwarzanie danych za pomocą instrukcji FORALL z klauzulą INDICES OF bound. Mam nadzieję, że podobało Ci się czytanie, jeśli tak, udostępnij ten blog w swoich mediach społecznościowych. Miłego dnia!