Doposud jsme se naučili, jak používat příkaz FORALL s hustou kolekcí pomocí vázané klauzule Lower &Upper a řídkou kolekcí pomocí vázané klauzule INDICES OF. Co když chceme použít příkaz FORALL pouze s vybranými prvky kolekce? Můžeme to udělat? Ano, můžeme to snadno udělat pomocí příkazu FORALL s třetí a poslední vázanou klauzulí, která je ‚VALUES-OF‘.
Co je to vázaná klauzule „Values-of“?
Příkaz FORALL je o spojení prvků kolekce s jediným příkazem DML optimalizovaným způsobem. Pomocí vázané klauzule „Values-of“ příkazu FORALL můžeme svázat vybrané prvky kolekce s příkazem DML.
Jaká je syntaxe vázané klauzule „Values-of“?
Než pochopíme, jak hodnoty vázané klauzule fungují, podívejme se na její syntaxi a naučte se, jaký je syntakticky správný způsob použití klauzule „Values-of“ s příkazem FORALL v databázi Oracle.
FORALL idx IN VALUES OF indexing-collection [Save exception] DML/MERGE statement;
Informace:
Vždy si pamatujte, že název klauzule je VALUES-OF nikoli VALUE-OF. Zápis VALUE-OF způsobí chybu, která by mohla ukončit váš program.
HODNOTY práva
VALUE OF špatně
Jak funguje vázaná klauzule Values-of?
Klauzule Values-of bound bude vyžadovat dvě kolekce. První sbírka bude ‚Soubor zdrojů‘ . Budeme provádět operace DML, jako je vkládání, mazání a aktualizace dat této kolekce pomocí příkazu FORALL.
Druhou sbírkou bude „Sbírka indexování ’, který určí indexové číslo vybraných prvků z první kolekce. Tyto vybrané prvky budou prvky, nad kterými chcete provádět operace DML.
Klauzule As Values-of bound určuje, že hodnota proměnné Loop Index („idx“ ve výše uvedené syntaxi) příkazu FORALL je založena na hodnotách prvku v jiné kolekci. Proto jsme tuto další kolekci ve výše uvedené syntaxi označili jako Indexing-collection.
Co je tedy tato kolekce indexování?
Kolekce indexování je skupina indexů, kterou může příkaz FORALL procházet. Tato sbírka může být hustá i řídká. Také indexová čísla uložená do kolekce nemusí být jedinečná a mohou být uvedena v libovolném pořadí.
Existují nějaká omezení s klauzulí Values-of, o kterých bychom měli vědět?
Ano, existuje několik věcí, které musíte vědět, než začnete pracovat s vázanou klauzulí hodnot v databázi Oracle. Tato omezení jsou –
- Sbírka indexování musí být NESTED TABLE nebo ASSOCIATIVNÍ POLE.
- Pokud je kolekce indexování asociativní pole, musí být indexována pomocí PLS_INTEGER nebo BINARY_INTEGER.
- Prvky kolekce indexování musí mít hodnotu PLS_INTEGER nebo BINARY_INTEGER.
Příklad vázané klauzule Values-of s příkazem FORALL v databázi Oracle:
Krok 1:Vytvořte tabulku
CREATE TABLE tut_79 ( selected_data NUMBER(5) );
Krok 2:Napište blok PL/SQL demonstrující, jak používat klauzuli Values-of s příkazem FORALL v databázi Oracle.
SET SERVEROUTPUT ON; DECLARE --Source collection TYPE My_NestedTable IS TABLE OF NUMBER; source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90); --Indexing collection TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; index_col My_Array; BEGIN --Initializing indexing collection with the index numbers. index_col (1) := 3; index_col (5) := 7; index_col (12):= 8; index_col (28):= 10; --FORALL statement FORALL idx IN VALUES OF index_col INSERT INTO tut_79 VALUES (source_col (idx)); END; /
Podrobné vysvětlení tohoto kódu si můžete prohlédnout ve video tutoriálu. Zde jsem podrobně vysvětlil každý jednotlivý řádek tohoto PL/SQL bloku.
Toto je návod, jak používat vázanou klauzuli Values-of s příkazem FORALL v databázi Oracle. Doufám, že vám to pomůže. Sdílejte prosím tento blog se svými přáteli na jejich sociálních sítích. Také se přihlaste k odběru mého kanálu YouTube pro více informativních a zajímavých výukových programů.
Děkuji a přeji hezký den.