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

Prohlášení FORALL s vázanou doložkou INDICES-OF v databázi Oracle

Proč FORALL prohlášení s INDICES OF vázané doložky?

Příkaz FORALL s klauzulí Lower &Upper Bound je pravděpodobně nejjednodušší způsob hromadného zpracování dat, dokud neodkážeme na hustou kolekci. Pokud jde o řídký sběr, klauzule Lower &Upper Bound neobstojí. Bohužel v reálném životě jsou šance na práci s hustou sbírkou mnohem nižší než při práci s řídkou sbírkou.

Každopádně, pokud jste zvědaví, udělali jsme demonstraci. Podívejte se, co se stane, když použijeme klauzuli dolní a horní hranice příkazu FORALL s řídkým sběrem ve videu na našem kanálu YouTube zde.

Nedostatkem klauzule Lower &Upper bound příkazu FORALL je, že ji nelze použít s řídkou kolekcí. Tento nedostatek lze snadno překonat pomocí možností jako „Indexy-of “ nebo „Hodnoty “ vázaná klauzule. Tento tutoriál je celý o předchozí možnosti.

INDICES-OF Vázaná klauzule

Podobně jako klauzule s dolní a horní hranicí klauzule INDICES-OF nám pomáhá při hromadném zpracování dat tím, že nám umožňuje iterovat kolekci. Jediný rozdíl je v tom, že pomocí klauzule INDICES OF můžeme iterovat hustou i řídkou kolekci. Zatímco dolní a horní vázaná klauzule funguje pouze s hustou sbírkou.

Syntaxe INDICES OF vázané klauzule

FORALL index IN INDICES OF collection_variable
[SAVE EXCEPTION]
DML statements; 

Kde:

FORALL je vyhrazené klíčové slovo databáze Oracle, za nímž následuje index. Tento index je implicitně definovaný čítač smyček, který je deklarován PL/SQL enginem. Poté musíte napsat další klíčové slovo, které je IN. Za klíčovým slovem IN následuje naše vázaná klauzule, která je INDICES OF.

Hned po napsání vyhrazené fráze ‚INDICES OF‘ musíme specifikovat proměnnou kolekce té kolekce, jejíž data chceme použít. Již víme, že jsme na kolekci v programu odkazovali prostřednictvím její proměnné kolekce. Poté máme možnost SAVE EXCEPTION, toto je volitelná volba. Pak máme příkaz DML, může to být jakýkoli příkaz DML nebo příkaz MERGE.

Ujistěte se, že příkaz DML nebo příkaz MERGE, který používáte s FORALL, musí odkazovat na kolekci. Také příkaz FORALL může zpracovat pouze jeden příkaz DML nebo MERGE najednou.

Příklad INDICES OF vázané klauzule

Zde uvidíme ukázku vázané klauzule INDICES OF s příkazem FORALL. Zde načteme data z již inicializované řídce vnořené tabulky a uložíme je do tabulky.

Jak jsme se dozvěděli v předchozím tutoriálu, příkaz FORALL bere data z kolekce a ukládá je do tabulky. Nejprve tedy vytvoříme tabulku.

SET SERVEROUTPUT ON;
CREATE TABLE tut_78(
    mul_tab NUMBER(5)
);

Aby byla ukázka snadná, vytvořili jsme velmi jednoduchou tabulku s názvem tut_78. Tato tabulka má pouze jeden sloupec mul_tab typu NUMBER.

DECLARE
    TYPE my_nested_table IS TABLE OF number;
    var_nt my_nested_table := my_nested_table (9,18,27,36,45,54,63,72,81,90);
    --Another variable for holding total number of record stored into the table 
    tot_rec NUMBER;
BEGIN
    var_nt.DELETE(3, 6);
    
    FORALL idx IN INDICES OF var_nt
        INSERT INTO tut_78 (mul_tab) VALUES (var_nt(idx));
        
    SELECT COUNT (*) INTO tot_rec FROM tut_78;
    DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec);
END;
/

Podrobné vysvětlení výše uvedeného kódu najdete ve videonávodu. Ale přesto zde máme také rychlé vysvětlení.

Část deklarace výše uvedeného bloku PL/SQL

Zde v této sekci jsme nejprve vytvořili vnořenou tabulku s názvem ‘my_nested_table '. Obsahuje data NUMBER datového typu. Poté jsme deklarovali jeho proměnnou kolekce ‘var_nt '. Pomocí něj jsme inicializovali prvních 10 indexů uložením 10 číselných prvků do naší kolekce.

Kromě Nested Table a její proměnné kolekce jsme také deklarovali další proměnnou ‘tot_rec ' datového typu čísla. Tato proměnná bude použita pro uchování celkového počtu dat, která budou uložena do tabulky.

Sekce provádění

Pokud se podíváte na první prohlášení v sekci provádění. Zjistíte, že pomocí metody shromažďování DELETE jsem vymazal data z indexu 3 do indexu 6. To znamená, že index naší kolekce se nyní nenaplňuje sekvenčně. To mění povahu naší kolekce z DENSE na SPARSE.

Hned po volání metody kolekce DELETE máme svůj příkaz FORALL s vázanou klauzulí INDICES OF. Pomocí tohoto příkazu vkládáme do kolekce ‚my_nested_table‘ do tabulky tut_78.

Pak máme příkaz SELECT-INTO. Tento příkaz vrací celkový počet řádků vložených do tabulky tut_78 a ukládá tuto hodnotu do proměnné tot_rec. Poté pomocí příkazu DBMS_OUTPUT zobrazíme zpět hodnotu uloženou v proměnné tot_rec s formátovaným řetězcem uživateli.

Důrazně doporučuji, abyste se podívali na tento tutoriál na mém kanálu YouTube, kde najdete podrobné vysvětlení výše diskutovaného kódu. Nezapomeňte se také přihlásit k odběru kanálu pro další zajímavé návody.

Díky tomu je PL/SQL tutoriál o tom, jak provést hromadné zpracování dat pomocí příkazu FORALL s vázanou klauzulí INDICES OF. Doufám, že se vám čtení líbilo, pokud ano, sdílejte tento blog na svých sociálních sítích. Krásný den!


  1. Importujte soubor CSV přímo do MySQL

  2. Jaký je dobrý způsob, jak oříznout všechny mezery z řetězce v T-SQL bez UDF a bez CLR?

  3. Je Intel odsouzen k zániku v prostoru CPU serveru?

  4. SQL ORDER BY:5 Co dělat a co nedělat pro třídění dat jako profesionál