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.

  • 🧱 Määratlus: Kirje tüüp rühmitab ühe või mitu veergu ühte uude andmetüüpi.
  • 🔑 võtmesõna: Märksõna TYPE annab kompilaatorile teada, et luuakse uus andmetüüp.
  • 🏛️ Kaks taset: Andmebaasi tasemel kirje on salvestatud objekt; alamprogrammi tasemel kirje on nähtav ainult selle alamprogrammi sees.
  • 🔗 Juurdepääs väljakule: Väljadeni jõutakse kujul record_variable.column_name, kasutades punktoperaatorit.
  • 📥 Veeru tasemel: Väärtusi saab korraga määrata ühele väljale.
  • 📦 Rea tasemel: SELECT INTO abil saab tabeli reast terve kirje täita.
  • 🧩 Kirjete tüübid: Tabelipõhine %ROWTYPE, kursoripõhine %ROWTYPE ja programmeerija määratletud kirjed.

Oracle PL/SQL-kirjete tüüp

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:

Kirjetüübi deklaratsioon andmebaasi tasandil

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:

Kirje tüübi deklaratsioon alamprogrammi tasandil

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.

Kirjetüübi veerutaseme juurdepääsu näide

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.

Kirjetüübi rea tasemel juurdepääsu näide

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.

KKK

Kirje koondab erinevad, võimalikult erinevat tüüpi veerud ühte reataoliseks struktuuriks. Kogumik sisaldab palju sama tüüpi elemente, mis on indekseeritud alaindeksiga. Need on sageli ühendatud, moodustades kirjete kogumi.

%ROWTYPE deklareerib kirje, mille väljad vastavad automaatselt tabelile või kursorile. Kasutage seda siis, kui kirje peaks seda allikat peegeldama, nii et veeru muutus kajastuks ilma deklaratsiooni muutmata.

Jah, kui mõlemad kirjed on sama tüüpi. SELECT INTO saab täita ka terve kirje tabeli reast, eeldusel, et valikuloendi järjekord vastab kirje väljade järjekorrale.

Jah. Tehisintellekt saab lugeda tabeli definitsiooni ja luua vastava TYPE … IS RECORD ploki või soovitada %ROWTYPE'i, kui tabeli reaalajas link on eelistatav. Enne kasutamist kontrollige andmetüüpe.

Andmebaasi tasemel kirje luuakse käsuga CREATE TYPE ja salvestatakse objektina, mis on nähtav kogu andmebaasis. Alamprogrammi tasemel kirje deklareeritakse ploki sees ja eksisteerib ainult selle alamprogrammi piires.

Võta see postitus kokku järgmiselt: