Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oświadczenie FORALL z klauzulą ​​INDICS-OF Bound w bazie danych Oracle

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!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lekko w pigułce

  2. Jak mogę znaleźć, które tabele odwołują się do danej tabeli w Oracle SQL Developer?

  3. Funkcja NLS_INITCAP() w Oracle

  4. Widok ALL_PROCEDURES nie pokazuje PROCEDURE_NAME

  5. Pytanie PreparedStatement w Javie przeciwko Oracle