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;
В синтаксисе мы создаем тип записи с именем «имя_типа» только внутри подпрограммы.
В обоих методах объявления способ определения столбца и типа данных аналогичен.
Пример 1: Тип RECORD как объект базы данных
В этой программе мы увидим, как создать «Тип записи» как объект базы данных. Мы собираемся создать запись типа 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
Пояснение к коду:
- Приведенный выше код создаст тип 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, зарплата и менеджер типа данных 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: Заполнение поля «зарплата» «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, зарплата и менеджер типа данных 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
Примечание: Доступ к типу записи возможен только на уровне столбца при перенаправлении его значения в любой режим вывода.