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;
В синтаксиса ние създаваме типа запис, наречен „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 на ниво подпрограма и ще използваме същото за попълване и показване на данни от него.
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 на ниво подпрограма и ще използваме същото за попълване и показване на данни от него.
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
Забележка: Типът запис може да бъде достъпен само на ниво колона, докато стойността му се пренасочва към произволен изходен режим.