sql >> Databasteknik >  >> RDS >> Oracle

FORALL-uttalande med nedre och övre gräns i Oracle-databasen

FÖRALLT uttalande med nedre och övre gränsklausul

I den tidigare handledningen lärde vi oss att det finns tre bundna satser som vi kan använda med FORALL-satsen för att optimera DML-frågorna. Från dessa tre bundna klausuler kommer vi att utforska den första, dvs. Lower och Upper Bound i denna handledning.

Vad är Lower &Upper Bound-satsen i FORALL-satsen?

Som namnet antyder måste vi med Lower &Upper Bound-satsen ange det giltiga intervallet av på varandra följande indexnummer för samlingen.

Finns det någon regel för att använda Lower &Upper Bound-sats med FORALL-satsen?

Lower &Upper Bound-sats kan endast användas när samlingen som du refererar till i din DML-sats är Dens . Om referenssamlingen är gles så kanske du vill använda andra bundna klausuler som vi kommer att diskutera i framtida handledningar.

För att få ditt program att köras framgångsrikt måste du se till att du har följt alla regler i FORALL-satsen tillsammans med ovan nämnda regel för Lower &Upper bound-sats. Läs mer om FORALL uttalande här.

Låt oss göra ett exempel på FORALL-sats med Lower &Upper Bound-sats i Oracle Database.

Men innan vi hoppar på exemplet måste vi förstå en sak; FORALL-satsen gör samma arbete som bulk collect-satsen men på ett omvänt sätt. Till exempel, med bulk collect hämtade vi data från tabellerna och lagrade dem i samlingen, men nu med FORALL-satsen kommer vi att hämta data från samlingen och lagra dem i tabellen.

I den här demonstrationen kommer vi att göra tre saker för att förstå begreppet FORALL-sats med Lower &Upper Bound-sats. Dessa tre saker är:

  1. Skapa en tabell.

Först skapar vi en tabell. Vi kommer att använda den här tabellen för att dumpa data som vi kommer att hämta från samlingen.

  1. Skapa och fyll i samlingen.

Det här steget är valfritt om du redan har en samling med vissa data. Om du inte gör det så följ mig. För demonstrationen kommer jag att skapa och fylla i en samling.

  1. Skriv FORALL-satsen.

När du har ditt bord och din samling redo, skriv FORALL-påståendet. För demonstrationen kommer jag att skriva en FORALL-sats som hämtar data från samlingen och lagrar den i tabellen. Det kommer också att vara en demonstration av FORALL-satsen med INSERT DML.

Låt oss göra exemplet med PL/SQL FORALL-sats med nedre och övre gräns.

SET SERVEROUTPUT ON;
CREATE TABLE tut_77 (
    Mul_tab    NUMBER(5)
);

Det kommer att vara vårt bord som kommer att innehålla uppgifterna. Därefter kommer vi att skriva PL/SQL-blocket.

DECLARE
	-- Declare the collection
    TYPE My_Array IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
    col_var My_Array;
	--Declare a variable for holding the total number of records of the table
    tot_rec NUMBER;
BEGIN
    --Populate the collection
    FOR i IN 1..10 LOOP
        col_var (i) := 9*i;
    END LOOP;
    -- Write the FORALL statement.
    FORALL idx IN 1..10
        INSERT INTO tut_77 (mul_tab)
        VALUES (col_var (idx));
    --Get the total number of records from the table     
    SELECT count (*) INTO tot_rec FROM tut_77;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

Förklaring av deklarationsavsnittet

I avsnittet deklaration av denna kod har vi deklarerat en associativ array med namnet "my_Array" tillsammans med dess samlingsvariabel. Även en extra variabel med namnet tot_rec av Number datatype. Denna variabel kommer att hålla det totala antalet poster lagrade i vår tabell.

I utförandesektionen har vi gjort tre uppgifter. För det första, med hjälp av FOR Loop fyllde vi vår samling med multiplikationstabellen med 9. För det andra med FORALL-satsen tog vi data från samlingen och lagrade den i tabellen vi skapade. För det tredje med variabeln tot_rec med SELECT-INTO-satsen visade vi tillbaka det totala antalet rader lagrade i tabellen.

Jag har också gjort en video om samma ämne där jag har förklarat denna kod rad för rad i detalj. Jag föreslår att du kollar upp det.

Det är handledningen om PL/SQL FORALL-sats med Lower &Upper Bound-sats i Oracle Database. Hoppas du tyckte om att titta. Se till att gilla och dela den här bloggen med dina vänner på dina sociala medier. Du kan nå mig på min Facebook-sida också.

Tack och ha en bra dag.


  1. Hur får man skillnad på dagar/månader/år (dateradiff) mellan två datum?

  2. TIMESTAMP() Exempel – MySQL

  3. Utveckla PostgreSQL för Windows, del 1

  4. Postgres pg_dump dumpar databasen i en annan ordning varje gång