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.




