sql >> Databasteknik >  >> RDS >> Oracle

FORALL-uttalande med VALUES-OF Bound-klausul i Oracle Database

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.


  1. Hur lagrar man bilder i en varbinär(max) kolumn?

  2. Hur man anger platsen för datafiler och loggfiler när man skapar en databas i SQL Server

  3. Importera SQL-dump till PostgreSQL-databasen

  4. NANVL() Funktion i Oracle