Oracle Тип записів PL/SQL із прикладами
Що таке тип запису?
Тип запису — це складний тип даних, який дозволяє програмісту створювати новий тип даних із потрібною структурою стовпців.
- Він групує один або кілька стовпців, щоб сформувати новий тип даних
- Ці стовпці матимуть власну назву та тип даних
- Тип запису може приймати дані
- Як один запис, який складається з багатьох стовпців АБО
- Він може приймати значення для одного конкретного стовпця запису
- Тип запису просто означає новий тип даних. Щойно тип запису буде створено, він буде збережений як новий тип даних у базі даних, і той самий тип буде використовуватися для оголошення змінної в програмах.
- Він використовуватиме ключове слово "ТИП" щоб вказати компілятору, що він створює новий тип даних.
- Його можна створити за адресою "рівень бази даних» які можна зберігати як об’єкти бази даних, використовувати в усій базі даних або їх можна створити в “рівні підпрограми», який видно лише всередині підпрограм.
- Тип запису рівня бази даних також можна оголосити для стовпців таблиці, щоб один стовпець міг містити складні дані.
- Доступ до даних у цих типах даних можна отримати, посилаючись на їх ім’я_змінної, за яким іде оператор крапки (.), за яким слідує назва_стовпця, тобто ' . '
Синтаксис для оголошення на рівні бази даних:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
У першому синтаксисі ми бачимо ключове слово «CREATE TYPE», яке вказує компілятору створити тип запису під назвою «type_name_db» із вказаним стовпцем як об’єкт бази даних.
Це надається як окремий оператор, а не всередині будь-якого блоку.
Синтаксис для оголошення на рівні підпрограми:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
У синтаксисі ми створюємо тип запису під назвою “type_name” лише всередині підпрограми.
В обох методах оголошення спосіб визначення стовпця та типу даних подібний.
Приклад 1: Тип RECORD як об’єкт бази даних
У цій програмі ми побачимо, як створити «Тип запису» як об’єкт бази даних. Ми збираємося створити запис типу "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
Пояснення коду:
- Наведений вище код створить тип emp_det як об’єкт бази даних.
- Він матиме 4 стовпці emp_no, emp_name, менеджер і зарплату, як визначено.
- Тепер 'emp_det' схожий на інший тип даних (наприклад, NUMBER, VARCHAR@ тощо) і це видно у всій базі даних. Отже, це можна використовувати у всій базі даних для оголошення змінної цього типу.
вихід:
Створено тип "emp_det" як тип запису на рівні бази даних.
Приклад 2: Тип запису на рівні підпрограми – доступ на рівні стовпця
У цьому прикладі ми побачимо, як створити тип запису на рівні підпрограми та як заповнити та отримати значення з нього на рівні стовпця.
Ми збираємося створити 'emp_det' record_type на рівні підпрограми, і ми будемо використовувати те саме для заповнення та відображення даних з нього.
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
Пояснення коду:
- Рядок коду 2-8: Тип запису «emp_det» оголошено зі стовпцями emp_no, emp_name, salary та менеджером типу даних NUMBER, VARCHAR2, NUMBER, NUMBER.
- Рядок коду 9: змінна guru99_emp_rec оголошена як тип даних 'emp_det'. Тепер це змінна може містити значення, яке містить усі 4 вищезазначені поля/стовпці.
- Рядок коду 11: Заповнення поля 'emp_no' 'guru99_emp_rec' значенням 1001.
- Рядок коду 12: Заповнення поля 'emp_name' 'guru99_emp_rec' значенням XXX.
- Рядок коду 13: Заповнення поля «менеджер» «guru99_emp_rec» значенням 1000.
- Рядок коду 14: Заповнення поля «salary» у «guru99_emp_rec» значенням 10000.
- Рядок коду 15-19: Відображення значення 'guru99_emp_rec' у вихідних даних.
Приклад 3: тип запису на рівні підпрограми – доступ на рівні рядка
У цьому прикладі ми побачимо, як створити тип запису на рівні підпрограми та як заповнити його на рівні рядка. Ми збираємося створити 'emp_det' record_type на рівні підпрограми, і ми будемо використовувати те саме для заповнення та відображення даних з нього.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 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; /
Пояснення коду:
- Рядок коду 2-8: Тип запису «emp_det» оголошено зі стовпцями emp_no, emp_name, salary та менеджером типу даних NUMBER, VARCHAR2, NUMBER, NUMBER.
- Рядок коду 9: змінна guru99_emp_rec оголошена як тип даних 'emp_det'. Тепер ця змінна може містити значення, яке містить усі 4 вищезгадані поля/стовпці.
- Рядок коду 11: Заповнення таблиці emp даними 1002 як emp_no, YYY як emp_name, 15000 як зарплата та 1000 як номер керівника.
- Рядок коду 12: Здійснення зазначеної вище транзакції вставки.
- Рядок коду 13: Заповнення змінної 'guru99_emp_rec' як даних рівня рядка з запиту на вибірку для номеру працівника 1002.
- Рядок коду 15-19: Відображення значення 'guru99_emp_rec' у вихідних даних.
вихід:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Примітка: Доступ до типу запису можна отримати лише на рівні стовпця, перенаправляючи його значення в будь-який режим виведення.