Oracle Typ záznamů PL/SQL s příklady
Co je typ záznamu?
Typ záznamu je komplexní datový typ, který umožňuje programátorovi vytvořit nový datový typ s požadovanou sloupcovou strukturou.
- Seskupuje jeden nebo více sloupců do nového datového typu
- Tyto sloupce budou mít svůj vlastní název a datový typ
- Typ záznamu může přijímat data
- Jako jeden záznam, který se skládá z mnoha sloupců NEBO
- Může přijmout hodnotu pro jeden konkrétní sloupec záznamu
- Typ záznamu jednoduše znamená nový datový typ. Jakmile je typ záznamu vytvořen, bude uložen jako nový datový typ v databázi a stejný bude použit pro deklaraci proměnné v programech.
- Použije klíčové slovo 'TYP' instruovat kompilátor, že vytváří nový datový typ.
- Lze jej vytvořit na „úroveň databáze" které lze uložit jako databázové objekty, použít v celé databázi nebo je lze vytvořit na „úrovně podprogramů“, který je viditelný pouze uvnitř podprogramů.
- Typ záznamu na úrovni databáze lze také deklarovat pro sloupce tabulky, takže jeden sloupec může obsahovat komplexní data.
- K datům v tomto datovém typu lze přistupovat odkazem na jejich název_proměnné následovaný operátorem období (.) následovaným názvem sloupce, tj. . '
Syntaxe pro deklaraci na úrovni databáze:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
V první syntaxi můžeme vidět klíčové slovo 'CREATE TYPE', které dává kompilátoru pokyn, aby vytvořil typ záznamu s názvem „type_name_db“ se zadaným sloupcem jako databázovým objektem.
Toto je dáno jako individuální prohlášení a ne uvnitř žádného bloku.
Syntaxe pro deklaraci na úrovni podprogramu:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
V syntaxi vytváříme typ záznamu s názvem „název_typu“ pouze uvnitř podprogramu.
V obou deklaračních metodách je způsob definování sloupce a datového typu podobný.
Příklad 1: RECORD Typ jako objekt databáze
V tomto programu uvidíme, jak vytvořit „Typ záznamu“ jako databázový objekt. Vytvoříme záznam typu 'emp_det' se čtyřmi sloupci. Sloupce a jejich datový typ jsou následující:
- 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
Vysvětlení kódu:
- Výše uvedený kód vytvoří typ emp_det jako databázový objekt.
- Bude mít 4 sloupce emp_no, emp_name, manager a plat podle definice.
- Nyní je 'emp_det' podobný ostatním datový typ (jako NUMBER, VARCHAR@ atd.) A je vidět v celé databázi. Tudíž to lze použít v celé databázi k deklaraci proměnné tohoto typu.
Výstup:
Vytvořen typ 'emp_det' jako typ záznamu na úrovni databáze.
Příklad 2: Typ záznamu na úrovni podprogramu – Přístup na úrovni sloupce
V tomto příkladu se podíváme na to, jak vytvořit typ záznamu na úrovni podprogramu a jak z něj naplnit a načíst hodnoty podle úrovně sloupců.
Na úrovni podprogramu vytvoříme 'emp_det' record_type a to samé použijeme k naplnění a zobrazení dat z něj.
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
Vysvětlení kódu:
- Řádek kódu 2-8: Typ záznamu 'emp_det' je deklarován se sloupci emp_no, emp_name, plat a manažer datového typu NUMBER, VARCHAR2, NUMBER, NUMBER.
- Řádek kódu 9: Proměnná guru99_emp_rec je deklarována jako datový typ 'emp_det'. Teď tohle proměnlivý může obsahovat hodnotu, která obsahuje všechna výše uvedená 4 pole/sloupce.
- Řádek kódu 11: Vyplnění pole 'emp_no' položky 'guru99_emp_rec' hodnotou 1001.
- Řádek kódu 12: Vyplnění pole 'emp_name' položky 'guru99_emp_rec' hodnotou XXX.
- Řádek kódu 13: Vyplnění pole 'manager' 'guru99_emp_rec' hodnotou 1000.
- Řádek kódu 14: Vyplnění pole 'plat' 'guru99_emp_rec' hodnotou 10000.
- Řádek 15–19 kódu: Zobrazení hodnoty 'guru99_emp_rec' ve výstupu.
Příklad 3: Typ záznamu na úrovni podprogramu – přístup na úrovni řádku
V tomto příkladu se podíváme na to, jak vytvořit typ záznamu na úrovni podprogramu a jak jej naplnit jako úroveň řádku. Na úrovni podprogramu vytvoříme 'emp_det' record_type a to samé použijeme k naplnění a zobrazení dat z něj.
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; /
Vysvětlení kódu:
- Řádek kódu 2-8: Typ záznamu 'emp_det' je deklarován se sloupci emp_no, emp_name, plat a manažer datového typu NUMBER, VARCHAR2, NUMBER, NUMBER.
- Řádek kódu 9: Proměnná guru99_emp_rec je deklarována jako datový typ 'emp_det'. Nyní tato proměnná může obsahovat hodnotu, která obsahuje všechna výše uvedená 4 pole/sloupce.
- Řádek kódu 11: Vyplnění tabulky emp daty 1002 jako emp_no, YYY jako emp_name, 15000 jako plat a 1000 jako číslo manažera.
- Řádek kódu 12: Provedení výše uvedené transakce vložení.
- Řádek kódu 13: Vyplnění proměnné 'guru99_emp_rec' jako data na úrovni řádku z výběrového dotazu pro zaměstnance číslo 1002.
- Řádek 15–19 kódu: 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čemž jeho hodnota je přesměrována do libovolného výstupního režimu.