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.

  • ๐Ÿงฑ Mรครคritelmรค: Tietuetyyppi ryhmittelee yhden tai useamman sarakkeen yhdeksi uudeksi tietotyypiksi.
  • ๐Ÿ”‘ Avainsana: TYPE-avainsana kertoo kรครคntรคjรคlle, ettรค uutta tietotyyppiรค ollaan luomassa.
  • ๐Ÿ›๏ธ Kaksi tasoa: Tietokantatason tietue on tallennettu objekti; aliohjelmatason tietue on nรคkyvissรค vain kyseisen aliohjelman sisรคllรค.
  • ๐Ÿ”— Kentรคn kรคyttรถoikeus: Kenttiin pรครคstรครคn muodossa record_variable.column_name kรคyttรคmรคllรค pisteoperaattoria.
  • ๐Ÿ“ฅ Saraketaso: Arvoja voidaan mรครคrittรครค yhdelle kentรคlle kerrallaan.
  • ๐Ÿ“ฆ Rivitaso: SELECT INTO voi tรคyttรครค koko tietueen taulukon riviltรค.
  • ๐Ÿงฉ Tietueiden tyypit: Taulukkopohjainen %ROWTYPE, kursoriin perustuva %ROWTYPE ja ohjelmoijan mรครคrittรคmรคt tietueet.

Oracle PL/SQL-tietuetyyppi

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:

Tietuetyypin mรครคrittely 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:

Tietuetyypin mรครคrittely aliohjelmatasolla

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.

Esimerkki tietuetyypin saraketason kรคyttรถoikeudesta

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.

Tietuetyypin rivitason kรคyttรถoikeusesimerkki

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รค.

UKK

Tietue ryhmittelee mahdollisesti erityyppisiรค sarakkeita yhdeksi rivimรคiseksi rakenteeksi. Kokoelma sisรคltรครค useita samantyyppisiรค elementtejรค, jotka on indeksoitu alaindeksillรค. Ne yhdistetรครคn usein tietueiden kokoelmaksi.

%ROWTYPE mรครคrittรครค tietueen, jonka kentรคt vastaavat automaattisesti taulukkoa tai kohdistinta. Kรคytรค sitรค, kun tietueen tulisi peilata kyseistรค lรคhdettรค, jotta sarakkeen muutos nรคkyy ilman mรครคrittelyn muokkaamista.

Kyllรค, jos molemmat tietueet ovat samaa tyyppiรค. SELECT INTO voi myรถs tรคyttรครค koko tietueen taulukon riviltรค, โ€‹โ€‹edellyttรคen, ettรค valintaluettelon jรคrjestys vastaa tietueen kenttien jรคrjestystรค.

Kyllรค. Tekoรคly voi lukea taulukkomรครคritelmรคn ja tuottaa vastaavan TYPE โ€ฆ IS RECORD -lohkon tai suositella %ROWTYPE-lohkoa, jos reaaliaikainen linkki taulukkoon on parempi. Tarkista tietotyypit ennen kรคyttรถรค.

Tietokantatason tietue luodaan CREATE TYPE -kรคskyllรค โ€‹โ€‹ja tallennetaan objektina, joka nรคkyy koko tietokannassa. Aliohjelmatason tietue deklaroidaan lohkon sisรคllรค ja se on olemassa vain kyseisen aliohjelman sisรคllรค.

Tiivistรค tรคmรค viesti seuraavasti: