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

Що таке тип запису?

Тип запису — це складний тип даних, який дозволяє програмісту створювати новий тип даних із потрібною структурою стовпців.

  • Він групує один або кілька стовпців, щоб сформувати новий тип даних
  • Ці стовпці матимуть власну назву та тип даних
  • Тип запису може приймати дані
    • Як один запис, який складається з багатьох стовпців АБО
    • Він може приймати значення для одного конкретного стовпця запису
  • Тип запису просто означає новий тип даних. Щойно тип запису буде створено, він буде збережений як новий тип даних у базі даних, і той самий тип буде використовуватися для оголошення змінної в програмах.
  • Він використовуватиме ключове слово "ТИП" щоб вказати компілятору, що він створює новий тип даних.
  • Його можна створити за адресою "рівень бази даних» які можна зберігати як об’єкти бази даних, використовувати в усій базі даних або їх можна створити в “рівні підпрограми», який видно лише всередині підпрограм.
  • Тип запису рівня бази даних також можна оголосити для стовпців таблиці, щоб один стовпець міг містити складні дані.
  • Доступ до даних у цих типах даних можна отримати, посилаючись на їх ім’я_змінної, за яким іде оператор крапки (.), за яким слідує назва_стовпця, тобто ' . '

Синтаксис для оголошення на рівні бази даних:

Oracle Тип записів PL/SQL

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

У першому синтаксисі ми бачимо ключове слово «CREATE TYPE», яке вказує компілятору створити тип запису під назвою «type_name_db» із вказаним стовпцем як об’єкт бази даних.

Це надається як окремий оператор, а не всередині будь-якого блоку.

Синтаксис для оголошення на рівні підпрограми:

Oracle Тип записів PL/SQL

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 на рівні підпрограми, і ми будемо використовувати те саме для заповнення та відображення даних з нього.

Oracle Тип записів PL/SQL

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 на рівні підпрограми, і ми будемо використовувати те саме для заповнення та відображення даних з нього.

Oracle Тип записів PL/SQL

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

Примітка: Доступ до типу запису можна отримати лише на рівні стовпця, перенаправляючи його значення в будь-який режим виведення.