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:

Oracle Typ záznamů PL/SQL

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:

Oracle Typ záznamů PL/SQL

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.

Oracle Typ záznamů PL/SQL

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.

Oracle Typ záznamů PL/SQL

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.