Ако планирате да използвате повторно вложената таблица, която искате да създадете, тогава най-добрият избор за вас е да направите това като обект на база данни. Можете да ги съхранявате във вашата база данни за постоянно и да ги използвате, когато пожелаете.
Освен да създавате PL/SQL колекция тип вложена таблица в PL/SQL блок, можете също да ги създадете като обект на база данни и да съхранявате постоянно. Също така можете да ги използвате повторно, когато пожелаете. Вложената таблица, създадена като обект на база данни, може да бъде базирана или на примитивния тип данни, или на потребителски дефиниран тип данни. В този урок ще се съсредоточим върху първото и ще оставим второто за следващия урок.
Как да създадете колекция от тип вложена таблица въз основа на примитивен тип данни
Под примитивен тип данни имаме предвид типовете данни, които са предварително дефинирани от езика и са наименувани от запазена ключова дума. Можете да се обърнете към този документ на Oracle, за да прочетете повече за PL/SQL типовете данни.
Следващите таблици нямат ограничение, индекс или каквото и да било, проектирано върху тях и са създадени само за демонстриране как да създадете вложена таблица като обект на база данни.
Стъпка 1:Включете изхода на сървъра
SET SERVEROUTPUT ON;
Стъпка 2:Създайте колекция от типове вложени таблици
CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10); /
Горният оператор при успешно изпълнение ще създаде вложена таблица с име „my_nested_table“, която ще се базира на примитивен тип данни VARCHAR2.
Стъпка 3:Как да използвате вложена таблица?
Типът колекция, който създадохме по-горе, може да се използва за определяне на типа на колона на таблица.
CREATE TABLE my_subject( sub_id NUMBER, sub_name VARCHAR2 (20), sub_schedule_day my_nested_table ) NESTED TABLE sub_schedule_day STORE AS nested_tab_space; /
Горната таблица е нормална таблица, с изключение на това, че нейните 3 колони са от тип вложена таблица, която може да съдържа множество стойности. За да дефинирате колона от таблица като тип вложена таблица, трябва да кажете на компилатора името на колоната и таблицата за съхранение. Можете да направите това, като използвате клауза NESTED ABLE и STORE AS, както направихме тук в ред номер 5. Използвайки клауза NESTED TABLE ние указваме името на колоната и използвайки клаузата STORE AS, указваме таблицата за съхранение за вложената таблица.
Можете да се обърнете към видеоурока, където поетапно обясних процеса на създаване на таблица по-горе.
Вмъкване на редове в таблицата
INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day) VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));
Вмъквате редове във вложената таблица по същия начин, както вмъквате в нормалната таблица. Въпреки това, за да вмъкнете данни в колоната на типа вложена таблица, първо трябва да напишете името на вложената таблица, което в нашия случай е 'my_nested_table' (вижте стъпка 2) и след това напишете данните според типа данни на вашата вложена таблица и затворете го в скоби.
Извличане на данни от таблицата
Може да се използва прост оператор SELECT DML за извличане на данните от таблицата.
SELECT * FROM my_subject;
Този прост DML израз ще ви покаже всички данни, съхранени в таблицата, която създадохме по-горе. За да видите данните от конкретен ред, можете да използвате клауза WHERE с SELECT DML
SELECT * FROM my_subject WHERE sub_id = 101;
Ако искате, можете да използвате подзаявката, за да проверите просто данните от колоната, която сте дефинирали като тип вложена таблица.
SELECT * FROM TABLE ( SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101 );
Горната заявка ще ви покаже данните за субект, който има идентификатор на обекта 101 само от колоната sub_schedule_day. В тази заявка използвахме израз TABLE, за да отворим екземпляра и да покажем данните в релационен формат.
Актуализиране на данните на таблицата
Можете или да актуализирате всички стойности на колоната, която дефинирате като вложена таблица, или можете да актуализирате единичен екземпляр на същата.
Актуализирайте всички стойности на колоната тип вложена таблица.
UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') WHERE sub_id = 101; /
Горната заявка ще актуализира всички стойности на sub_schedule_day от „Mon“, „Fri“ до „Tue“ и „Sat“. Сега да предположим, че искате да актуализирате само един екземпляр на тази колона, като замените „Sat“ с „Thu“. Как ще направите това?
Актуализиране на единичен екземпляр на вложена таблица
За да актуализирате единичен екземпляр на колона тип вложена таблица, можете отново да се възползвате от израза TABLE.
UPDATE TABLE (SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101) A SET A.COLUMN_VALUE = 'Thur' WHERE A.COLUMN_VALUE = 'Sat';
Горната заявка ще актуализира стойността от „Sat“ на „Thur“ в таблицата.
Надяваме се, че ви е харесало четенето и сте научили нещо ново. Не забравяйте да се абонирате за нашия канал, тъй като предстоят много такива интересни уроци. Благодаря и приятен ден!