Oracle Vrsta PL/SQL zapisa s primjerima

⚡ Pametni sažetak

PL/SQL tip zapisa je složeni tip podataka koji grupira nekoliko stupaca, svaki sa svojim imenom i tipom podataka, u jedan novi tip. Zapis se može definirati na razini baze podataka kao pohranjeni objekt ili unutar potprograma, a njegova polja se dosežu operatorom točka.

  • 🧱 Definicija: Tip zapisa grupira jedan ili više stupaca u jedan novi tip podataka.
  • 🔑 Ključna riječ: Ključna riječ TYPE govori kompajleru da se stvara novi tip podataka.
  • 🏛️ Dvije razine: Zapis na razini baze podataka je pohranjeni objekt; zapis na razini potprograma vidljiv je samo unutar tog potprograma.
  • 🔗 Pristup terenu: Polja se dohvataju kao record_variable.column_name pomoću operatora točka.
  • 📥 Razina stupca: Vrijednosti se mogu dodijeliti jednom polju istovremeno.
  • ???? Razina retka: Naredba SELECT INTO može popuniti cijeli zapis iz retka tablice.
  • 🧩 Vrste zapisa: %ROWTYPE temeljen na tablici, %ROWTYPE temeljen na kursoru i zapisi definirani od strane programera.

Oracle Vrsta PL/SQL zapisa

Što je vrsta zapisa?

Tip zapisa je složeni tip podataka koji programeru omogućuje stvaranje novog tipa podataka sa željenom strukturom stupaca. Njegove glavne karakteristike su:

  • Grupira jedan ili više stupaca kako bi se formirao novi tip podataka.
  • Svaki od ovih stupaca ima svoje ime i tip podataka.
  • Vrsta zapisa može prihvatiti podatke kao jedan zapis koji se sastoji od više stupaca ili može prihvatiti vrijednost za jedan određeni stupac zapisa.
  • Tip zapisa je jednostavno novi tip podataka. Nakon što se stvori, pohranjuje se kao novi tip podataka i može se koristiti za deklariranje varijable u programima.
  • Koristi ključnu riječ 'TIP' kako bi se kompajleru dala instrukcija da se stvara novi tip podataka.
  • Može se stvoriti na razina baze podataka, pohranjen kao objekt baze podataka i korišten u cijeloj bazi podataka ili na razina potprograma, vidljivo samo unutar potprograma.
  • Za stupce tablice može se deklarirati i tip zapisa na razini baze podataka, tako da jedan stupac može sadržavati složene podatke.
  • Podacima se pristupa pozivanjem na naziv varijable, zatim operatora točke (.), pa na naziv stupca, kao što je ' . '.

Sintaksa za deklariranje tipa zapisa

Sintaksa za deklaraciju na razini baze podataka:

Deklaracija tipa zapisa na razini baze podataka

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

U prvoj sintaksi, ključna riječ 'CREATE TYPE' upućuje kompajler da stvori tip zapisa pod nazivom "type_name_db" s navedenim stupcima kao objekt baze podataka. To se daje kao zasebna naredba, a ne unutar bilo kojeg bloka.

Sintaksa za deklaraciju na razini potprograma:

Deklaracija tipa zapisa na razini potprograma

DECLARE
TYPE <type_name> IS RECORD
(
<column1> <datatype>,
);
BEGIN
<execution_section>;
END;

U ovoj sintaksi stvaramo tip zapisa pod nazivom „naziv_tipa“ samo unutar potprograma. U obje metode, način definiranja stupca i tipa podataka je sličan.

Primjer 1: Vrsta zapisa kao objekt baze podataka

U ovom programu vidimo kako stvoriti tip zapisa kao objekt baze podataka. Stvaramo tip zapisa 'emp_det' s četiri stupca. Stupci i njihovi tipovi podataka su:

  • EMP_NO (BROJ)
  • EMP_NAME (VARCHAR2 (150))
  • VODITELJ (BROJ)
  • PLAĆA (BROJ)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
/

Izlaz:

Type created

Code Objašnjenje

  • Gornji kod stvara tip emp_det kao objekt baze podataka.
  • Ima 4 stupca: broj_zaposlenika, ime_zaposlenika, voditelj i plaća, kako je definirano.
  • Sada je 'emp_det' sličan bilo kojem drugom tip podataka (kao što su NUMBER ili VARCHAR2) i vidljiv je u cijeloj bazi podataka. Stoga se može koristiti bilo gdje u bazi podataka za deklariranje varijable ovog tipa.

Primjer 2: Pristup na razini potprograma, na razini stupca

U ovom primjeru vidimo kako stvoriti tip zapisa na razini potprograma i kako ga popuniti i dohvatiti vrijednosti po stupcu. Stvaramo tip zapisa 'emp_det' na razini potprograma i koristimo ga za popunjavanje i prikaz podataka.

Primjer pristupa na razini stupca tipa zapisa

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;
/

Izlaz:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000
Employee Manager Number: 1000

Code Objašnjenje

  • Code redak 2-8: Vrsta zapisa 'emp_det' deklarirana je sa stupcima emp_no, emp_name, manager i payroll tipa podataka NUMBER, VARCHAR2, NUMBER i NUMBER.
  • Code redak 9: Varijabla guru99_emp_rec deklarirana je kao tip podataka 'emp_det'. varijabla može sadržavati vrijednost koja sadrži sva četiri polja.
  • Code redak 11: Popunjavanje polja 'emp_no' od 'guru99_emp_rec' s vrijednošću 1001.
  • Code redak 12: Popunjavanje polja 'emp_name' vrijednošću XXX.
  • Code redak 13: Popunjavanje polja 'menadžer' vrijednošću 1000.
  • Code redak 14: Popunjavanje polja 'plaća' s vrijednošću 10000.
  • Code redak 15-19: Prikaz vrijednosti 'guru99_emp_rec' u izlazu.

Primjer 3: Pristup na razini potprograma, na razini retka

U ovom primjeru vidimo kako stvoriti tip zapisa na razini potprograma i popuniti ga na razini retka. Stvaramo tip zapisa 'emp_det' na razini potprograma i koristimo ga za popunjavanje i prikaz podataka.

Primjer pristupa na razini retka tipa zapisa

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 Objašnjenje

  • Code redak 2-8: Vrsta zapisa 'emp_det' deklarirana je sa stupcima emp_no, emp_name, manager i payroll tipa podataka NUMBER, VARCHAR2, NUMBER i NUMBER.
  • Code redak 9: Varijabla guru99_emp_rec deklarirana je kao tip podataka 'emp_det' i može sadržavati sva četiri polja.
  • Code redak 11: Popunjavanje tablice emp s 1002 kao emp_no, YYY kao emp_name, 15000 kao plaćom i 1000 kao brojem menadžera.
  • Code redak 12: Izvršavanje transakcije umetanja.
  • Code redak 13: Popunjavanje varijable 'guru99_emp_rec' na razini retka iz upita za odabir za zaposlenika broj 1002.
  • Code redak 15-19: Prikaz vrijednosti 'guru99_emp_rec' u izlazu.

Izlaz:

Employee Detail
Employee Number: 1002
Employee Name: YYY
Employee Salary: 1000
Employee Manager Number: 15000

Bilješka: Tipu zapisa može se pristupiti samo na razini stupca prilikom preusmjeravanja njegove vrijednosti u bilo koji način izlaza. Primijetite da se u ovom primjeru redoslijed SELECT liste ne podudara s redoslijedom polja zapisa, zbog čega se vrijednosti plaće i menadžera pojavljuju zamijenjene u izlazu.

Vrste PL/SQL zapisa

Osim zapisa definiranog od strane programera prikazanog gore, Oracle nudi dvije vrste usidrenih zapisa koji automatski kopiraju svoju strukturu. Njihovim korištenjem izbjegava se ponovno deklariranje stupaca i zapis ostaje u skladu s tablicom ili kursorom na kojem se temelji.

Vrsta zapisa Deklarirano s Struktura dolazi od
Zapis temeljen na tablici naziv_tablice%VRSTA_REDA Svi stupci tablice
Zapis temeljen na kursoru naziv_kursora%VRSTA_REDA Popis za odabir kursora
Zapis definiran od strane programera VRSTA … JE ZAPISNIKA Kolumne koje ručno navodite

Zapis %ROWTYPE je najsigurniji izbor kada oblik treba slijediti tablicu ili pokazivač, jer se promjena stupca automatski prepoznaje pri sljedećoj kompajlaciji.

Pitanja i odgovori

Zapis grupira različite stupce potencijalno različitih tipova u jednu strukturu nalik retku. Kolekcija sadrži mnogo elemenata istog tipa indeksiranih indeksom. Često su kombinirani, u kolekciju zapisa.

%ROWTYPE deklarira zapis čija polja automatski odgovaraju tablici ili kursoru. Koristite ga kada zapis treba odražavati taj izvor, tako da se promjena stupca odrazi bez uređivanja deklaracije.

Da, ako su oba zapisa iste vrste. SELECT INTO također može popuniti cijeli zapis iz retka tablice, pod uvjetom da redoslijed odabira na popisu odgovara redoslijedu polja u zapisu.

Da. AI može pročitati definiciju tablice i stvoriti odgovarajući blok TYPE ... IS RECORD ili preporučiti %ROWTYPE gdje je poželjnija aktivna veza na tablicu. Provjerite tipove podataka prije upotrebe.

Zapis na razini baze podataka stvara se pomoću CREATE TYPE i pohranjuje se kao objekt vidljiv u cijeloj bazi podataka. Zapis na razini potprograma deklarira se unutar bloka i postoji samo unutar tog potprograma.

Sažmite ovu objavu uz: