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: