Oświadczenie FORALL z klauzulą dolnej i górnej granicy
W poprzednim samouczku dowiedzieliśmy się, że istnieją trzy klauzule powiązane, których możemy użyć z instrukcją FORALL do optymalizacji zapytań DML. Z tych trzech klauzul związanych omówimy pierwszą z nich, tj. Dolną i Górną granicę w tym samouczku.
Co to jest klauzula Lower &Upper Bound w oświadczeniu FORALL?
Jak sama nazwa wskazuje, w klauzuli Lower &Upper Bound musimy określić poprawny zakres kolejnych numerów indeksu kolekcji.
Czy istnieje jakaś zasada używania klauzuli Lower &Upper Bound z instrukcją FORALL?
Klauzula Lower &Upper Bound może być używana tylko wtedy, gdy kolekcja, do której odwołujesz się w wyciągu DML, jest Gęsta . Jeśli kolekcja odniesień jest rzadka, możesz użyć innych powiązanych klauzul, które omówimy w przyszłych samouczkach.
Aby Twój program został pomyślnie wykonany, musisz upewnić się, że postępowałeś zgodnie ze wszystkimi zasadami instrukcji FORALL wraz z wyżej wspomnianą zasadą klauzuli Lower &Upper bound. Dowiedz się więcej o oświadczeniu FORALL tutaj.
Zróbmy przykład instrukcji FORALL z klauzulą Lower &Upper Bound w bazie danych Oracle.
Ale zanim wskoczymy na przykład, musimy zrozumieć jedną rzecz; Oświadczenie FORALL działa tak samo jak klauzula zbiorczego zbierania, ale w odwrotny sposób. Na przykład przy zbieraniu zbiorczym pobieraliśmy dane z tabel i zapisywaliśmy je w kolekcji, ale teraz za pomocą instrukcji FORALL będziemy pobierać dane z kolekcji i przechowywać je w tabeli.
W tej demonstracji zrobimy trzy rzeczy, aby zrozumieć koncepcję wyrażenia FORALL z klauzulą Lower &Upper Bound. Te trzy rzeczy to:
-
Utwórz tabelę.
Najpierw stworzymy tabelę. Użyjemy tej tabeli do zrzucenia danych, które będziemy pobierać z kolekcji.
-
Utwórz i wypełnij kolekcję.
Ten krok jest opcjonalny, jeśli masz już kolekcję z pewnymi danymi. Jeśli nie, to podążaj za mną. Na potrzeby demonstracji stworzę i zapełnię kolekcję.
-
Napisz oświadczenie FORALL.
Po przygotowaniu stołu i kolekcji napisz oświadczenie FORALL. Na potrzeby demonstracji napiszę oświadczenie FORALL, które pobierze dane z kolekcji i zapisze je w tabeli. Będzie to również demonstracja instrukcji FORALL z INSERT DML.
Zróbmy przykład instrukcji PL/SQL FORALL z dolną i górną granicą.
SET SERVEROUTPUT ON; CREATE TABLE tut_77 ( Mul_tab NUMBER(5) );
To będzie nasza tabela, w której będą przechowywane dane. Następnie napiszemy blok PL/SQL.
DECLARE -- Declare the collection TYPE My_Array IS TABLE OF NUMBER INDEX BY PLS_INTEGER; col_var My_Array; --Declare a variable for holding the total number of records of the table tot_rec NUMBER; BEGIN --Populate the collection FOR i IN 1..10 LOOP col_var (i) := 9*i; END LOOP; -- Write the FORALL statement. FORALL idx IN 1..10 INSERT INTO tut_77 (mul_tab) VALUES (col_var (idx)); --Get the total number of records from the table SELECT count (*) INTO tot_rec FROM tut_77; DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec); END; /
Wyjaśnienie sekcji deklaracji
W sekcji deklaracji tego kodu zadeklarowaliśmy tablicę asocjacyjną o nazwie „moja_tablica” wraz z jej zmienną kolekcji. Również dodatkowa zmienna o nazwie tot_rec typu danych Number. Ta zmienna będzie przechowywać całkowitą liczbę rekordów przechowywanych w naszej tabeli.
W dziale realizacji wykonaliśmy trzy zadania. Po pierwsze, za pomocą pętli FOR wypełniliśmy naszą kolekcję tablicą mnożenia liczby 9. Po drugie, korzystając z instrukcji FORALL, pobraliśmy dane z kolekcji i zapisaliśmy je w utworzonej przez nas tabeli. Po trzecie, używając zmiennej tot_rec z instrukcją SELECT-INTO, wyświetliliśmy całkowitą liczbę wierszy przechowywanych w tabeli.
Zrobiłem również film na ten sam temat, w którym szczegółowo wyjaśniłem powyższy kod wiersz po wierszu. Proponuję to sprawdzić.
To jest samouczek dotyczący instrukcji PL/SQL FORALL z klauzulą Lower &Upper Bound w bazie danych Oracle. Mam nadzieję, że podobało Ci się oglądanie. Upewnij się, że polubisz i udostępnisz tego bloga znajomym w mediach społecznościowych. Możesz również skontaktować się ze mną na mojej stronie na Facebooku.
Dziękuję i życzę miłego dnia.