Oracle Typ záznamů PL/SQL s příklady
⚡ Chytré shrnutí
Typ záznamu v PL/SQL je komplexní datový typ, který seskupuje několik sloupců, každý s vlastním názvem a datovým typem, do jednoho nového typu. Záznam lze definovat na úrovni databáze jako uložený objekt nebo uvnitř podprogramu a jeho pole se dosáhnou pomocí operátoru tečka.

Co je to typ záznamu?
Typ záznamu je komplexní datový typ, který umožňuje programátorovi vytvořit nový datový typ s požadovanou strukturou sloupců. Jeho hlavní charakteristiky jsou:
- Seskupuje jeden nebo více sloupců a vytváří tak nový datový typ.
- Každý z těchto sloupců má svůj vlastní název a datový typ.
- Typ záznamu může přijímat data jako jeden záznam sestávající z mnoha sloupců nebo může přijímat hodnotu pro jeden konkrétní sloupec záznamu.
- Typ záznamu je jednoduše nový datový typ. Po vytvoření se uloží jako nový datový typ a lze jej použít k deklaraci proměnné v programech.
- Používá klíčové slovo 'TYP' instruovat kompilátor, že se vytváří nový datový typ.
- Může být vytvořen na úroveň databáze, uložen jako databázový objekt a používán v celé databázi nebo na úroveň podprogramu, viditelné pouze uvnitř podprogramu.
- Pro sloupce tabulky lze také deklarovat typ záznamu na úrovni databáze, takže jeden sloupec může obsahovat komplexní data.
- K datům se přistupuje odkazem na název proměnné, poté na operátor tečky (.) a nakonec na název sloupce, například ' . '.
Syntaxe pro deklaraci typu záznamu
Syntaxe pro deklaraci na úrovni databáze:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
V první syntaxi klíčové slovo „CREATE TYPE“ instruuje kompilátor k vytvoření typu záznamu s názvem „type_name_db“ se zadanými sloupci jako databázový objekt. Toto je zadáno jako samostatný příkaz, nikoli uvnitř žádného bloku.
Syntaxe pro deklaraci na úrovni podprogramu:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
V této syntaxi vytváříme typ záznamu s názvem „název_typu“ pouze uvnitř podprogramu. V obou metodách je způsob definování sloupce a datového typu podobný.
Příklad 1: Typ záznamu jako databázový objekt
V tomto programu uvidíme, jak vytvořit typ záznamu jako databázový objekt. Vytvoříme typ záznamu 'emp_det' se čtyřmi sloupci. Sloupce a jejich datové typy jsou:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- MANAŽER (ČÍSLO)
- PLAT (ČÍSLO)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Výstup:
Type created
Code Vysvětlení
- Výše uvedený kód vytvoří typ emp_det jako databázový objekt.
- Má 4 sloupce: emp_no, emp_name, manager a salay, jak je definováno.
- Nyní je 'emp_det' podobný jakémukoli jinému datový typ (jako NUMBER nebo VARCHAR2) a je viditelná v celé databázi. Proto ji lze použít kdekoli v databázi k deklaraci proměnné tohoto typu.
Příklad 2: Přístup na úrovni podprogramu, přístup na úrovni sloupců
V tomto příkladu uvidíme, jak vytvořit typ záznamu na úrovni podprogramu a jak z něj naplnit a načíst hodnoty podle sloupce. Na úrovni podprogramu vytvoříme typ záznamu 'emp_det' a použijeme ho k naplnění a zobrazení dat.
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; /
Výstup:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Vysvětlení
- Code řádek 2–8: Typ záznamu 'emp_det' je deklarován se sloupci emp_no, emp_name, manager a salary datového typu NUMBER, VARCHAR2, NUMBER a NUMBER.
- Code řádek 9: Proměnná guru99_emp_rec je deklarována jako datový typ 'emp_det'. proměnlivý může obsahovat hodnotu, která obsahuje všechna čtyři pole.
- Code řádek 11: Vyplnění pole 'emp_no' položky 'guru99_emp_rec' hodnotou 1001.
- Code řádek 12: Naplnění pole „emp_name“ hodnotou XXX.
- Code řádek 13: Naplnění pole „manažer“ hodnotou 1000.
- Code řádek 14: Naplnění pole „plat“ hodnotou 10000.
- Code řádek 15–19: Zobrazení hodnoty 'guru99_emp_rec' ve výstupu.
Příklad 3: Přístup na úrovni podprogramu, přístup na úrovni řádků
V tomto příkladu uvidíme, jak vytvořit typ záznamu na úrovni podprogramu a naplnit jej na úrovni řádků. Na úrovni podprogramu vytvoříme typ záznamu 'emp_det' a použijeme ho k naplnění a zobrazení dat.
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 Vysvětlení
- Code řádek 2–8: Typ záznamu 'emp_det' je deklarován se sloupci emp_no, emp_name, manager a salary datového typu NUMBER, VARCHAR2, NUMBER a NUMBER.
- Code řádek 9: Proměnná guru99_emp_rec je deklarována jako datový typ 'emp_det' a může obsahovat všechna čtyři pole.
- Code řádek 11: Naplnění tabulky emp hodnotami 1002 jako emp_no, YYY jako emp_name, 15000 jako plat a 1000 jako číslo manažera.
- Code řádek 12: Potvrzení transakce vložení.
- Code řádek 13: Naplnění proměnné 'guru99_emp_rec' na úrovni řádku z výběrového dotazu pro zaměstnance s číslem 1002.
- Code řádek 15–19: Zobrazení hodnoty 'guru99_emp_rec' ve výstupu.
Výstup:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Poznámka: K typu záznamu lze přistupovat pouze na úrovni sloupce při přesměrování jeho hodnoty do libovolného výstupního režimu. Všimněte si, že v tomto příkladu se pořadí v seznamu SELECT neshoduje s pořadím polí záznamu, a proto se hodnoty platu a manažera ve výstupu zobrazují zaměněny.
Typy PL/SQL záznamů
Kromě výše uvedeného záznamu definovaného programátorem, Oracle nabízí dva typy ukotvených záznamů, které automaticky kopírují svou strukturu. Jejich použití eliminuje nutnost opětovné deklarace sloupců a udržuje záznam v souladu s tabulkou nebo kurzorem, na kterém je založen.
| Druh záznamu | Deklarováno s | Struktura pochází z |
|---|---|---|
| Záznam založený na tabulce | název_tabulky%ROWTYPE | Všechny sloupce tabulky |
| Záznam založený na kurzoru | název_kurzoru%typ_řádku | Seznam výběru kurzoru |
| Záznam definovaný programátorem | TYP … JE ZÁZNAM | Sloupce, které vypíšete ručně |
Záznam %ROWTYPE je nejbezpečnější volbou, pokud by tvar měl sledovat tabulku nebo kurzor, protože změna sloupce se automaticky zachytí při další kompilaci.




