sql >> Databasteknik >  >> RDS >> Oracle

Insamlingsmetod:Trimprocedur i Oracle Database

Välkommen tillbaka till den sista handledningen i PL/SQL Collection-serien. Den längsta tutorialserien hittills på kanalen. I den här handledningen kommer vi att lära oss om den senaste PL/SQL-insamlingsproceduren som är TRIM-proceduren i Oracle Database.

Vad är PL/SQL Collection Method TRIM?

Insamlingsmetod TRIM i Oracle db är en överbelastad procedur där du kan ta bort ett eller flera element från slutet av en samling.

På hur många sätt kan vi kalla insamlingsmetoden TRIM-proceduren i Oracle Database?

Eftersom PL/SQL Collection Method TRIM är en överbelastad procedur så kan vi kalla den på två olika sätt. Dessa två olika anrop av TRIM-proceduren är:

  1. TRIM:Trimprocedur utan parameter.

Om vi ​​använder TRIM-proceduren utan några parametrar kommer det bara att ta bort ett element från slutet av samlingen.

  1. TRIM:Trimprocedur med en parameter.

TRIM-proceduren som anropas genom att skicka ett argument kommer att ta bort antalet element från slutet av samlingen enligt parametern. Den parametern måste vara ett giltigt heltal. Det bör inte heller vara större än det maximala antalet element som din samling har.

Information:Trimningsproceduren kommer att visa ett felmeddelande om det görs ett försök att trimma utrymme under noll element.

Kan vi använda PL/SQL-insamlingsmetoden TRIM med alla tre typer av samlingar?

Tyvärr nej, det kan vi inte. I likhet med PL/SQL-insamlingsproceduren EXTEND, kan proceduren TRIM endast användas med insamlingskapslade tabeller och VARRAYs. Men vi kan inte använda det med associativa arrayer.

Vad händer om vi använder PL/SQL Collection Procedure TRIM med en associativ array?

Om insamlingsmetoden Trim av Oracle Database-versioner används med en Associative Array så kommer du att få ett kompileringstidsfel .

Vad är specifikationen för Trim Procedure i Oracle Database?

Specifikationen för insamlingsförfarandet TRIM är:

PROCEDURE TRIM (n PLS_INTEGER:= 1);

Om n är NULL gör trim ingenting.

Jag hörde dig säga i videon som vi också kan få SUBSCRIPT_BEYOND_COUNT undantag?

Ja, PL/SQL-insamlingsmetoden TRIM kommer att höja SUBSCRIPT_BEYOND_COUNT undantag. Om det görs ett försök att trimma fler element än vad som faktiskt finns i samlingen.

Du kan hitta exemplet på detta undantag som jag visade i videon längre fram i den här bloggen. Om du vill se videon så är den här. Om inte, skrolla gärna ner.

Finns det några andra undantag förknippade med PL/SQL Collection-metoden Trim som vi bör känna till?

Ja, det finns ytterligare ett undantag kopplat till TRIM-proceduren och det är COLLECTION_IS_NULL undantag.

När du tillämpar insamlingsproceduren TRIM på en oinitierad kapslad tabell eller VARRAY kommer kompilatorn att ta upp COLLECTION_IS_NULL undantag.

Kan vi använda proceduren TRIM och DELETE tillsammans?

Nej, vi kan inte använda samlingarna TRIM och DELETE tillsammans. Att använda dem med varandra kommer att ge oväntade resultat.

Tänk på ett scenario när du har TA BORT ett element som ligger i slutet av en VARRAY-variabel och därefter tillämpa TRIM-proceduren på densamma. Kan du gissa antalet element som du kan ha tagit bort? Du kan bli förvirrad till att tro att två element har tagits bort, men faktum är att bara ett har tagits bort. TRIM agerar på platshållaren som lämnas av proceduren DELETE.

För att undvika dessa förvirrande och irriterande resultat rekommenderar Oracles databasstöd starkt att dessa två procedurer endast ska användas på en given samling.

Hur är det med exemplen? Gör vi dem i den här bloggen eller inte?

Visst, vi kommer definitivt att göra exemplen i den här bloggen. I själva verket var jag på väg att visa dig demonstrationen av var och en av PL/SQL Collection proceduren TRIM-anrop som vi nämnde ovan. Nu kör vi:

1. PL/SQL Collection Procedur TRIM utan 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. Insamlingsprocedur 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-insamlingsprocedur TRIM SUBSCRIPT_BEYOND_COUNT undantag.

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 undantag inträffar när vi skickar ett argument som är större än det totala antalet element i samlingen. I exemplet ovan är samlingen som vi använder kapslad tabell med namnet 'my_nestedTable' som har 5 numeriska element lagrade i sig. Men i proceduranropet instruerade vi kompilatorn att TRIM 6 element, vilket definitivt är omöjligt, så i det här fallet ger kompilatorn SUBSCRIPT_BEYOND_COUNT undantag.

4. Insamlingsprocedur 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 är handledningen som förklarar koncepten för PL/SQL Collection Method TRIM-proceduren i Oracle Database.

Hoppas du gillade det. Ta kontakt med mig på min Facebook-sida för fler uppdateringar och insikter om Oracle Database-koncept. Tack &ha en bra dag!


  1. Vilket är det bästa sättet att undvika tecken som inte är formaterade i Oracles to_char?

  2. Hur Radians()-funktionen fungerar i PostgreSQL

  3. MySQL:Large VARCHAR vs. TEXT?

  4. Hur man returnerar antalet rader i ett frågeresultat i SQL Server