Oracle
 sql >> база данни >  >> RDS >> Oracle

Изявление FORALL с клауза VALUES-OF Bound в базата данни на Oracle

Досега се научихме как да използваме израза FORALL с плътна колекция, използваща клауза за долна и горна граница, и рядка колекция, използваща клауза INDICES OF bound. Ами ако искаме да използваме оператор FORALL само с избрани елементи от колекцията? можем ли да направим това? Да, можем лесно да направим това с помощта на оператор FORALL с третата и последна обвързана клауза, която е „VALUES-OF“.

Какво е обвързана клауза „Стойности на“?

Инструкцията FORALL е свързана с обвързване на елементите на колекцията с един DML израз по оптимизиран начин. Използвайки обвързаната клауза „Стойности на“ на оператора FORALL, можем да свържем избраните елементи от колекцията с оператора DML.

Какъв е синтаксисът на обвързаната клауза „Стойности на“?

Преди да разберем как работят стойностите на обвързаната клауза, нека да разгледаме нейния синтаксис и да научим какъв е синтактично правилният начин за използване на клауза „Стойности на“ с израза FORALL в Oracle Database.

FORALL idx IN VALUES OF indexing-collection
[Save exception]
DML/MERGE statement;

Информация:
Винаги помнете, че името на клаузата е VALUES-OF, а не VALUE-OF. Записването на VALUE-OF ще доведе до грешка, която може да прекрати програмата ви.
ЦЕННОСТИ НА десния
СТОЙНОСТ НА грешно

Как работи клаузата Values-of bound?

Клаузата за обвързани стойности ще изисква две колекции. Първата колекция ще бъде „Изходна колекция“ . Ще извършваме DML операции като вмъкване, изтриване и актуализиране на данните от тази колекция с помощта на оператора FORALL.

Втората колекция ще бъде „Колекцията за индексиране ’, което ще посочи индексния номер на избраните елементи от първата колекция. Тези избрани елементи ще бъдат онези елементи, над които искате да извършите DML операциите.

Клаузата As Values-of bound указва, че стойността на индекса на цикъла („idx“ в горния синтаксис) на променливата FORALL се основава на стойностите на елемента в друга колекция. Затова ние посочихме тази друга колекция като индексираща колекция в горния синтаксис.

И така, какво представлява тази колекция за индексиране?

Колекцията за индексиране е група от индекси, през които операторът FORALL може да премине. Тази колекция може да бъде гъста колекция, както и рядка колекция. Също така индексните номера, съхранени в колекцията, не трябва да са уникални и могат да бъдат изброени в произволен ред.

Има ли ограничения с клауза Values-of, за които трябва да знаем?

Да, има няколко неща, които трябва да знаете, преди да работите с клаузата за стойности на обвързани в Oracle Database. Тези ограничения са –

  • Колекцията за индексиране трябва да бъде ВГЛАДЕНА ТАБЛИЦА или АСОЦИАТИВЕН МАССИВ.
  • Ако колекцията за индексиране е асоциативен масив, тогава тя трябва да бъде индексирана от PLS_INTEGER или BINARY_INTEGER.
  • Елементите на колекцията за индексиране трябва да са PLS_INTEGER или BINARY_INTEGER.

Пример за клауза Values-of bound с израз FORALL в Oracle Database:

Стъпка 1:Създайте таблица

CREATE TABLE tut_79 (
    selected_data     NUMBER(5)
);

Стъпка 2:Напишете PL/SQL блок, демонстриращ как да използвате клауза Values-of с оператор FORALL в Oracle Database.

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;
/

Можете да гледате подробното обяснение на този код във видеоурока. Там обясних подробно всеки един ред от този PL/SQL блок.

Това е урокът как да използвате клауза Values-of bound с израза FORALL в Oracle Database. Надявам се да го намерите за полезно. Моля, споделете този блог с приятелите си в техните социални медии. Абонирайте се също за моя канал в YouTube за по-информативни и интересни уроци.

Благодаря и приятен ден.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направя топ 1 в Oracle?

  2. Топ n процента горни n%

  3. java.lang.ClassCastException:oracle.sql.TIMESTAMP не може да бъде прехвърлен към java.sql.Timestamp

  4. Как да свържете база данни на Oracle от PHP

  5. Как да създадете вложена таблица като обект на база данни в Oracle