Tabulky Oracle PLSQL
- PLSQL tabulky jsou složené datové typy.
- Tato pole se chovají stejně jako pole s tím rozdílem, že nemají žádné horní meze, což jim umožňuje neustále se rozšiřovat.
- Nazývají se také index podle tabulky
- PLSQL tabulka obsahuje dva prvky
(1) Primární klíč datových typů BINARY_INTEGER, které indexují tabulku, které nemusí být po sobě jdoucí. Kolekce je rozšířena o přiřazení hodnot k prvku pomocí hodnoty indexu, která aktuálně neexistuje.
jsme schopni indexovat také podle hodnoty řetězce
(2) Sloupec skalárního nebo záznamového datového typu, který ukládá index podle prvků tabulky
Jak definovat a deklarovat typ tabulky
Chcete-li vytvořit tabulky PL/SQL, musíte provést dva kroky. Nejprve definujete typ TABLE a poté deklarujete PL/SQL tabulky tohoto typu. Typy TABLE můžete definovat v deklarativní části libovolného bloku, podprogramu nebo balíčku pomocí syntaxe
Syntax TYPE table_type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER;
Pokud je typem prvku typ záznamu, každé pole v záznamu musí mít skalární datový typ, jako je CHAR, DATE nebo NUMBER.
Chcete-li určit typ prvku, můžete použít %TYPE k zadání datového typu proměnné nebo sloupce databáze
DECLARE TYPE DEPTTabTyp IS TABLE OF dept.dept_name%TYPE INDEX BY BINARY_INTEGER;
Do definice typu TABLE můžete přidat omezení NOT NULL a zabránit tak ukládání hodnot null v PL/SQL tabulkách tohoto typu:
DECLARE TYPE DEPTTabTyp IS TABLE OF dept.location%TYPE NOT NULL INDEX BY BINARY_INTEGER;
K určení typu prvku můžete také použít %ROWTYPE.
DECLARE TYPE deptTabTyp IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;
k určení typu prvku použijete uživatelsky definovaný typ RECORD:
DECLARE TYPE emp_phonetyp IS RECORD ( Stdcode PLS_INTEGER, phn_number PLS_INTEGER, extension PLS_INTEGER ); TYPE emp_contact IS TABLE OF emp_phonetyp INDEX BY BINARY_INTEGER;
Poté, co definujete typ TABLE, můžete deklarovat PL/SQL tabulky tohoto typu
DECLARE TYPE SalTabTyp IS TABLE OF emp.sal%TYPE INDEX BY BINARY_INTEGER; TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; sal_tab SalTabTyp; -- declare PL/SQL table emp_tab EmpTabTyp; -- declare another PL/SQL table
Atributy nebo metoda tabulky PLSQL
Tabulka PL/SQL má atributy EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT a DELETE.
Usnadňují používání tabulek PL/SQL a snadnější údržbu vašich aplikací.
plsql_table_name.attribute_name |
Atributy existují, PRIOR, NEXT a DELETE přebírají parametry. Každý parametr musí být výraz, který dává hodnotu BINARY_INTEGER nebo hodnotu implicitně převoditelnou na daný datový typ.
DELETE funguje jako procedura, která se nazývá příkaz. Ostatní atributy tabulky PL/SQL se však chovají jako funkce, která je volána jako součást výrazu.
Existuje(n) | Vrátí hodnotu true, pokud v tabulce existuje n-tý prvek |
počet | Vrátí počet prvků v tabulce |
První a poslední | FIRST a LAST vrátí první a poslední (nejmenší a největší) číslo indexu v tabulce PL/SQL |
PRIOR(n ) | vrací číslo indexu, které předchází index n v tabulce PL/SQL |
DALŠÍ(n ) | vrátí číslo indexu, které následuje po indexu n |
Smazat | DELETE odstraní všechny prvky z tabulky PL/SQL. DELETE(n ) odebere n prvek. Pokud n má hodnotu null, DELETE(n ) nic nedělá. DELETE(m , n ) odebere všechny prvky v rozsahu m ... n . Pokud m je větší než n nebo pokud m nebo n má hodnotu null, DELETE(m , n ) nedělá nic |
Tabulky PL/SQL pro přesun hromadných dat do az databázových tabulek nebo mezi aplikacemi na straně klienta a uloženými podprogramy.
Jak naplnit data v tabulce PLSQL
Tabulky s jednoduchými datovými typy lze naplnit takto:
<variable>(<integer>) := <value>;
Tabulky se složitými datovými typy budou muset sloupce vyplnit jednotlivě jako:
<variable>(<integer>).<column_name> := <value>;
Nebo z kurzoru:
fetch <cursor_name> into <variable>(<integer>);
Type emptabletype is table of varchar2(10)
Index by binary_integer;
emp_table emptabletyp;
emp_table (1) := ‘good’;
emp_table (2) := ‘bad’’;
Data Oracle můžete načíst do tabulky PL/SQL také dalšími třemi způsoby
a)Příkaz SELECT INTO umožňuje vybrat jeden řádek dat
Pomocí příkazu SELECT INTO můžete vybrat záznam sloupce do skalárního prvku. Nebo můžete vybrat celý řádek do prvku záznamu. V následujícím příkladu vyberete řádek z oddělení databázové tabulky do záznamu uloženého prvním prvkem tabulky PL/SQL dept_tab:
DECLARE
TYPE DeptTabTyp IS TABLE OF dept%ROWTYPE
INDEX BY BINARY_INTEGER;
dept_tab DeptTabTyp;
BEGIN
/* Select entire row into record stored by first element. */
SELECT * INTO dept_tab(1) FROM dept WHERE deptno = 10;
IF dept_tab(1).dname = 'ACCOUNTING' THEN ...
...
END;
b) Příkaz FETCH
Pomocí příkazu FETCH můžete načíst celý sloupec dat Oracle do tabulky skalárů PL/SQL.
Nebo můžete načíst celou tabulku dat Oracle do tabulky záznamů PL/SQL.
DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
i BINARY_INTEGER := 0;
CURSOR c1 IS SELECT * FROM emp;
BEGIN
OPEN c1;
LOOP
i := i + 1;
/* Fetch entire row into record stored by ith element. */
FETCH c1 INTO emp_tab(i);
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
CLOSE c1;
END;
c) Smyčka kurzoru FOR vám umožňuje načíst více řádků.
DECLARE
TYPE EnameTabTyp IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
TYPE SalTabTyp IS TABLE OF emp.sal%TYPE
INDEX BY BINARY_INTEGER;
ename_tab EnameTabTyp;
sal_tab SalTabTyp;
n BINARY_INTEGER := 0;
BEGIN
/* Fetch entire columns into PL/SQL tables. */
FOR emp_rec IN (SELECT ename, sal FROM emp) LOOP
n := n + 1;
ename_tab(n) := emp_rec.ename;
sal_tab(n) := emp_rec.sal;
END LOOP;
...
END;
Musíte si přečíst tyto další příspěvky PLSQL
Struktura a typy bloků Oracle PLSQL
Záznamy Oracle PLSQL
Otázky k rozhovoru pro Oracle plsql
Rychlé výukové programy Oracle SQL a plsql