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.

  • 🧱 Meghatározás: A rekordtípus egy vagy több oszlopot egyetlen új adattípusba csoportosít.
  • 🔑 Kulcsszó: A TYPE kulcsszó jelzi a fordítónak, hogy új adattípus jön létre.
  • 🏛️ Két szint: Az adatbázis szintű rekord egy tárolt objektum; az alprogram szintű rekord csak az adott alprogramon belül látható.
  • 🔗 Terepi hozzáférés: A mezők a record_variable.column_name formátumban érhetők el a pont operátor használatával.
  • 📥 Oszlopszintű: Az értékek egyszerre csak egy mezőhöz rendelhetők hozzá.
  • 📦 Sorszintű: Egy SELECT INTO egy teljes rekordot feltölthet egy tábla sorából.
  • 🧩 Rekord típusok: Táblaalapú %ROWTYPE, kurzoralapú %ROWTYPE és programozó által definiált rekordok.

Oracle PL/SQL rekordok típusa

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:

Rekordtípus-deklaráció adatbázis szinten

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:

Rekordtípus-deklaráció alprogram szinten

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.

Rekordtípus oszlopszintű hozzáférési példa

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.

Rekordtípus sorszintű hozzáférési példa

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.

GYIK

Egy rekord különböző típusú, esetleg eltérő oszlopokat csoportosít egyetlen sorszerű struktúrába. Egy gyűjtemény számos azonos típusú elemet tartalmaz, amelyeket egy alsó index indexel. Ezeket gyakran kombinálják, így rekordok gyűjteményét alkotják.

A %ROWTYPE függvény olyan rekordot deklarál, amelynek mezői automatikusan illeszkednek egy táblához vagy kurzorhoz. Akkor használjuk, ha a rekordnak tükröznie kell az adott forrást, így az oszlopmódosítás a deklaráció szerkesztése nélkül is tükröződik.

Igen, ha mindkét rekord azonos típusú. A SELECT INTO egy teljes rekordot is kitölthet egy táblasorból, feltéve, hogy a kiválasztási lista sorrendje megegyezik a rekord mezősorrendjével.

Igen. A mesterséges intelligencia képes beolvasni egy tábladefiníciót, és létrehozni egy megfelelő TYPE … IS RECORD blokkot, vagy %ROWTYPE-ot ajánlani, ahol az élő kapcsolat a táblával előnyösebb. Használat előtt ellenőrizze az adattípusokat.

Egy adatbázis-szintű rekord a CREATE TYPE paranccsal jön létre, és objektumként tárolódik az adatbázisban. Egy alprogram-szintű rekord egy blokkon belül deklarálódik, és csak az adott alprogramon belül létezik.

Foglald össze ezt a bejegyzést a következőképpen: