sql >> Databáze >  >> RDS >> Oracle

Metoda sběru:Postup oříznutí v databázi Oracle

Vítejte zpět u posledního tutoriálu ze série PL/SQL Collection. Zatím nejdelší série video tutoriálů na kanálu. V tomto tutoriálu se seznámíme s poslední procedurou PL/SQL Collection, kterou je procedura TRIM v Oracle Database.

Co je TRIM shromažďovací metody PL/SQL?

Metoda kolekce TRIM v Oracle db je přetížená procedura, pomocí které můžete odstranit jeden nebo více prvků z konce kolekce.

Kolik způsobů můžeme metodu shromažďování nazvat procedurou TRIM v databázi Oracle?

Protože metoda PL/SQL kolekce TRIM je přetížená procedura, můžeme ji nazvat dvěma různými způsoby. Tato dvě různá volání procedury TRIM jsou:

  1. TRIM:Postup oříznutí bez parametru.

Pokud použijeme proceduru TRIM bez jakýchkoli parametrů, odstraní pouze jeden prvek z konce kolekce.

  1. TRIM:Procedura trimování s jedním parametrem.

Procedura TRIM volaná předáním jednoho argumentu odstraní počet prvků z konce kolekce, jak je specifikováno parametrem. Tento parametr musí být platné celé číslo. Také by neměl být větší než maximální počet prvků, které má vaše sbírka.

Informace:Postup oříznutí vyvolá chybu, pokud dojde k pokusu o oříznutí prostoru pod nulou prvků.

Můžeme použít metodu kolekce PL/SQL TRIM se všemi třemi typy kolekcí?

Bohužel ne, nemůžeme. Podobně jako u procedury PL/SQL Collection EXTEND, postup TRIM lze použít pouze s kolekcemi Nested Tables a VARRAY. Nemůžeme jej však použít s asociativními poli.

Co se stane, když použijeme TRIM kolekce PL/SQL s asociativním polem?

Pokud je metoda sběru Trim verzí databáze Oracle použita s asociativním polem, zobrazí se chyba doby kompilace .

Jaká je specifikace Trim Procedure v Oracle Database?

Specifikace postupu odběru TRIM je:

PROCEDURE TRIM (n PLS_INTEGER:= 1);

Pokud je n NULL, trim neudělá nic.

Slyšel jsem vás říkat v videože můžeme také získat SUBSCRIPT_BEYOND_COUNT výjimku?

Ano, metoda shromažďování PL/SQL TRIM vyvolá SUBSCRIPT_BEYOND_COUNT výjimku. Pokud dojde k pokusu o oříznutí více prvků, než ve skutečnosti existuje v kolekci.

Příklad této výjimky, kterou jsem demonstroval ve videu dále v tomto blogu, najdete. Pokud se chcete podívat na video, tak zde je. Pokud ne, klidně přejděte dolů.

Existují nějaké další výjimky spojené s metodou Trim PL/SQL Collection, o kterých bychom měli vědět?

Ano, s procedurou TRIM je spojena ještě jedna výjimka, a to výjimka COLLECTION_IS_NULL.

Kdykoli použijete kolekci TRIM na neinicializovanou vnořenou tabulku nebo VARRAY, pak kompilátor vyvolá výjimku COLLECTION_IS_NULL.

Můžeme použít procedury TRIM a DELETE společně?

Ne, nemůžeme použít procedury TRIM a DELETE kolekcí společně. Jejich vzájemné použití povede k neočekávaným výsledkům.

Přemýšlejte o scénáři, kdy jste DELETE prvek umístěný na konci proměnné VARRAY a poté na totéž použili proceduru TRIM. Dokážete odhadnout počet prvků, které jste mohli odstranit? Můžete být zmateni a věřit, že byly odstraněny dva prvky, ale faktem je, že byl odstraněn pouze jeden. TRIM působí na zástupný symbol zanechaný procedurou DELETE.

Aby se zabránilo těmto matoucím a znepokojujícím výsledkům, podpora databáze Oracle důrazně doporučuje, aby tyto dva postupy byly používány výhradně pro danou kolekci.

A co příklady? Děláme je na tomto blogu nebo ne?

Jistě, příklady v tomto blogu určitě uděláme. Ve skutečnosti jsem se vám chystal ukázat demonstraci každého volání procedury TRIM PL/SQL Collection, které jsme zmínili výše. Tady to je:

1. Procedura kolekce PL/SQL TRIM bez parametru.

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. Postup sběru TRIM s parametrem.

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. Postup shromažďování PL/SQL TRIM SUBSCRIPT_BEYOND_COUNT výjimka.

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 výjimka nastane, když předáme argument větší než celkový počet prvků kolekce. Ve výše uvedeném příkladu je kolekce, kterou používáme, Nested tabulka s názvem „my_nestedTable“, která má v sobě uloženo 5 číselných prvků. Ve volání procedury jsme však nařídili kompilátoru, aby použil prvky TRIM 6, což rozhodně není možné, takže v tomto případě kompilátor vyvolá SUBSCRIPT_BEYOND_COUNT výjimku.

4. Postup odběru TRIM s 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;
/

Toto je výukový program vysvětlující koncepty PL/SQL Collection Method TRIM procedury v Oracle Database.

Doufám, že se vám to líbilo. Spojte se se mnou na mé stránce na Facebooku, kde získáte další aktualizace a postřehy o konceptech databáze Oracle. Děkuji a přeji hezký den!


  1. SQL – Kombinace více podobných dotazů

  2. Operátor PostgreSQL IN se slabým výkonem poddotazu

  3. Nejlepší přístupy pro seskupený medián

  4. Sekvence vs identita