Oracle Тип записів PL/SQL із прикладами

⚡ Розумний підсумок

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

  • 🧱 Визначення: Тип запису групує один або декілька стовпців в один новий тип даних.
  • 🔑 Ключове слово: Ключове слово TYPE повідомляє компілятору про створення нового типу даних.
  • 🏛️ Два рівні: Запис рівня бази даних – це збережений об'єкт; запис рівня підпрограми видимий лише всередині цієї підпрограми.
  • 🔗 Доступ до поля: Поля доступні як record_variable.column_name за допомогою оператора крапки.
  • 📥 На рівні стовпця: Значення можна присвоювати лише одному полю за раз.
  • 📦 Рівень рядка: Оператор SELECT INTO може заповнити весь запис з рядка таблиці.
  • 🧩 Види записів: Таблиці %ROWTYPE, курсори %ROWTYPE та записи, визначені програмістом.

Oracle Тип записів 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 є найбезпечнішим вибором, коли фігура має відповідати таблиці або курсор, оскільки зміна стовпця автоматично підхоплюється під час наступної компіляції.

Поширені запитання

Запис групує різні стовпці, можливо, різних типів, в одну рядкоподібну структуру. Колекція містить багато елементів одного типу, індексованих нижнім індексом. Вони часто об'єднуються, утворюючи колекцію записів.

%ROWTYPE оголошує запис, поля якого автоматично збігаються з таблицею або курсором. Використовуйте його, коли запис має відображати це джерело, щоб зміна стовпця відображалася без редагування оголошення.

Так, якщо обидва записи одного типу. SELECT INTO також може заповнити весь запис з рядка таблиці, за умови, що порядок списку вибору відповідає порядку полів запису.

Так. Штучний інтелект може прочитати визначення таблиці та створити відповідний блок TYPE … IS RECORD або рекомендувати %ROWTYPE, де бажано активне посилання на таблицю. Перевірте типи даних перед використанням.

Запис рівня бази даних створюється за допомогою CREATE TYPE та зберігається як об'єкт, видимий у базі даних. Запис рівня підпрограми оголошується всередині блоку та існує лише в межах цієї підпрограми.

Підсумуйте цей пост за допомогою: