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.
Š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:
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:
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.
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.
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.





