Oracle Тип записів PL/SQL із прикладами
⚡ Розумний підсумок
Тип запису PL/SQL – це складний тип даних, який групує кілька стовпців, кожен з яких має власну назву та тип даних, в один новий тип. Запис може бути визначений на рівні бази даних як збережений об'єкт або всередині підпрограми, а його поля доступні за допомогою оператора крапки.

Що таке тип запису?
Тип запису – це складний тип даних, який дозволяє програмісту створювати новий тип даних із потрібною структурою стовпців. Його основні характеристики:
- Він групує один або декілька стовпців для формування нового типу даних.
- Кожен із цих стовпців має свою власну назву та тип даних.
- Тип запису може приймати дані як один запис, що складається з багатьох стовпців, або як значення для одного конкретного стовпця запису.
- Тип запису – це просто новий тип даних. Після створення він зберігається як новий тип даних і може бути використаний для оголошення змінної в програмах.
- Він використовує ключове слово "ТИП" щоб вказати компілятору, що створюється новий тип даних.
- Його можна створити на рівень бази даних, зберігається як об'єкт бази даних та використовується в базі даних або на рівень підпрограми, видимий лише всередині підпрограми.
- Тип запису на рівні бази даних також може бути оголошений для стовпців таблиці, щоб один стовпець міг містити складні дані.
- Доступ до даних здійснюється шляхом звернення до назви змінної, потім до оператора крапки (.), а потім до назви стовпця, наприклад ' . '.
Синтаксис оголошення типу запису
Синтаксис для оголошення на рівні бази даних:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
У першому синтаксисі ключове слово «CREATE TYPE» вказує компілятору створити тип запису з назвою «type_name_db» із зазначеними стовпцями як об’єкт бази даних. Це задається як окремий оператор, а не всередині будь-якого блоку.
Синтаксис для оголошення на рівні підпрограми:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
У цьому синтаксисі ми створюємо тип запису з назвою «type_name» лише всередині підпрограми. В обох методах спосіб визначення стовпця та типу даних схожий.
Приклад 1: Тип запису як об'єкт бази даних
У цій програмі ми бачимо, як створити тип запису як об'єкт бази даних. Ми створюємо тип запису 'emp_det' з чотирма стовпцями. Стовпці та їхні типи даних:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- МЕНЕДЖЕР (НОМЕР)
- ЗАРПЛАТА (ЧИСЛО)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
вихід:
Type created
Code Пояснення
- Наведений вище код створює тип emp_det як об'єкт бази даних.
- Він має 4 стовпці: emp_no, emp_name, manager та salary, як визначено.
- Тепер «emp_det» схожий на будь-який інший тип даних (як NUMBER або VARCHAR2) і видима по всій базі даних. Отже, її можна використовувати будь-де в базі даних для оголошення змінної цього типу.
Приклад 2: Рівень підпрограми, доступ на рівні стовпців
У цьому прикладі ми бачимо, як створити тип запису на рівні підпрограми та як заповнювати та отримувати значення з нього за стовпцем. Ми створюємо тип запису 'emp_det' на рівні підпрограми та використовуємо його для заповнення та відображення даних.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:= 'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:= 10000; dbms_output.put_line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
вихід:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Пояснення
- Code рядки 2-8: Тип запису 'emp_det' оголошується зі стовпцями emp_no, emp_name, manager та salary типу даних NUMBER, VARCHAR2, NUMBER та NUMBER.
- Code рядок 9: Змінна guru99_emp_rec оголошена як тип даних 'emp_det'. Це змінна може містити значення, яке містить усі чотири поля.
- Code рядок 11: Заповнення поля 'emp_no' 'guru99_emp_rec' значенням 1001.
- Code рядок 12: Заповнення поля 'emp_name' значенням XXX.
- Code рядок 13: Заповнення поля «менеджер» значенням 1000.
- Code рядок 14: Заповнення поля «зарплата» значенням 10000.
- Code рядки 15-19: Відображення значення 'guru99_emp_rec' у виводі.
Приклад 3: Рівень підпрограми, доступ на рівні рядків
У цьому прикладі ми бачимо, як створити тип запису на рівні підпрограми та заповнити його на рівні рядка. Ми створюємо тип запису 'emp_det' на рівні підпрограми та використовуємо його для заповнення та відображення даних.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line ('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Code Пояснення
- Code рядки 2-8: Тип запису 'emp_det' оголошується зі стовпцями emp_no, emp_name, manager та salary типу даних NUMBER, VARCHAR2, NUMBER та NUMBER.
- Code рядок 9: Змінна guru99_emp_rec оголошена як тип даних 'emp_det' і може містити всі чотири поля.
- Code рядок 11: Заповнення таблиці emp значеннями 1002 як emp_no, YYY як emp_name, 15000 як зарплата та 1000 як номер менеджера.
- Code рядок 12: Здійснення транзакції вставки.
- Code рядок 13: Заповнення змінної 'guru99_emp_rec' на рівні рядка з запиту на вибірку для співробітника з номером 1002.
- Code рядки 15-19: Відображення значення 'guru99_emp_rec' у виводі.
вихід:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Примітка: До типу запису можна отримати доступ лише на рівні стовпця під час перенаправлення його значення в будь-який режим виводу. Зверніть увагу, що в цьому прикладі порядок списку SELECT не відповідає порядку полів запису, тому значення зарплати та менеджера відображаються у виводі місцями.
Типи записів PL/SQL
Окрім запису, визначеного програмістом, показаного вище, Oracle пропонує два типи прив'язаних записів, які автоматично копіюють свою структуру. Їх використання дозволяє уникнути повторного оголошення стовпців та узгоджує запис із таблицею або курсором, на яких він базується.
| Тип запису | Заявлено з | Структура походить від |
|---|---|---|
| Запис на основі таблиці | назва_таблиці%ROWTYPE | Усі стовпці таблиці |
| Запис на основі курсора | cursor_name%ROWTYPE | Список вибору курсора |
| Запис, визначений програмістом | ТИП … Є ЗАПИСОМ | Стовпці, які ви перераховуєте вручну |
Запис %ROWTYPE є найбезпечнішим вибором, коли фігура має відповідати таблиці або курсор, оскільки зміна стовпця автоматично підхоплюється під час наступної компіляції.




