Изявление FORALL с клауза за долна и горна граница
В предишния урок научихме, че има три обвързани клаузи, които можем да използваме с израза FORALL, за да оптимизираме DML заявките. От тези три обвързани клаузи ще разгледаме първата, т.е. долна и горна граница в този урок.
Какво представлява клаузата за долна и горна граница на оператора FORALL?
Както подсказва името, с клаузата за долна и горна граница трябва да посочим валидния диапазон от последователни индексни номера на колекцията.
Има ли някакво правило за използване на клауза за долна и горна граница с израза FORALL?
Клаузата за долна и горна граница може да се използва само когато колекцията, която препращате във вашето DML изявление, е Плътна . Ако референтната колекция е рядка, тогава може да искате да използвате други обвързани клаузи, които ще обсъдим в бъдещите уроци.
За да изпълните програмата си успешно, трябва да се уверите, че сте следвали всички правила на оператора FORALL заедно с гореспоменатото правило на клаузата за долна и горна граница. Научете повече за изявлението FORALL тук.
Нека направим пример за оператор FORALL с клауза за долна и горна граница в Oracle Database.
Но преди да преминем към примера, трябва да разберем едно нещо; Изразът FORALL изпълнява същата работа като клаузата за групово събиране, но по обратен начин. Например с групово събиране извличахме данните от таблиците и ги съхранявахме в колекцията, но сега с оператор FORALL ще извличаме данните от колекцията и ще ги съхраняваме в таблицата.
В тази демонстрация ще направим три неща, за да разберем концепцията на оператора FORALL с клауза за долна и горна граница. Тези три неща са:
-
Създайте таблица.
Първо ще създадем таблица. Ще използваме тази таблица, за да изхвърлим данните, които ще извлечем от колекцията.
-
Създайте и попълнете колекцията.
Тази стъпка е по избор, ако вече имате колекция с някои данни. Ако не, последвайте ме. За демонстрацията ще създам и попълня колекция.
-
Напишете изявлението FORALL.
След като подготвите вашата маса и колекция, напишете изявлението FORALL. За демонстрацията ще напиша оператор FORALL, който ще извлече данните от колекцията и ще ги съхрани в таблицата. Това също ще бъде демонстрация на оператор FORALL с INSERT DML.
Нека направим примера на PL/SQL оператор FORALL с долна и горна граница.
SET SERVEROUTPUT ON; CREATE TABLE tut_77 ( Mul_tab NUMBER(5) );
Това ще бъде нашата таблица, която ще съдържа данните. След това ще напишем PL/SQL блока.
DECLARE -- Declare the collection TYPE My_Array IS TABLE OF NUMBER INDEX BY PLS_INTEGER; col_var My_Array; --Declare a variable for holding the total number of records of the table tot_rec NUMBER; BEGIN --Populate the collection FOR i IN 1..10 LOOP col_var (i) := 9*i; END LOOP; -- Write the FORALL statement. FORALL idx IN 1..10 INSERT INTO tut_77 (mul_tab) VALUES (col_var (idx)); --Get the total number of records from the table SELECT count (*) INTO tot_rec FROM tut_77; DBMS_OUTPUT.PUT_LINE ('Total records inserted are '||tot_rec); END; /
Обяснение на раздела за декларация
В секцията декларация от този код сме декларирали асоциативен масив с името “my_Array” заедно с неговата колекция. Също така допълнителна променлива с името tot_rec на Number datatype. Тази променлива ще съдържа общия брой записи, съхранени в нашата таблица.
В раздела за изпълнение сме направили три задачи. Първо, използвайки цикъла FOR, попълнихме нашата колекция с таблицата за умножение от 9. Второ, използвайки оператора FORALL, взехме данните от колекцията и ги съхранихме в таблицата, която създадохме. На трето място, използвайки променливата tot_rec с оператор SELECT-INTO, ние показахме обратно общия брой редове, съхранени в таблицата.
Направих и видеоклип по същата тема, където обясних този по-горе код ред по ред подробно. Предлагам ви да го проверите.
Това е урокът за PL/SQL FORALL израз с клауза Lower &Upper Bound в Oracle Database. Надявам се да сте се насладили на гледане. Моля, не забравяйте да харесате и споделите този блог с приятелите си във вашите социални медии. Можете да се свържете с мен и на моята Facebook страница.
Благодаря и приятен ден.