sql >> Database >  >> RDS >> Oracle

FORALL-instructie met VALUES-OF Bound-clausule in Oracle Database

Tot nu toe hebben we geleerd hoe we de FORALL-instructie kunnen gebruiken met een dichte verzameling met behulp van de Lower &Upper-bound-clausule en een schaarse verzameling met behulp van de INDICES OF-gebonden clausule. Wat als we de FORALL-verklaring alleen willen gebruiken met geselecteerde elementen van de collectie? Kunnen we dat doen? Ja, we kunnen dat gemakkelijk doen met de FORALL-instructie met de derde en laatste gebonden clausule die 'VALUES-OF' is.

Wat is een 'Values-of'-gebonden clausule?

Bij FORALL-statement draait alles om het op een geoptimaliseerde manier binden van de collectie-elementen met een enkele DML-statement. Met behulp van de 'Values-of'-gebonden clausule van het FORALL-statement kunnen we de geselecteerde elementen van de collectie binden met het DML-statement.

Wat is de syntaxis voor de 'Values-of'-gebonden clausule?

Voordat we begrijpen hoe waarden van gebonden clausules werken, laten we eens kijken naar de syntaxis en leren wat de syntactisch correcte manier is om de 'Values-of'-clausule met FORALL-instructie in Oracle Database te gebruiken.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Info:
Onthoud altijd dat de naam van de clausule VALUES-OF niet VALUE-OF is. Het schrijven van VALUE-OF zal een fout veroorzaken die uw programma zou kunnen beëindigen.
WAARDEN VAN rechts
WAARDE VAN verkeerde

Hoe werkt de Values-of-bound-clausule?

Values-of-bound-clausule vereist twee verzamelingen. De eerste collectie is de 'Broncollectie' . We zullen DML-bewerkingen uitvoeren, zoals invoegen, verwijderen en bijwerken van de gegevens van deze verzameling met behulp van de FORALL-instructie.

De tweede collectie is de 'Indexing Collection ' die het indexnummer van geselecteerde elementen uit de eerste verzameling specificeert. Deze geselecteerde elementen zijn die elementen waarop u de DML-bewerkingen wilt uitvoeren.

As Values-of-bound-clausule specificeert dat de waarde van Loop Index ('idx' in de bovenstaande syntaxis) variabele van de FORALL-instructie is gebaseerd op de waarden van het element in de andere verzameling. Daarom hebben we naar die andere collectie verwezen als Indexing-collectie in de bovenstaande syntaxis.

Dus wat is deze Indexing-verzameling?

Indexing collection is een groep indexen waar de FORALL-instructie doorheen kan lopen. Deze verzameling kan zowel een dichte verzameling als een schaarse verzameling zijn. Ook de in de collectie opgeslagen indexnummers hoeven niet uniek te zijn en kunnen in willekeurige volgorde worden vermeld.

Zijn er beperkingen met de Values-of-clausule waarvan we op de hoogte moeten zijn?

Ja, er zijn een paar dingen die u moet weten voordat u met de waarde-van-gebonden clausule in Oracle Database werkt. Deze beperkingen zijn –

  • De indexeringsverzameling moet een GENSTE TABEL of een ASSOCIATIEVE ARRAY zijn.
  • Als de indexeringscollectie een associatieve array is, moet deze worden geïndexeerd door PLS_INTEGER of BINARY_INTEGER.
  • De elementen van de indexeringscollectie moeten van PLS_INTEGER of BINARY_INTEGER zijn.

Voorbeeld van Values-of-bound-clausule met FORALL-instructie in Oracle Database:

Stap 1:Tabel maken

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Stap 2:Schrijf een PL/SQL-blok waarin wordt gedemonstreerd hoe u Values-of-clausule met FORALL-instructie in Oracle Database kunt gebruiken.

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;
/

Je kunt de gedetailleerde uitleg van deze code bekijken in de videozelfstudie. Daar heb ik elke regel van dit PL/SQL-blok in detail uitgelegd.

Dat is de tutorial over het gebruik van Values-of-bound-clausule met FORALL-instructie in Oracle Database. Ik hoop dat je het nuttig vindt. Deel deze blog alsjeblieft met je vrienden op hun sociale media. Abonneer je ook op mijn YouTube-kanaal voor meer informatieve en interessante tutorials.

Bedankt en een fijne dag verder.


  1. Welke bronnen zijn er voor het afstemmen van databaseprestaties?

  2. Hoe een PostgreSQL-database migreren naar een SQLServer-database?

  3. JDBC ResultSet krijg kolommen met tabelalias

  4. Netwerkinfrastructuur opnieuw koppelen