Oracle PL/SQL rekordok típusa példákkal
⚡ Okos összefoglaló
A PL/SQL rekordtípus egy összetett adattípus, amely több oszlopot – mindegyiknek saját neve és adattípusa – egyetlen új típusba csoportosít. Egy rekord definiálható adatbázis szinten tárolt objektumként vagy egy alprogramon belül, mezői pedig a pont operátorral érhetők el.

Mi az a rekordtípus?
A rekordtípus egy összetett adattípus, amely lehetővé teszi a programozó számára, hogy új adattípust hozzon létre a kívánt oszlopstruktúrával. Fő jellemzői a következők:
- Egy vagy több oszlopot csoportosít egy új adattípus létrehozásához.
- Ezen oszlopok mindegyikének megvan a saját neve és adattípusa.
- Egy rekordtípus elfogadhatja az adatokat egyetlen, sok oszlopból álló rekordként, vagy elfogadhatja egy rekord egy adott oszlopának értékét.
- A rekordtípus egyszerűen egy új adattípus. Létrehozás után új adattípusként tárolódik, és felhasználható változók deklarálására programokban.
- A kulcsszót használja 'TÍPUS' hogy utasítsa a fordítót egy új adattípus létrehozásáról.
- Létrehozható a adatbázis szinten, adatbázis-objektumként tárolva és az adatbázisban használva, vagy a alprogram szinten, csak az alprogramon belül látható.
- Adatbázis szintű rekordtípus táblaoszlopokhoz is deklarálható, így egyetlen oszlop összetett adatokat is tárolhat.
- Az adatokhoz a változó nevére, majd egy pont operátorra (.), végül az oszlop nevére hivatkozva lehet hozzáférni, például: ' . '.
Rekordtípus deklarálásának szintaxisa
Az adatbázis szintű deklaráció szintaxisa:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Az első szintaxisban a „CREATE TYPE” kulcsszó arra utasítja a fordítót, hogy hozza létre a „type_name_db” nevű rekordtípust a megadott oszlopokkal adatbázis-objektumként. Ez önálló utasításként van megadva, nem pedig blokkon belül.
Az alprogram szintű deklaráció szintaxisa:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Ebben a szintaxisban a „type_name” nevű rekordtípust csak az alprogramon belül hozzuk létre. Mindkét módszerben az oszlop és az adattípus definiálásának módja hasonló.
1. példa: Rekordtípus adatbázis-objektumként
Ebben a programban azt vizsgáljuk meg, hogyan hozhatunk létre rekordtípust adatbázis-objektumként. Létrehozzuk az 'emp_det' rekordtípust négy oszloppal. Az oszlopok és adattípusaik a következők:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- VEZETŐ (SZÁM)
- BÉR (SZÁM)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
output:
Type created
Code Magyarázat
- A fenti kód az emp_det típust adatbázis-objektumként hozza létre.
- 4 oszlopból áll: alkalmazott_száma, alkalmazott_neve, vezető és fizetés, a definiáltak szerint.
- Most az „emp_det” hasonló bármely máshoz adattípus (mint a NUMBER vagy a VARCHAR2), és az egész adatbázisban látható. Ezért az adatbázis bármely pontján használható egy ilyen típusú változó deklarálására.
2. példa: Alprogramszint, oszlopszintű hozzáférés
Ebben a példában azt láthatjuk, hogyan hozhatunk létre egy rekordtípust alprogram szinten, és hogyan tölthetjük fel és kérhetjük le belőle az értékeket oszloponként. Létrehozzuk az 'emp_det' rekordtípust alprogram szinten, és ezt használjuk adatok kitöltésére és megjelenítésére.
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; /
output:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Magyarázat
- Code 2-8. sor: Az „emp_det” rekordtípus deklarálva van az emp_no, emp_name, manager és salary oszlopokkal, amelyek adattípusai NUMBER, VARCHAR2, NUMBER és NUMBER.
- Code 9. sor: A guru99_emp_rec változót 'emp_det' adattípusként deklarálták. Ez változó olyan értéket tartalmazhat, amely mind a négy mezőt tartalmazza.
- Code 11. sor: A 'guru99_emp_rec' 'emp_no' mezőjének kitöltése 1001-es értékkel.
- Code 12. sor: Az „emp_name” mező feltöltése XXX értékkel.
- Code 13. sor: A „menedzser” mező kitöltése 1000-es értékkel.
- Code 14. sor: A „fizetés” mező kitöltése 10000 értékkel.
- Code 15-19. sor: A 'guru99_emp_rec' értékének megjelenítése a kimenetben.
3. példa: Alprogramszint, sorszintű hozzáférés
Ebben a példában azt láthatjuk, hogyan hozhatunk létre egy rekordtípust az alprogram szintjén, és hogyan tölthetjük fel azt a sor szintjén. Létrehozzuk az 'emp_det' rekordtípust az alprogram szintjén, és ezt használjuk az adatok feltöltésére és megjelenítésére.
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 Magyarázat
- Code 2-8. sor: Az „emp_det” rekordtípus deklarálva van az emp_no, emp_name, manager és salary oszlopokkal, amelyek adattípusai NUMBER, VARCHAR2, NUMBER és NUMBER.
- Code 9. sor: A guru99_emp_rec változót 'emp_det' adattípusként deklarálták, és mind a négy mezőt tartalmazhatja.
- Code 11. sor: Az „emp” táblát feltöltjük 1002-vel az alkalmazott_száma, YYY-val az alkalmazott_neve, 15000-vel a fizetése és 1000-vel a vezető száma alapján.
- Code 12. sor: Beillesztési tranzakció véglegesítése.
- Code 13. sor: A 'guru99_emp_rec' változó feltöltése sorszinten a 1002-es számú alkalmazott választó lekérdezéséből.
- Code 15-19. sor: A 'guru99_emp_rec' értékének megjelenítése a kimenetben.
output:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Jegyzet: Egy rekordtípus csak oszlopszinten érhető el, amikor az értékét bármilyen kimeneti módba átirányítjuk. Figyeljük meg, hogy ebben a példában a SELECT lista sorrendje nem egyezik meg a rekordmezők sorrendjével, ezért a fizetés és a vezető értékei felcserélődve jelennek meg a kimenetben.
PL/SQL rekordok típusai
A fent látható programozó által definiált rekordon túl, Oracle két lehorgonyzott rekordtípust kínál, amelyek automatikusan másolják a szerkezetüket. Használatukkal elkerülhető az oszlopok újbóli deklarálása, és a rekord lépést tart azzal a táblázattal vagy kurzorral, amelyen alapul.
| Rekord típusa | Kijelentve a következővel: | A szerkezet innen származik |
|---|---|---|
| Tábla alapú rekord | tábla_neve%SORTÍPUS | Egy táblázat összes oszlopa |
| Kurzoralapú rekord | kurzor_neve%ROWTYPE | A kurzor kijelölőlistája |
| Programozó által definiált rekord | TÍPUS … REKORD | Kézzel listázott oszlopok |
A %ROWTYPE rekord a legbiztonságosabb választás, ha az alakzatnak egy táblázatot vagy egy kurzor, mivel az oszlopváltozás a következő fordításkor automatikusan rögzítésre kerül.




