Oracle PL/SQL rekordok típusa példákkal
Mi az a rekord tí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 oszlopszerkezettel.
- Egy vagy több oszlopot csoportosít, hogy új adattípust hozzon létre
- Ezeknek az oszlopoknak saját neve és adattípusa lesz
- A Rekord típus képes fogadni az adatokat
- Egyetlen rekordként, amely több oszlopból áll VAGY
- El tudja fogadni a rekord egy adott oszlopának értékét
- A rekordtípus egyszerűen új adattípust jelent. A rekordtípus létrehozása után új adattípusként kerül tárolásra az adatbázisban, és ugyanezt kell használni egy változó deklarálására a programokban.
- A kulcsszót fogja használni 'TÍPUS' hogy utasítsa a fordítót, hogy az új adattípust hozza létre.
- Létrehozható a „adatbázis szint” amely adatbázis-objektumként tárolható, az egész adatbázisban használható, vagy létrehozható a „alprogram szintek”, ami csak az alprogramokon belül látható.
- Az adatbázis szintű rekordtípus a tábla oszlopaihoz is deklarálható, így egyetlen oszlopban tárolhatók az összetett adatok.
- Az ebben az adattípusban lévő adatok a változó_nevükre hivatkozva érhetők el, ezt követi a pont operátor (.), majd az oszlopnév, azaz ' . '
Az adatbázis szintű deklaráció szintaxisa:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Az első szintaxisban a 'CREATE TYPE' kulcsszó látható, amely arra utasítja a fordítót, hogy hozza létre a "type_name_db" nevű rekordtípust a megadott oszloppal adatbázis-objektumként.
Ezt egyedi nyilatkozatként adjuk meg, és nem blokkon belül.
Alprogram szintű deklaráció szintaxisa:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
A szintaxisban csak az alprogramon belül hozzuk létre a „type_name” rekordtípust.
Mindkét deklarációs módszerben hasonló az oszlop és az adattípus meghatározásának módja.
1. példa: RECORD típusa adatbázis-objektumként
Ebben a programban látni fogjuk, hogyan hozhatunk létre „Rekordtípust” adatbázis-objektumként. Létrehozzuk az 'emp_det' rekordtípust négy oszloppal. Az oszlopok és adattípusuk a következő:
- 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
Kód magyarázata:
- A fenti kód létrehozza az emp_det típust adatbázis-objektumként.
- 4 oszlopos emp_no, emp_name, manager és fizetés lesz a definíció szerint.
- Most az 'emp_det' hasonló a többihez adattípus (pl. NUMBER, VARCHAR@ stb.) És a teljes adatbázisban látható. Ezért ez a teljes adatbázisban használható az ilyen típusú változó deklarálására.
output:
Létrehozta az 'emp_det' típust rekordtípusként az adatbázis szintjén.
2. példa: Rekordtípus alprogram szinten – Oszlop szintű hozzáférés
Ebben a példában látni fogjuk, hogyan lehet rekordtípust létrehozni alprogram szinten, és hogyan lehet az értékeket oszlop szinten kitölteni és lekérni belőle.
Az 'emp_det' rekord_típust alprogram szinten fogjuk létrehozni, és ugyanezt fogjuk használni az 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
Kód magyarázata:
- Kódsor 2-8: Az 'emp_det' rekordtípus az emp_no, emp_name, fizetés és a NUMBER, VARCHAR2, NUMBER, NUMBER adattípus kezelője oszlopokkal van deklarálva.
- 9. kódsor: A guru99_emp_rec változó 'emp_det' adattípusként van deklarálva. Most ezt változó tartalmazhatja azt az értéket, amely mind a fenti 4 mezőt/oszlopot tartalmazza.
- 11. kódsor: A 'guru99_emp_rec' 'emp_no' mezőjének kitöltése 1001-es értékkel.
- 12. kódsor: A 'guru99_emp_rec' 'emp_name' mezőjének kitöltése XXX értékkel.
- 13. kódsor: A 'guru99_emp_rec' 'manager' mezőjének feltöltése 1000-es értékkel.
- 14. kódsor: A „guru99_emp_rec” „fizetés” mezőjének kitöltése 10000 értékkel.
- 15-19. kódsor: A 'guru99_emp_rec' értékének megjelenítése a kimenetben.
3. példa: Rekordtípus alprogram szinten – sor szintű hozzáférés
Ebben a példában látni fogjuk, hogyan hozhatunk létre egy rekordtípust alprogram szinten, és hogyan tölthetjük fel sor szinten. Az 'emp_det' rekord_típust alprogram szinten fogjuk létrehozni, és ugyanezt fogjuk használni az adatok kitöltésére és megjelenítésére.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 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; /
Kód magyarázata:
- Kódsor 2-8: Az 'emp_det' rekordtípus az emp_no, emp_name, fizetés és a NUMBER, VARCHAR2, NUMBER, NUMBER adattípus kezelője oszlopokkal van deklarálva.
- 9. kódsor: A guru99_emp_rec változó 'emp_det' adattípusként van deklarálva. Most ez a változó tartalmazza azt az értéket, amely mind a fenti 4 mezőt/oszlopot tartalmazza.
- 11. kódsor: Az emp tábla feltöltése az 1002-es adatokkal, mint emp_no, YYY mint emp_name, 15000 mint fizetés és 1000 mint vezetői szám.
- 12. kódsor: A fenti beillesztési tranzakció végrehajtása.
- 13. kódsor: A 'guru99_emp_rec' változó kitöltése sorszintű adatként az 1002-es számú alkalmazott kiválasztási lekérdezéséből.
- 15-19. kódsor: 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: A rekordtípus csak oszlopszinten érhető el, miközben értéke bármilyen kimeneti módba átirányítható.