Oracle PL/SQL-kirjete tüüp koos näidetega
⚡ Nutikas kokkuvõte
PL/SQL-i kirjetüüp on keerukas andmetüüp, mis koondab mitu veergu, millel kõigil on oma nimi ja andmetüüp, ühte uude tüüpi. Kirjet saab defineerida andmebaasi tasandil salvestatud objektina või alamprogrammi sees ning selle väljadele pääseb juurde punktoperaatoriga.

Mis on kirje tüüp?
Kirjetüüp on keerukas andmetüüp, mis võimaldab programmeerijal luua uue andmetüübi soovitud veerustruktuuriga. Selle peamised omadused on:
- See rühmitab ühe või mitu veergu uue andmetüübi moodustamiseks.
- Igal neist veergudest on oma nimi ja andmetüüp.
- Kirjetüüp võib aktsepteerida andmeid ühe kirjena, mis koosneb paljudest veergudest, või see võib aktsepteerida kirje ühe konkreetse veeru väärtust.
- Kirjetüüp on lihtsalt uus andmetüüp. Kui see on loodud, salvestatakse see uue andmetüübina ja seda saab programmides muutuja deklareerimiseks kasutada.
- See kasutab märksõna 'TYPE' et anda kompilaatorile juhis uue andmetüübi loomiseks.
- Seda saab luua aadressil andmebaasi tasemel, salvestatakse andmebaasiobjektina ja kasutatakse kogu andmebaasis või alamprogrammi tasandil, nähtav ainult alamprogrammi sees.
- Andmebaasi tasemel kirjetüüpi saab deklareerida ka tabeli veergude jaoks, nii et üks veerg saab sisaldada keerukaid andmeid.
- Andmetele pääseb ligi muutuja nimele, seejärel punktioperaatorile (.) ja seejärel veeru nimele viidates, nt ' . '.
Kirje tüübi deklareerimise süntaks
Deklaratsiooni süntaks andmebaasi tasemel:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Esimeses süntaksis annab märksõna 'CREATE TYPE' kompilaatorile käsu luua andmebaasiobjektina kirjetüüp nimega "type_name_db" koos määratud veergudega. See antakse eraldi lausena, mitte ploki sees.
Alamprogrammi tasemel deklareerimise süntaks:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Selles süntaksis loome kirjetüübi nimega „tüübi_nimi” ainult alamprogrammi sees. Mõlemas meetodis on veeru ja andmetüübi määratlemise viis sarnane.
Näide 1: Kirje tüüp andmebaasiobjektina
Selles programmis näeme, kuidas luua kirjetüüpi andmebaasiobjektina. Loome kirjetüübi 'emp_det' nelja veeruga. Veergude ja nende andmetüüpide hulgas on:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- JUHT (NUMBER)
- PALK (NUMBER)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Väljund:
Type created
Code Selgitus
- Ülaltoodud kood loob andmebaasiobjektina tüübi emp_det.
- Sellel on neli veergu: töötaja_number, töötaja_nimi, juhataja ja palk, nagu defineeritud.
- Nüüd on 'emp_det' sarnane iga teisega andmetüüp (nagu NUMBER või VARCHAR2) ja on nähtav kogu andmebaasis. Seega saab seda tüüpi muutuja deklareerimiseks kasutada kõikjal andmebaasis.
Näide 2: Alamprogrammi tasand, veerutaseme juurdepääs
Selles näites näeme, kuidas luua alamprogrammi tasandil kirjetüüpi ning kuidas sellele veeru kaupa väärtusi täita ja sealt väärtusi tuua. Loome alamprogrammi tasandil kirjetüübi 'emp_det' ja kasutame seda andmete täitmiseks ja kuvamiseks.
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; /
Väljund:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Selgitus
- Code rida 2-8: Kirje tüüp 'emp_det' deklareeritakse veergudega emp_no, emp_name, manager ja salary ning andmetüüpidega NUMBER, VARCHAR2, NUMBER ja NUMBER.
- Code rida 9: Muutuja guru99_emp_rec deklareeritakse andmetüübina 'emp_det'. See muutuja võib sisaldada väärtust, mis sisaldab kõiki nelja välja.
- Code rida 11: Välja 'emp_no' täitmine 'guru99_emp_rec' väärtusega 1001.
- Code rida 12: Väljale 'emp_name' lisatakse väärtus XXX.
- Code rida 13: Väljale „haldur” sisestatakse väärtus 1000.
- Code rida 14: Väljale „Palk” sisestatakse väärtus 10000.
- Code rida 15-19: Väljundis kuvatakse 'guru99_emp_rec' väärtus.
Näide 3: Alamprogrammi tasand, rea tasemel juurdepääs
Selles näites näeme, kuidas luua alamprogrammi tasandil kirjetüüp ja täita see rea tasandil. Loome alamprogrammi tasandil kirjetüübi 'emp_det' ja kasutame seda andmete täitmiseks ja kuvamiseks.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(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; /
Code Selgitus
- Code rida 2-8: Kirje tüüp 'emp_det' deklareeritakse veergudega emp_no, emp_name, manager ja salary ning andmetüüpidega NUMBER, VARCHAR2, NUMBER ja NUMBER.
- Code rida 9: Muutuja guru99_emp_rec deklareeritakse andmetüübina 'emp_det' ja see saab sisaldada kõiki nelja välja.
- Code rida 11: Täidetakse tabel „emp”, kus töötaja_number on 1002, töötaja_nimi on YYY, palk on 15000 ja juhi number on 1000.
- Code rida 12: Lisatehingu sooritamine.
- Code rida 13: Muutuja 'guru99_emp_rec' täitmine rea tasemel töötaja numbri 1002 valikupäringust.
- Code rida 15-19: Väljundis kuvatakse 'guru99_emp_rec' väärtus.
Väljund:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Märge: Kirjetüübile pääseb ligi ainult veeru tasandil, kui selle väärtus suunatakse ümber mis tahes väljundrežiimi. Pange tähele, et selles näites ei vasta SELECT-loendi järjekord kirjevälja järjekorrale, mistõttu kuvatakse väljundis palga ja juhi väärtused vahetatult.
PL/SQL-kirjete tüübid
Lisaks ülaltoodud programmeerija määratletud kirjele Oracle pakub kahte ankurdatud kirjetüüpi, mis kopeerivad oma struktuuri automaatselt. Nende kasutamine väldib veergude uuesti deklareerimist ja hoiab kirje tabeli või kursoriga, millel see põhineb, samas tempos.
| Kirje tüüp | Deklareeritud koos | Struktuur pärineb |
|---|---|---|
| Tabelipõhine kirje | tabeli_nimi%REWTYPE | Kõik tabeli veerud |
| Kursoripõhine kirje | kursori_nimi%REWTYPE | Kursori valikute loend |
| Programmeerija määratletud kirje | TÜÜP … ON KIRJELDUS | Käsitsi loetletavad veerud |
Kirje %ROWTYPE on kõige kindlam valik, kui kujund peaks järgnema tabelile või kursor, sest veeru muutus kajastub järgmisel kompileerimisel automaatselt.




