sql >> Databáze >  >> RDS >> Oracle

Jak používat tabulky Oracle PLSQL (asociativní pole nebo index podle tabulky)

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(mn ) odebere všechny prvky v rozsahu m ... n . Pokud m je větší než n nebo pokud m nebo n má hodnotu null, DELETE(mn ) 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


  1. TDS Server – Použití příkazů Transact-SQL (T-SQL) pro práci s daty Salesforce na SQL Server

  2. příklady syntaxe spojení Oracle

  3. Nastavení více datových center s PostgreSQL

  4. Jak funguje funkce LOCATE() v MySQL