sql >> Database teknologi >  >> RDS >> Oracle

FORALL-erklæring med nedre og øvre grænse i Oracle-databasen

FORALL erklæring med nedre og øvre grænseklausul

I den forrige tutorial lærte vi, at der er tre bundne klausuler, som vi kan bruge med FORALL-sætningen til at optimere DML-forespørgslerne. Fra disse tre bundne klausuler vil vi udforske den første, dvs. Lower og Upper Bound i denne øvelse.

Hvad er Lower &Upper Bound-sætning i FORALL-sætningen?

Som navnet antyder, skal vi med Lower &Upper Bound-klausul specificere det gyldige interval af fortløbende indeksnumre for samlingen.

Er der nogen regel for at bruge Lower &Upper Bound-sætning med FORALL-sætning?

Lower &Upper Bound-sætning kan kun bruges, når samlingen, som du refererer til i din DML-sætning, er Dense . Hvis referencesamlingen er sparsom, vil du måske bruge andre bundne klausuler, som vi vil diskutere i fremtidige selvstudier.

For at få dit program eksekveret med succes, skal du sikre dig, at du har fulgt alle reglerne i FORALL-sætningen sammen med ovennævnte regel for Lower &Upper bound-sætning. Lær mere om FORALL-erklæringen her.

Lad os lave et eksempel på FORALL-sætning med Lower &Upper Bound-sætning i Oracle Database.

Men før vi hopper på eksemplet, skal vi forstå én ting; FORALL-sætningen udfører det samme arbejde som bulk collect-klausulen, men på en omvendt måde. For eksempel med bulk collect hentede vi dataene fra tabellerne og lagrede dem i samlingen, men nu med FORALL-sætningen henter vi dataene fra samlingen og gemmer dem i tabellen.

I denne demonstration vil vi gøre tre ting for at forstå begrebet FORALL-sætning med Lower &Upper Bound-klausul. Disse tre ting er:

  1. Opret en tabel.

Først laver vi en tabel. Vi vil bruge denne tabel til at dumpe de data, som vi henter fra samlingen.

  1. Opret og udfyld samlingen.

Dette trin er valgfrit, hvis du allerede har en samling med nogle data. Hvis du ikke gør det, så følg mig. Til demonstrationen vil jeg oprette og udfylde en samling.

  1. Skriv FORALL-erklæringen.

Når du har dit bord og din samling klar, så skriv FORALL-erklæringen. Til demonstrationen vil jeg skrive en FORALL-erklæring, som henter dataene fra samlingen og gemmer dem i tabellen. Det vil også være en demonstration af FORALL-sætningen med INSERT DML.

Lad os tage eksemplet med PL/SQL FORALL-sætning med nedre og øvre grænse.

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

Det vil være vores tabel, som vil indeholde dataene. Dernæst vil vi skrive PL/SQL-blokken.

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

Forklaring af erklæringsafsnittet

I erklæringssektionen af denne kode har vi erklæret et associativt array med navnet "my_Array" sammen med dets samlingsvariabel. Også en ekstra variabel med navnet tot_rec af Number datatype. Denne variabel vil indeholde det samlede antal poster gemt i vores tabel.

I udførelsesafsnittet har vi lavet tre opgaver. For det første udfyldte vi vores samling med multiplikationstabellen på 9 ved hjælp af FOR-løkken. For det andet ved at bruge FORALL-sætningen tog vi dataene fra samlingen og gemte dem i den tabel, vi oprettede. For det tredje ved at bruge variablen tot_rec med SELECT-INTO-sætningen, viste vi tilbage det samlede antal rækker, der var gemt i tabellen.

Jeg har også lavet en video om samme emne, hvor jeg har forklaret denne kode linje for linje i detaljer. Jeg foreslår, at du tjekker det ud.

Det er vejledningen om PL/SQL FORALL-sætning med Lower &Upper Bound-klausul i Oracle Database. Håber du nød at se med. Sørg for at like og dele denne blog med dine venner på dine sociale medier. Du kan også kontakte mig på min Facebook-side.

Tak og hav en god dag.


  1. Top 30 mest nyttige Concurrent Manager-forespørgsler

  2. Hvordan får du din database til at tale mange sprog?

  3. Forudbygget Oracle-database til læring og test ved hjælp af Oracle Developer VM

  4. Konverter en dato til en anden tidszone i SQL Server