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 (НОМЕР)
- 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 (номер сотрудника), YYY (имя сотрудника), 15000 (зарплата) и 1000 (номер менеджера).
- Code строка 12: Завершение транзакции вставки.
- Code строка 13: Заполнение переменной 'guru99_emp_rec' на уровне строки из запроса SELECT для сотрудника с номером 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 Предлагаются два типа привязанных записей, которые автоматически копируют свою структуру. Использование этих типов позволяет избежать повторного объявления столбцов и обеспечивает соответствие записи таблице или курсору, на котором она основана.
| Тип записи | Объявлено с | Структура возникает из |
|---|---|---|
| Запись на основе таблицы | table_name%ROWTYPE | Все столбцы таблицы |
| Запись, основанная на курсоре | cursor_name%ROWTYPE | Список выбора курсора |
| Запись, определяемая программистом | ТИП… ЭТО ЗАПИСЬ | Столбцы, которые вы перечисляете вручную. |
Запись с префиксом %ROWTYPE — наиболее безопасный выбор, если форма записи должна соответствовать таблице или... курсор, потому что изменение столбца автоматически обнаруживается при следующей компиляции.




