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:
- TRIM:Postup oříznutí bez parametru.
Pokud použijeme proceduru TRIM bez jakýchkoli parametrů, odstraní pouze jeden prvek z konce kolekce.
- 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!