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

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

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.


  1. Chyba MySQL 2006:server mysql zmizel

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

  3. Vyhledávání ve výrazových indexech

  4. Nejúčinnější způsob, jak získat počet řádků tabulky