Oracle PL/SQL-tietuetyyppi esimerkkien kanssa
⚡ Älykäs yhteenveto
PL/SQL-tietuetyyppi on monimutkainen tietotyyppi, joka ryhmittelee useita sarakkeita, joilla kullakin on oma nimi ja tietotyyppi, yhdeksi uudeksi tyypiksi. Tietue voidaan määritellä tietokantatasolla tallennetuksi objektiksi tai aliohjelman sisällä, ja sen kenttiin päästään pisteoperaattorilla.

Mikä on tietuetyyppi?
Tietuetyyppi on monimutkainen tietotyyppi, jonka avulla ohjelmoija voi luoda uuden tietotyypin halutulla sarakerakenteella. Sen pääominaisuudet ovat:
- Se ryhmittelee yhden tai useamman sarakkeen muodostaakseen uuden tietotyypin.
- Jokaisella näistä sarakkeista on oma nimi ja tietotyyppi.
- Tietuetyyppi voi hyväksyä tiedot yhtenä tietueena, joka koostuu useista sarakkeista, tai se voi hyväksyä tietueen yhden tietyn sarakkeen arvon.
- Tietuetyyppi on yksinkertaisesti uusi tietotyyppi. Kun se on luotu, se tallennetaan uutena tietotyyppinä ja sitä voidaan käyttää muuttujan määrittämiseen ohjelmissa.
- Se käyttää avainsanaa 'TYYPPI' ohjeistaakseen kääntäjää, että uutta tietotyyppiä luodaan.
- Se voidaan luoda osoitteessa tietokannan tasolla, tallennetaan tietokantaobjektina ja käytetään koko tietokannassa tai aliohjelman tasolla, näkyvissä vain aliohjelman sisällä.
- Taulukon sarakkeille voidaan myös määrittää tietokantatason tietuetyyppi, jolloin yksi sarake voi sisältää monimutkaista dataa.
- Tietoihin päästään viittaamalla muuttujan nimeen, sitten pisteoperaattoriin (.) ja lopuksi sarakkeen nimeen muodossa ' . ".
Tietuetyypin määrittämisen syntaksi
Ilmoituksen syntaksi tietokantatasolla:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Ensimmäisessä syntaksissa avainsana 'CREATE TYPE' käskee kääntäjää luomaan tietokantaobjektina tietuetyypin nimeltä "type_name_db" määritetyillä sarakkeilla. Tämä annetaan erillisenä lausekkeena, ei minkään lohkon sisällä.
Aliohjelmatason määrittelyn syntaksi:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Tässä syntaksissa luomme ”tyypin_nimi”-nimisen tietuetyypin vain aliohjelman sisällä. Molemmissa menetelmissä sarake- ja tietotyyppi määritellään samalla tavalla.
Esimerkki 1: Tietuetyyppi tietokantaobjektina
Tässä ohjelmassa näemme, miten tietuetyyppi luodaan tietokantaobjektina. Luomme tietuetyypin 'emp_det', jossa on neljä saraketta. Sarakkeet ja niiden tietotyypit ovat:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- JOHTAJA (NUMERO)
- PALKKA (NUMERO)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
lähtö:
Type created
Code Selitys
- Yllä oleva koodi luo tyypin emp_det tietokantaobjektiksi.
- Siinä on neljä saraketta: työntekijän_numero, työntekijän_nimi, esimies ja palkka, kuten on määritelty.
- Nyt 'emp_det' on samanlainen kuin mikä tahansa muu tietotyyppi (kuten NUMBER tai VARCHAR2) ja on näkyvissä koko tietokannassa. Siksi sitä voidaan käyttää missä tahansa tietokannassa tämän tyyppisen muuttujan määrittämiseen.
Esimerkki 2: Aliohjelmataso, saraketason käyttöoikeus
Tässä esimerkissä näemme, miten luodaan tietuetyyppi aliohjelmatasolla ja miten täytetään ja noudetaan siitä arvoja sarakkeittain. Luomme 'emp_det'-tietuetyypin aliohjelmatasolla ja käytämme sitä tietojen täyttämiseen ja näyttämiseen.
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; /
lähtö:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Selitys
- Code rivi 2–8: Tietuetyyppi 'emp_det' on määritelty sarakkeilla emp_no, emp_name, manager ja salary, joiden tietotyypit ovat NUMBER, VARCHAR2, NUMBER ja NUMBER.
- Code rivi 9: guru99_emp_rec-muuttuja on määritelty tietotyypiksi 'emp_det'. Tämä muuttuja voi sisältää arvon, joka sisältää kaikki neljä kenttää.
- Code rivi 11: Täytetään guru99_emp_rec-kentän emp_no arvolla 1001.
- Code rivi 12: Täytä 'emp_name'-kenttä arvolla XXX.
- Code rivi 13: Täytä 'päällikkö'-kenttä arvolla 1000.
- Code rivi 14: Täytä 'palkka'-kenttä arvolla 10000.
- Code rivi 15–19: Näyttää 'guru99_emp_rec'-arvon tulosteessa.
Esimerkki 3: Aliohjelmataso, rivitason käyttöoikeus
Tässä esimerkissä näemme, miten luodaan tietuetyyppi aliohjelmatasolla ja täytetään se rivitasolla. Luomme 'emp_det'-tietuetyypin aliohjelmatasolla ja käytämme sitä tietojen täyttämiseen ja näyttämiseen.
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 Selitys
- Code rivi 2–8: Tietuetyyppi 'emp_det' on määritelty sarakkeilla emp_no, emp_name, manager ja salary, joiden tietotyypit ovat NUMBER, VARCHAR2, NUMBER ja NUMBER.
- Code rivi 9: guru99_emp_rec-muuttuja on määritelty tietotyypiksi 'emp_det', ja se voi sisältää kaikki neljä kenttää.
- Code rivi 11: Täytetään taulukko emp siten, että työntekijän_numero on 1002, työntekijän_nimi on YYY, palkka on 15000 ja esimiesnumero on 1000.
- Code rivi 12: Sisältötapahtuman sitominen.
- Code rivi 13: Täytetään 'guru99_emp_rec'-muuttuja rivitasolla työntekijän numeron 1002 valintakyselystä.
- Code rivi 15–19: Näyttää 'guru99_emp_rec'-arvon tulosteessa.
lähtö:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Huomautus: Tietuetyyppiin pääsee käsiksi vain saraketasolla, kun sen arvo ohjataan mihin tahansa tulostustilaan. Huomaa, että tässä esimerkissä SELECT-luettelon järjestys ei vastaa tietuekenttien järjestystä, minkä vuoksi palkan ja esimiehen arvot näkyvät tulosteessa vaihtaneina.
PL/SQL-tietueiden tyypit
Yllä olevan ohjelmoijan määrittelemän tietueen lisäksi Oracle tarjoaa kaksi ankkuroitua tietuetyyppiä, jotka kopioivat rakenteensa automaattisesti. Niiden käyttö välttää sarakkeiden uudelleenmäärittelyn ja pitää tietueen tahdissa sen perustana olevan taulukon tai kohdistimen kanssa.
| Tietueen tyyppi | Ilmoitettu | Rakenne tulee |
|---|---|---|
| Taulukkoon perustuva tietue | taulukon_nimi%RIVITYYPPI | Taulukon kaikki sarakkeet |
| Kursoriin perustuva tietue | kohdistimen_nimi%RIVITYYPE | Kohdistimen valintalista |
| Ohjelmoijan määrittämä tietue | TYYPPI … ON TIETUE | Käsin listaamasi sarakkeet |
%ROWTYPE-tietue on turvallisin valinta, kun muodon on seurattava taulukkoa tai kohdistin, koska sarakkeen muutos poimitaan automaattisesti seuraavan käännöksen yhteydessä.




