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

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

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opóźnienie Oracle między zatwierdzeniem a zaznaczeniem

  2. Opcja dostawy podczas składania równoległego żądania w R12.1.3

  3. Różnica między klauzulami ON i WHERE w złączeniach tabel SQL

  4. Zmiana definicji TYP w Oracle 21c

  5. Obsługa współbieżnych aktualizacji w trybie hibernacji