Хей момчета! Днес ще научим как да създаваме вложена колекция от типове таблици, използвайки потребителски дефиниран тип данни. Надяваме се, че сте прекарали страхотно с последния урок, където научихме процеса на създаване на вложена таблица с примитивен тип данни. Силно ви препоръчвам да разгледате този урок, тъй като ще използваме концепциите от там.
Подобно на примитивния тип данни, вложена таблица може да бъде създадена с помощта на потребителски дефинирани типове данни. За демонстрация ще използваме потребителски Oracle Object. Обектите не изискват въведение, ако някога сте изучавали ООП концепции. В Oracle, подобно на други езици за програмиране, обектният тип е вид тип данни, който работи по същия начин като други типове данни като Char, Varchar2, Number и т.н., но с по-голяма гъвкавост.
За да създадем обект на Oracle, ние използваме нашето старо и надеждно изявление „Create Type“.
CREATE OR REPLACE TYPE object_type AS OBJECT ( obj_id NUMBER, obj_name VARCHAR2(10) ); /
Горното изявление ще създаде обект на оракул с име „тип обект“ с два атрибута obj_id и obj_name при успешно изпълнение. След това този тип данни може да се използва за създаване на вложена таблица.
CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type; /
Мисля, че ако сте проверили последния урок, тогава ще намерите това по-горе твърдение за много познато, с изключение на типа елемент, който е примитивен тип данни там. Тук използваме потребителски дефиниран тип данни, който е обект на Oracle.
Гореното твърдение е обяснено подробно в последния урок, който можете да проверите тук.
Какво означава създаването на вложена таблица с помощта на Oracle Object?
Всеки път, когато създавате вложена таблица, използвайки обект на Oracle, тогава атрибутите на обекта стават колоните на тази таблица. Например, в нашия случай създадохме вложена таблица „My_NT“, използвайки дефинирания от потребителя тип данни, който е обект на Oracle „Object_Type“, който има два атрибута obj_id и obj_name. Тези два атрибута на обекта ще действат като колони на таблицата. Следната снимка ще ви помогне да разберете това по-ясно.
Сега, когато създадохме вложената таблица, използвайки потребителски дефиниран тип данни, е време да я приложим към работа.
CREATE TABLE Base_Table( tab_id NUMBER, tab_ele My_NT )NESTED TABLE tab_ele STORE AS stor_tab_1; /
Горната таблица с име „Base_Table“ е проста, която има 2 колони „tab_id“ и „tab_ele“. Първата колона е с тип число данни, докато втората колона е с тип вложена таблица. Това означава, че втората колона съдържа таблица в нея и тази таблица е нашата вложена таблица „My_Nt“
Въпреки че тази „Base_Table“ е проста таблица, но една от колоните й съдържа вложена таблица в нея, което поражда някои въпроси като:
Как да вмъкна данни в таблицата? Как да актуализирам данните на таблицата? Или как да извлека данните от таблицата? Нека се опитаме да намерим отговорите на всички тези въпроси един по един.
Как да вмъкна данни във вложената таблица?
Да, съгласен съм, че вмъкването на данни в таблица, която има колона от тип вложена таблица, може да бъде трудно, но по някакъв начин трябва да намерим начина да го направим. Тъй като таблица без данни не е от полза за нас. нали така? Нека видим как можем да направим това.
INSERT INTO base_table (tab_id, tab_ele) VALUES (801, -- value for 1st colum My_NT (object_type (1,'Superman') -- values for 2nd column ) );
Както можете да видите в този оператор INSERT всичко е същото като обикновен DML за вмъкване с изключение на ред номер 3, където вмъкваме данни във втората колона на таблицата. За да вмъкнете данни в колоната, която е от тип вложена таблица, първо трябва да напишете името на вашата вложена таблица, което в този случай е 'My_NT', след което трябва да напишете името на вашия Oracle обект, което тук е 'Object_Type' последвано от стойностите, които искате да вмъкнете във вашата таблица. Не забравяйте да съпоставите скобите за името на таблицата и името на обекта, в противен случай ще получите грешка.
Как да актуализирам стойностите на вложената таблица?
UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801;
Горният DML израз ще актуализира съответно стойностите при успешно изпълнение.
Как да извлека данни от вложената таблица?
Можете просто да изпълните оператора Select на вашата таблица, за да получите данните.
Select tab_id, tab_ele FROM base_table;
Следната снимка ще ви покаже резултата, върнат от тази таблица.
Както можете да видите, този оператор SELECT ще ви покаже данните от колоните, които са от първичен тип данни, но само името на вашата вложена таблица заедно с обекта на Oracle от колоната, която дефинирате като тип вложена таблица. Можете лесно да преодолеете този проблем, като използвате TABLE израз като този.
SELECT * FROM TABLE( SELECT tab_ele FROM Base_Table WHERE tab_id = 801 )
Успешното изпълнение на горната заявка ще ви покаже данните от втората колона на вашата таблица „Базова_таблица“ в релационен формат.
Това е всичко за този урок, надявам се, че ви е харесало и сте научили нещо ново. Не забравяйте да се абонирате и да се регистрирате. Приятен ден!