Hittills har vi lärt oss hur man använder FORALL-sats med en tät samling med hjälp av Lower &Upper bound-sats och en sparsam samling med INDICES OF bound-sats. Vad händer om vi bara vill använda FORALL-satsen med utvalda delar av samlingen? Kan vi göra det? Ja, vi kan enkelt göra det med FORALL-satsen med den tredje och sista bundna satsen som är 'VALUES-OF'.
Vad är en "Values-of"-bunden klausul?
FORALL-satsen handlar om att binda samlingselementen med en enda DML-sats på ett optimerat sätt. Genom att använda "Values-of"-bunden sats i FORALL-satsen kan vi binda de valda elementen i samlingen med DML-satsen.
Vad är syntaxen för "Values-of"-bunden klausul?
Innan vi förstår hur värden för bunden sats fungerar, låt oss ta en titt på dess syntax och lära oss vad som är det syntaktiskt korrekta sättet att använda "Values-of"-satsen med FORALL-satsen i Oracle Database.
FORALL idx IN VALUES OF indexing-collection [Save exception] DML/MERGE statement;
Information:
Kom alltid ihåg att namnet på satsen är VALUES-OF inte VALUE-OF. Att skriva VALUE-OF kommer att orsaka ett fel som kan avsluta ditt program.
VÄRDEN AV höger
VALUE OF fel
Hur fungerar Values-of bound-satsen?
Value-of-bound-satsen kräver två samlingar. Den första samlingen kommer att vara "Källsamlingen" . Vi kommer att utföra DML-operationer som att infoga, ta bort och uppdatera data från denna samling med FORALL-satsen.
Den andra samlingen kommer att vara "Indexeringssamlingen ’ som kommer att ange indexnumret för valda element från den första samlingen. Dessa valda element kommer att vara de element som du vill utföra DML-operationerna över.
Eftersom Values-of bound-satsen anger att värdet för Loop Index ('idx' i ovanstående syntax) variabel i FORALL-satsen baseras på värdena för elementet i den andra samlingen. Därför har vi hänvisat till den andra samlingen som Indexing-collection i ovanstående syntax.
Så vad är den här indexeringssamlingen?
Indexeringssamling är en grupp av index som FORALL-satsen kan gå igenom. Denna samling kan vara en tät samling såväl som en sparsam samling. Även indexnumren som lagras i samlingen behöver inte vara unika och kan listas i en godtycklig ordning.
Finns det några begränsningar med Values-of-klausulen som vi bör känna till?
Ja, det finns några saker som du måste känna till innan du arbetar med values-of bound-satsen i Oracle Database. Dessa begränsningar är –
- Indexeringssamlingen måste vara en NESTAD TABELL eller en ASSOCIATIV ARRAY.
- Om indexeringssamlingen är en associativ array måste den indexeras av PLS_INTEGER eller BINARY_INTEGER.
- Indelarna i indexeringssamlingen måste vara av antingen PLS_INTEGER eller BINARY_INTEGER.
Exempel på Values-of bound-satsdel med FORALL-sats i Oracle Database:
Steg 1:Skapa tabell
CREATE TABLE tut_79 ( selected_data NUMBER(5) );
Steg 2:Skriv ett PL/SQL-block som visar hur man använder Values-of-satsen med FORALL-satsen i Oracle Database.
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; /
Du kan se den detaljerade förklaringen av denna kod i videohandledningen. Där har jag förklarat varenda rad i detta PL/SQL-block i detalj.
Det är handledningen om hur man använder Values-of bound-satsen med FORALL-satsen i Oracle Database. Hoppas du tycker att det är till hjälp. Dela gärna denna blogg med dina vänner på deras sociala medier. Prenumerera också på min YouTube-kanal för mer informativa och intressanta handledningar.
Tack och ha en bra dag.