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: Попълване на полето „заплата“ на „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

Забележка: Типът запис може да бъде достъпен само на ниво колона, докато стойността му се пренасочва към произволен изходен режим.