pl sql collections nested table
Вивчіть основи колекцій PL SQL, методів збору, масиву, вкладеної таблиці та асоціативного масиву за допомогою прикладів коду:
В Підпрограми PL / SQL підручник з PL / SQL серія , ми дізналися про процедури та функції, різні методи передачі параметрів, а також про те, як створювати / видаляти процедури та функції в PL / SQL.
У цій статті ми обговоримо колекції PL SQL та пов'язані з ними поняття. Ми також пояснимо концепцію змінних, вкладених таблиць та таблиць з індексом, доступних у PL / SQL.
Крім того, ми розглянемо деякі вбудовані винятки колекції та методи збирання.
Що ви дізнаєтесь:
- PL SQL колекції
- Вкладені таблиці в PL / SQL
- Асоціативний масив або таблиці за індексом
- Варіати в PL / SQL
- Висновок
PL SQL колекції
Колекція - це група елементів однорідних типів даних. Зазвичай він містить масиви, списки, набори тощо. Кожен з елементів має певний індекс, який відображає його позицію.
Колекції PL SQL мають наступні типи:
- Асоціативний масив / таблиці за індексом
- Вкладені таблиці.
- Варіанти.
PL-колекції SQL зазвичай використовуються для зберігання та обробки великих шматків даних, використовуючи ключове слово BULK COLLECT в Oracle.
Методи збору
Pl / SQL має деякі вбудовані методи колекції, які перелічені нижче.
Сл. Ні. | Ім'я | Описи |
---|---|---|
7 | далі (м) | Дає індекс, який перевищує mth-індекс. |
1 | рахувати | Вказує кількість елементів, присутніх у колекції. |
два | обмеження | Перевіряє розмір колекції. |
3 | існує (м) | Повертає true, якщо елемент mth, присутній у колекції else, повертає false. |
4 | спочатку | Дає номер початкового індексу в колекції з цілочисельним індексом. |
5 | останній | Дає номер кінцевого індексу в колекції з цілочисельним індексом. |
6 | розширити | Додає елемент NULL до кінця колекції. |
8 | попередній (м) | Дає індекс, що передує індексу m. |
9 | обрізати | Видаляє елемент із кінця колекції. |
10 | обробка (м) | Видаляє m елементів з кінця колекції. |
одинадцять | видалити | Видаляє всі елементи з колекції, встановлюючи значення 0. |
12 | видалити (м) | Видаляє mth-елемент із колекції, якщо mth-елемент NULL, тоді жодна дія не виконується. |
13 | видалити (m, k) | Видаляє елемент з mth в k-ту позицію. |
14 | подовжити (м) | Додає елемент m до кінця колекції. |
п’ятнадцять | розширити (m, k) | Додає m копій k-го елемента до кінця колекції. |
Винятки з колекції
Деякі загальні винятки з колекції такі:
- ПОМИЛКА VALUE: Цей виняток видається, якщо індекс не може бути перетворений у тип ключа або має значення NULL. Цей виняток зазвичай застосовується, якщо ключ має тип PLS_INTEGER діапазону, а індекс знаходиться поза цим діапазоном.
- ДАНИХ НЕ ЗНАЙДЕНО: Цей виняток створюється PL / SQL, якщо або оператор SELECT не отримує рядків, або програма вказує на елемент, який видаляється у вкладеній таблиці. Цей виняток також може бути використаний елементом, який неініціалізований у таблиці, що індексується.
- COLLECTION_IS_NULL: Цей виняток створюється PL / SQL, якщо за замовчуванням колекція NULL.
- SUBSCRIPT_BEYOND_COUNT: Цей виняток виникає, коли індекс перевищує загальну кількість елементів у колекції.
- ПІДПИСАТИСЯ_OUTSIDE_LIMIT: Цей виняток виникає, коли індекс перевищує пороговий діапазон.
Вкладені таблиці в PL / SQL
Вкладені таблиці схожі на таблицю бази даних з одним стовпцем або одновимірний масив, де розмір масиву динамічний. Його індекс має числовий тип. Ми можемо отримати вкладену таблицю у змінну, надавши рядкам індекс, який починається з 1. Ця функція робить її подібною за своєю суттю, як масив.
Вкладена таблиця може міститися в стовпці бази даних. Він також може використовуватися для маніпулювання SQL-операціями шляхом об'єднання таблиць. Оскільки це як динамічний масив, тому верхня межа може бути будь-якого розміру.
Вкладена таблиця може мати як щільні, так і розріджені характеристики колекції, що означає, що будь-який елемент може бути випадковим чином видалений (що робить його розрідженим) за допомогою процедури DELETE. Видалення даних спричиняє розрив в індексі, але функція NEXT допомагає здійснити ітерацію до наступних індексів. Оскільки дані зберігаються у вигляді таблиці, їх можна отримати за допомогою операторів SELECT.
Вкладену таблицю можна створити на рівні схеми або в блоці PL / SQL. Це як об’єкт бази даних, який доступний у базі даних або підпрограмі.
Відмінності між масивом та вкладеною таблицею перелічені нижче:
- Розмір вкладених таблиць можна динамічно збільшувати. Верхня межа масиву фіксована, але для вкладених таблиць вона не встановлена.
- Масив має послідовні індекси, що робить його щільним. Однак вкладена таблиця є щільною під час створення, але стає розрідженою, коли елементи між ними видаляються.
Синтаксис вкладеної таблиці:
TYPE <> IS TABLE OF <> (NOT NULL);
Ось, «Тип» є специфікатором типу. 'Елемент' - тип даних.
Реалізація коду з вкладеною таблицею:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
Результатом роботи вищезазначеного коду має бути:
Асоціативний масив або таблиці за індексом
Таблицю з індексом зазвичай називають асоціативним масивом. З точки зору структури, як таблиця з індексом, так і вкладені таблиці схожі і мають індекс для доступу до елементів.
Асоціативний масив представлений парою ключ-значення. Кожен з унікальних ключів використовується для ідентифікації значення в масиві. Тип даних ключа може бути рядком або цілим числом, визначеним під час його створення. Ключ додається до індексованої таблиці, просто призначаючи значення вперше. Щоб змінити той самий запис, ми повинні використовувати той самий ключ.
Ключ повинен бути унікальним або як первинний ключ у таблиці, або комбінуючи рядки разом, щоб отримати унікальне значення. Цей тип колекції має розмір масиву, який є динамічним і має або рідкісні, або щільні характеристики. Одна відмінність між таблицею індексування та вкладеною таблицею полягає в тому, що перша не може зберігатися в стовпці бази даних, але вкладена таблиця може зберігатися.
Асоціативні масиви забезпечують легке обслуговування індексу та створюються в блоці PL / SQL. Це як таблиця SQL, де значення отримуються за допомогою первинного ключа. Зазвичай це використовується для тимчасового зберігання даних і може використовуватися замість таблиць SQL, щоб уникнути мережевого трафіку та дискового сховища, необхідних для таблиць SQL.
Оскільки асоціативні масиви не зберігають постійних даних, їх не можна використовувати з операторами SQL, такими як SELECT та INSERT. Однак їх можна зробити нескінченними для сеансу бази даних, оголосивши їх тип даних як пакет і визначивши їх усередині тіла пакета.
Синтаксис індексної таблиці:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Ось, 'Ключ' є числовим. Це може бути як BINARY_INTEGER, так і PLS_INTEGER. Його тип даних може бути varchar, varchar2, long або string. Ключ на основі varchar слід згадувати з довжиною.
'Елемент' - тип даних.
«Розмір» - максимальна кількість елементів. Це натуральне число.
«Тип» є специфікатором типу.
Реалізація коду за допомогою таблиці індексації:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
Результатом роботи вищезазначеного коду має бути:
Варіати в PL / SQL
У Varrays зберігається фіксована кількість елементів і є як одновимірний масив. Однак кількість елементів можна змінювати під час виконання. Це послідовний набір елементів подібних типів даних. Він може зберігатися в таблиці бази даних, яку можна обробляти за допомогою операторів SQL. Але процес не такий простий і гнучкий, як у вкладеній таблиці.
Максимальний розмір Varray визначається у визначенні його типу. Він має один за іншим розташування пам'яті, що починається з 1 індексу, і адреса найнижчого місця вказує на початковий елемент, а адреса найвищого місця - на кінцевий елемент. Усі елементи Varray ідентифікуються за допомогою індексу.
Цей тип колекції має числовий індекс та має щільні характеристики. Таким чином, елементи масиву не можуть бути видалені між ними. Або слід видалити весь Вариант, або його кінець можна обрізати. Завдяки своїм щільним характеристикам, він має меншу гнучкість у використанні.
Varray може бути створений як в блоці PL / SQL, так і на рівні схеми. Він розглядається як об’єкт бази даних, до якого можна отримати доступ у базі даних або в рамках підпрограми. Варіанти використовуються частіше, коли нам відомий розмір масиву. Його слід ініціалізувати перед їх використанням, і його можна ініціалізувати за допомогою конструктора. Його значення NULL при оголошенні і повинно бути ініціалізоване перед посиланням на його елементи.
Синтаксис Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Ось,
«Тип» є специфікатором типу.
'Елемент' - тип даних.
«Розмір» - максимальна кількість елементів у масиві. Це натуральне число.
Декларування та ініціалізація змінних змінних
Після створення Varray ми можемо оголосити його способом, описаним нижче:
Синтаксис:
name type_n (:= type_n(...));
Ось,
«Ім’я» - це ім’я Varray.
„Type_n“ є типом Varray.
‘Type_n (…)’ є конструктором типу Varray. Списки аргументів згадуються розділювачем комами та типу Varray.
Ми повинні ініціалізувати змінну Varray, перш ніж використовувати її, інакше вона видає неініціалізовану помилку колекції. Ініціалізація здійснюється способом, описаним нижче.
Синтаксис:
name type_n := type_n();
Це ініціалізує змінну нульовими елементами. Щоб заповнити елементи у змінних змінних, синтаксис:
name type_n := type_n(e1, e2, ...);
Доступ до елементів масиву
Елементи можуть бути доступні за допомогою процесу, описаного нижче:
назва (м); де m - індекс елемента, який починається з 1 і закінчується максимальним підрахунком кількості елементів типу Varray. Якщо m перевищує діапазон 1 і максимальний підрахунок кількості елементів, SUBSCRIPT_BEYOND_COUNT виняток створюється PL / SQL.
Розмір Varray можна змінити за допомогою оператора ALTER.
Впровадження коду за допомогою ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Результатом роботи вищевказаного коду має бути.
Як відкрити файл XML в
Впровадження коду за допомогою Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
Результатом роботи вищезазначеного коду має бути:
Відмінності між варіантами та вкладеними таблицями
Відмінності такі:
- Поки ми працюємо над сценарієм, коли кількість елементів відома і вони розташовані послідовно, зазвичай використовуються Varrays. Зберігається в базі даних масив зберігає свої індекси та послідовність. Він завжди підтримується як єдиний об’єкт. Тоді як вкладені таблиці використовуються, коли кількість елементів не обмежена.
- Вкладена таблиця має розріджені характеристики, які дозволяють їй видаляти будь-який елемент з будь-якого положення, а не завжди з кінця. Порядок та індекс вкладеної таблиці не зберігаються, коли вона зберігається у базі даних. Елементи Varray завжди підтримуються в послідовності.
Відмінності між асоціативними масивами та вкладеними таблицями
Відмінності такі:
- Вкладені таблиці можна зберігати у стовпці бази даних, але асоціативні масиви - ні. Вкладені таблиці підтримують належні відносини даних, які постійно зберігаються.
- Асоціативні масиви добре підходять для невеликих таблиць підстановки, де колекція може бути вбудована в пам'ять кожного разу, коли пакет ініціюється або викликається процедура. Вони є хорошим вибором, коли розмір не відомий заздалегідь. Значення індексу асоціативного масиву є гнучкими, оскільки індекси цього масиву не мають послідовності або можуть бути від’ємними або рядковими замість числа.
Часті запитання та відповіді
Q # 1) Чому ми використовуємо колекції в PL / SQL?
Відповідь: Існує три типи колекцій - вкладені таблиці, асоціативні масиви та Varrays. Вкладені таблиці можуть зберігати випадкову кількість елементів. У масивах можна зберігати фіксовану кількість елементів, а асоціативні масиви дозволяють нам шукати елементи за випадковими числами та рядками.
Q # 2) Що таке вкладена таблиця в PL / SQL?
Відповідь: Вкладена таблиця має одновимірний характер, і її розмір не залишається фіксованим. До них можна отримати доступ у блоках SQL та PL / SQL. Його можна використовувати в записах, визначеннях об'єктів та таблицях.
Запитання №3) Що таке масовий збір в Oracle PL / SQL?
Відповідь: Масова колекція - це метод отримання даних, коли механізм PL / SQL повідомляє механізму SQL накопичувати кілька рядків одночасно і зберігати їх у колекції.
Q # 4) Чому масовий збір пришвидшується в Oracle?
Відповідь: Групове збирання підвищує продуктивність, скорочуючи взаємодію між механізмом PL / SQL та базою даних.
Q # 5) Що таке Varray у PL / SQL?
Відповідь: Це структура даних PL / SQL, яка використовується для зберігання однорідної колекції елементів одного типу даних у послідовності. Він в основному використовується для зберігання упорядкованого набору даних.
Q # 6) Чи можемо ми видалити елемент з Varray в Oracle?
Відповідь: Ми не можемо змінювати або видаляти елементи у Вариаті безпосередньо за допомогою операторів SQL. Нам слід вибрати з таблиці Varray, змінити його в PL / SQL, а потім змінити таблицю і зберегти в новому Varray.
Q # 7) У чому різниця між вкладеною таблицею та масивом?
Відповідь: Відмінності наведені нижче:
- Беремо Varray, коли кількість елементів відома раніше. Це обмеження неможливо у вкладених таблицях.
- У Varray елементи використовуються послідовно. Вкладена таблиця має як щільні, так і розріджені характеристики.
- Елементи завжди впорядковані у Varray. Елементи можуть бути чи не впорядковані у вкладеній таблиці.
Висновок
У цьому підручнику ми детально обговорили деякі основні концепції PL / SQL, які є важливими для розвитку знань про нього.
Ми розглянули наступні теми, перелічені нижче:
- Базове розуміння колекцій PL SQL (методи та винятки).
- Варіанти.
- Вкладені таблиці
- Таблиці індексування
<< PREV Tutorial | НАСТУПНИЙ підручник >>
Рекомендована література
- Типи даних масиву - int Array, Double array, Array of Strings тощо.
- Java Array - Як надрукувати елементи масиву в Java?
- PL SQL Підручник для початківців з прикладами Що таке PL / SQL
- Java Array - Оголошення, створення та ініціалізація масиву в Java
- Підручник з довжини масиву Java із прикладами коду
- SQL проти NoSQL Точні відмінності та знати, коли використовувати NoSQL та SQL
- Різниця між SQL Vs MySQL Vs SQL Server (з прикладами)
- Вкладений клас JUnit 5: Підручник @Nested з прикладами