Учебники

8) Тип записей Oracle PL / SQL

Что такое тип записи?

Тип записи — это сложный тип данных, который позволяет программисту создавать новый тип данных с желаемой структурой столбцов.

  • Группирует один или несколько столбцов для формирования нового типа данных.
  • Эти столбцы будут иметь свое имя и тип данных
  • Тип записи может принимать данные
    • Как одна запись, состоящая из множества столбцов ИЛИ
    • Может принимать значение для одного конкретного столбца записи
  • Тип записи просто означает новый тип данных. Как только тип записи создан, он будет сохранен как новый тип данных в базе данных, и тот же самый будет использоваться для объявления переменной в программах.
  • Он будет использовать ключевое слово «TYPE», чтобы указать компилятору, что он создает новый тип данных.
  • Он может быть создан на « уровне базы данных», который может быть сохранен как объекты базы данных, использоваться по всей базе данных, или он может быть создан на « уровнях подпрограммы» , который виден только внутри подпрограмм.
  • Тип записи уровня базы данных также может быть объявлен для столбцов таблицы, чтобы один столбец мог содержать сложные данные.
  • Доступ к данным в этом типе данных можно получить, указав их переменное_имя, за которым следует оператор точки (.), А затем столбец_имя, то есть «<record_type_variable_name>. <Column_name>»

Синтаксис для объявления на уровне базы данных:

Сложные типы данных в PL / SQL

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

В первом синтаксисе мы видим ключевое слово «CREATE TYPE», которое инструктирует компилятору создать тип записи с именем «type_name_db» с указанным столбцом в качестве объекта базы данных.

Это дается как отдельное утверждение, а не внутри какого-либо блока.

Синтаксис для объявления на уровне подпрограммы:

Сложные типы данных в PL / SQL

DECLARE
TYPE <type_name> IS RECORD
(
<columnl> <datatype>,
);
BEGIN
<execution_section>;
END;

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

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

Пример 1: Тип записи как объект базы данных

В этой программе мы увидим, как создать «Тип записи» как объект базы данных. Мы собираемся создать тип записи ’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, manager и salary, как определено.
  • Теперь emp_det похож на другой тип данных (например, NUMBER, VARCHAR @ и т. Д.) И виден во всей базе данных. Следовательно, это можно использовать во всей базе данных для объявления переменной этого типа.

Вывод:

Создан тип emp_det в качестве типа записи на уровне базы данных.

Пример 2: Тип записи на уровне подпрограммы — доступ на уровне столбца

В этом примере мы увидим, как создать тип записи на уровне подпрограммы и как заполнить и извлечь значения из нее на уровне столбца.

Мы собираемся создать тип записи emp_det на уровне подпрограммы, и мы будем использовать то же самое для заполнения и отображения данных из него.

Сложные типы данных в 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: заполнение поля ‘manager’ в ‘guru99_emp_rec’ значением 1000.
  • Строка кода 14: заполнение поля ‘salary’ в ‘guru99_emp_rec’ значением 10000.
  • Строка кода 15-19: отображение значения «guru99_emp_rec» в выходных данных.

Пример 3: Тип записи на уровне подпрограммы — доступ на уровне строк

В этом примере мы увидим, как создать тип записи на уровне подпрограммы и как заполнить его как уровень строки. Мы собираемся создать тип записи emp_det на уровне подпрограммы, и мы будем использовать то же самое для заполнения и отображения данных из него.

Сложные типы данных в 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

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