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;

В синтаксисе мы создаем тип записи с именем «имя_типа» только внутри подпрограммы.

В обоих методах объявления способ определения столбца и типа данных аналогичен.

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

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

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, зарплата и менеджер типа данных 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

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