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

Indsamlingsmetode:Trimprocedure i Oracle-databasen

Velkommen tilbage til den sidste tutorial i PL/SQL Collection-serien. Den hidtil længste video-tutorial-serie på kanalen. I denne øvelse lærer vi om den sidste PL/SQL-indsamlingsprocedure, som er TRIM-proceduren i Oracle Database.

Hvad er PL/SQL Collection Method TRIM?

Indsamlingsmetode TRIM i Oracle db er en overbelastet procedure, hvorved du kan fjerne et eller flere elementer fra slutningen af ​​en samling.

På hvor mange måder kan vi kalde indsamlingsmetoden TRIM-procedure i Oracle Database?

Da PL/SQL-indsamlingsmetoden TRIM er en overbelastet procedure, kan vi kalde den på to forskellige måder. Disse to forskellige opkald af TRIM-proceduren er:

  1. TRIM:Trimprocedure uden parameter.

Hvis vi bruger TRIM-proceduren uden nogen parametre, vil den kun fjerne ét element fra slutningen af ​​samlingen.

  1. TRIM:Trimprocedure med én parameter.

TRIM procedure kaldet ved at sende et argument vil fjerne antallet af elementer fra slutningen af ​​samlingen som specificeret af parameteren. Denne parameter skal være et gyldigt heltal. Det bør heller ikke være større end det maksimale antal elementer, som din samling har.

Info:Trimprocedure vil give en fejl, hvis der er et forsøg på at trimme plads under nul elementer.

Kan vi bruge PL/SQL-indsamlingsmetoden TRIM med alle de tre typer samlinger?

Desværre nej, det kan vi ikke. I lighed med PL/SQL-indsamlingsproceduren EXTEND, kan proceduren TRIM kun bruges med indsamlingsindlejrede tabeller og VARRAY'er. Vi kan dog ikke bruge det med Associative Arrays.

Hvad vil der ske, hvis vi bruger PL/SQL Collection Procedure TRIM med et associativt array?

Hvis indsamlingsmetoden Trim of Oracle Database-versioner bruges sammen med en Associative Array, så vil du få en kompileringstidsfejl .

Hvad er specifikationen for Trim Procedure i Oracle Database?

Specifikationen af ​​indsamlingsproceduren TRIM er:

PROCEDURE TRIM (n PLS_INTEGER:= 1);

Hvis n er NULL, vil trim ikke gøre noget.

Jeg hørte dig sige i videoen, som vi også kan få SUBSCRIPT_BEYOND_COUNT undtagelse?

Ja, PL/SQL-indsamlingsmetoden TRIM vil rejse SUBSCRIPT_BEYOND_COUNT undtagelse. Hvis der er et forsøg på at trimme flere elementer, end der faktisk findes i samlingen.

Du kan finde eksemplet på denne undtagelse, som jeg demonstrerede i videoen senere på denne blog. Hvis du vil se videoen, så er den her. Hvis ikke, er du velkommen til at rulle ned.

Er der andre undtagelser forbundet med PL/SQL-indsamlingsmetoden Trim, som vi bør vide om?

Ja, der er endnu en undtagelse forbundet med TRIM-proceduren, og det er COLLECTION_IS_NULL undtagelse.

Når du anvender indsamlingsproceduren TRIM på en ikke-initialiseret indlejret tabel eller VARRAY, vil compileren rejse COLLECTION_IS_NULL undtagelse.

Kan vi bruge TRIM- og DELETE-proceduren sammen?

Nej vi kan ikke bruge samlinger TRIM og SLET procedure sammen. Brug af dem med hinanden vil give uventede resultater.

Tænk på et scenarie, hvor du har SLETTET et element placeret i slutningen af ​​en VARRAY-variabel og derefter anvende TRIM-proceduren på samme. Kan du gætte antallet af elementer, du muligvis har fjernet? Du kan blive forvirret til at tro, at to elementer er blevet fjernet, men faktum er, at kun det ene er blevet fjernet. TRIM reagerer på pladsholderen efterladt af proceduren SLET.

For at undgå disse forvirrende og foruroligende resultater anbefaler Oracle-databasesupport stærkt, at disse to procedurer udelukkende bruges på en given samling.

Hvad med eksemplerne? Gør vi dem i denne blog eller ej?

Selvfølgelig vil vi helt sikkert lave eksemplerne i denne blog. Faktisk var jeg ved at vise dig demonstrationen af ​​hver af PL/SQL-indsamlingsproceduren TRIM-opkald, som vi nævnte ovenfor. Her går vi:

1. PL/SQL-indsamlingsprocedure TRIM uden parameter.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
BEGIN
    nt_obj.TRIM;
    DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
    FOR i IN 1..nt_obj.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (nt_obj (i));
    END LOOP;
END;
/ 

2. Indsamlingsprocedure TRIM med parameter.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
BEGIN
    nt_obj.TRIM (3);
    DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
    FOR i IN 1..nt_obj.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (nt_obj(i));
    END LOOP;
END;
/

3. PL/SQL-indsamlingsprocedure TRIM SUBSCRIPT_BEYOND_COUNT undtagelse.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
BEGIN
    nt_obj.TRIM(6);
    DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
    FOR i IN 1..nt_obj.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (nt_obj(i));
    END LOOP;
END;
/

SUBSCRIPT_BEYOND_COUNT undtagelse opstår, når vi sender et argument, der er større end det samlede antal elementer i samlingen. I ovenstående eksempel er samlingen, som vi bruger, Nested table med navnet 'my_nestedTable', som har 5 numeriske elementer gemt i sig. Men i procedurekaldet instruerede vi compileren til at TRIM 6 elementer, hvilket absolut er umuligt, så i dette tilfælde rejser compileren SUBSCRIPT_BEYOND_COUNT undtagelse.

4. Indsamlingsprocedure TRIM med VARRAY.

SET SERVEROUTPUT ON;
DECLARE
 TYPE inBlock_vry IS VARRAY (5) OF NUMBER;
 vry_obj inBlock_vry := inBlock_vry(1, 2, 3, 4, 5);
BEGIN
    --TRIM without parameter
    vry_obj.TRIM;
    DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
    FOR i IN 1..vry_obj.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (vry_obj(i));
    END LOOP;
    --TRIM with Parameter
    vry_obj.TRIM (2);
    DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
    FOR i IN 1..vry_obj.COUNT
    LOOP
        DBMS_OUTPUT.PUT_LINE (vry_obj(i));
    END LOOP;
END;
/

Det er selvstudiet, der forklarer begreberne i PL/SQL Collection Method TRIM-proceduren i Oracle Database.

Håber du kunne lide det. Kontakt mig på min Facebook-side for flere opdateringer og indsigt i Oracle Database-koncepter. Tak og god dag!


  1. Fejl i MySQL ved indstilling af standardværdi for DATE eller DATETIME

  2. Undslippende MySQL-wild cards

  3. Skal arrangere medarbejdernavne i henhold til deres by kolonnemæssigt

  4. Forbindelseshåndtering og drosling med ProxySQL