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.

  • 🧱 Definice: Typ záznamu seskupuje jeden nebo více sloupců do jednoho nového datového typu.
  • 🔑 Klíčové slovo: Klíčové slovo TYPE informuje kompilátor, že se vytváří nový datový typ.
  • 🏛️ Dvě úrovně: Záznam na úrovni databáze je uložený objekt; záznam na úrovni podprogramu je viditelný pouze uvnitř daného podprogramu.
  • 🔗 Přístup do terénu: Pole jsou přístupná jako record_variable.column_name pomocí operátoru dot.
  • 📥 Na úrovni sloupců: Hodnoty lze přiřadit vždy jednomu poli.
  • ???? Úroveň řádku: Příkaz SELECT INTO může naplnit celý záznam z řádku tabulky.
  • 🧩 Druhy záznamů: Tabulkový %ROWTYPE, kurzorový %ROWTYPE a programátorem definované záznamy.

Oracle Typ záznamů PL/SQL

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:

Deklarace typu záznamu 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:

Deklarace typu záznamu 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.

Příklad přístupu na úrovni sloupců typu záznamu

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.

Příklad přístupu na úrovni řádků typu záznamu

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.

Nejčastější dotazy

Záznam seskupuje různé sloupce potenciálně různých typů do jedné řádkové struktury. Kolekce obsahuje mnoho prvků stejného typu indexovaných dolním indexem. Často jsou kombinovány a tvoří kolekci záznamů.

%ROWTYPE deklaruje záznam, jehož pole se automaticky shodují s tabulkou nebo kurzorem. Použijte ho, když má záznam zrcadlit daný zdroj, takže změna sloupce se projeví bez úpravy deklarace.

Ano, pokud jsou oba záznamy stejného typu. Příkaz SELECT INTO může také vyplnit celý záznam z řádku tabulky, za předpokladu, že pořadí polí v seznamu výběru odpovídá pořadí polí v záznamu.

Ano. Umělá inteligence dokáže přečíst definici tabulky a vytvořit odpovídající blok typu TYPE … IS RECORD nebo doporučit %ROWTYPE, kde je vhodnější aktivní odkaz na tabulku. Před použitím ověřte datové typy.

Záznam na úrovni databáze se vytvoří pomocí příkazu CREATE TYPE a uloží se jako objekt viditelný v celé databázi. Záznam na úrovni podprogramu se deklaruje uvnitř bloku a existuje pouze v rámci tohoto podprogramu.

Shrňte tento příspěvek takto: