Изявление 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 страница.
Благодаря и приятен ден.