Oracle PL/SQL vložit, aktualizovat, odstranit a vybrat do [příklad]
⚡ Chytré shrnutí
SQL příkazy uvnitř Oracle PL/SQL zvládá všechny úlohy manipulace s daty a umožňuje blokům přímo vkládat, aktualizovat, mazat a vybírat řádky. Příkazy INSERT, UPDATE, DELETE a SELECT INTO přesouvají a načítají data v databázi.

DML transakce v PL/SQL
DML je zkratka pro Data Manipulation Language (jazyk pro manipulaci s daty), což je skupina jazyků SQL příkazy, které mění data uložená v tabulce. V rámci PL/SQL blok, tyto příkazy provádějí manipulační práci, zatímco PL/SQL dodává okolní logiku. DML se zabývá níže uvedenými operacemi.
- Vkládání dat
- Aktualizace dat
- Vymazání dat
- Výběr dat
V PL/SQL se manipulace s daty provádí pouze pomocí SQL příkazů.
Vkládání dat
V PL/SQL se řádky do tabulky přidávají pomocí SQL příkazu INSERT INTO. Tento příkaz bere jako vstup název tabulky, cílové sloupce a hodnoty sloupců a poté vloží hodnotu do základní tabulky.
Příkaz INSERT může také načítat hodnoty přímo z jiné tabulky pomocí příkazu SELECT, namísto zadávání hodnot pro každý sloupec. Prostřednictvím příkazu SELECT lze najednou vložit tolik řádků, kolik zdrojová tabulka obsahuje.
Syntaxe:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Výše uvedená syntaxe znázorňuje příkaz INSERT INTO. Název tabulky a hodnoty jsou povinná pole, zatímco názvy sloupců jsou volitelné, pokud příkaz INSERT poskytuje hodnoty pro každý sloupec tabulky. Klíčové slovo VALUES je povinné, pokud jsou hodnoty zadávány samostatně, jak je znázorněno výše.
Syntaxe:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Tato druhá forma INSERT INTO přebírá hodnoty přímo z pomocí příkazu SELECT. Klíčové slovo VALUES zde nesmí být přítomno, protože hodnoty nejsou dodávány samostatně.
Aktualizace dat
Aktualizace dat znamená změnu hodnoty sloupce v existujícím řádku. To se provádí pomocí příkazu UPDATE, který bere jako vstup název tabulky, název sloupce a novou hodnotu a aktualizuje data.
Syntaxe:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
Výše uvedená syntaxe ukazuje příkaz UPDATE. Klíčové slovo SET instruuje engine PL/SQL, aby aktualizoval sloupec zadanou hodnotou. Klauzule WHERE je volitelná; pokud není zadána, hodnota uvedeného sloupce se aktualizuje v celé tabulce.
Vymazání dat
Smazání dat znamená odstranění jednoho celého záznamu z databázové tabulky. K tomuto účelu se používá příkaz DELETE.
Syntaxe:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Výše uvedená syntaxe ukazuje příkaz DELETE. Klíčové slovo FROM je volitelné a s klauzulí FROM i bez ní se příkaz chová stejně. Klauzule WHERE je volitelná; pokud není zadána, bude vyprázdněna celá tabulka.
Výběr dat
Projekce dat neboli načítání dat znamená načtení požadovaných dat z databázové tabulky. Toho se dosahuje pomocí příkazu SELECT společně s klauzulí INTO. Příkaz SELECT načte hodnoty z databáze a klauzule INTO tyto hodnoty přiřadí lokálním proměnným bloku PL/SQL.
Při použití příkazu SELECT s INTO je třeba zvážit následující body:
- Příkaz SELECT by měl při použití klauzule INTO vracet pouze jeden záznam, protože jedna proměnná může obsahovat pouze jednu hodnotu. Pokud příkaz SELECT vrátí více než jeden řádek, Výjimka TOO_MANY_ROWS je zvýšen.
- Příkaz SELECT přiřadí hodnotu proměnné v klauzuli INTO, takže k naplnění hodnoty potřebuje alespoň jeden záznam. Pokud žádný záznam nenajde, je vyvolána výjimka NO_DATA_FOUND.
- Počet sloupců a jejich datové typy v klauzuli SELECT by se měl shodovat s počtem proměnných a jejich datovými typy v klauzuli INTO.
- Hodnoty jsou načteny a naplněny ve stejném pořadí, jak je uvedeno v příkazu.
- Klauzule WHERE je volitelná a umožňuje nastavit další omezení pro načítané záznamy.
- Příkaz SELECT lze použít v podmínce WHERE jiných příkazů DML k definování hodnot podmínek.
- Příkaz SELECT použitý uvnitř příkazů INSERT, UPDATE nebo DELETE by neměl mít klauzuli INTO, protože v těchto případech nenaplňuje žádnou proměnnou.
Syntaxe:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
Výše uvedená syntaxe ukazuje příkaz SELECT-INTO. Klíčové slovo FROM je povinné a identifikuje tabulku, ze které je třeba data načíst. Klauzule WHERE je volitelná; pokud není zadána, budou načtena data z celé tabulky.
Příklad 1: V tomto příkladu si ukážeme, jak provádět operace DML v PL/SQL. Do emp tabulky vložíme čtyři níže uvedené záznamy.
| EMP_NAME | EMP_NO | SALARY | MANAGER |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| Yyy | 1002 | 10000 | BBB |
| Zzz | 1003 | 7500 | BBB |
Pak aktualizujeme plat „XXX“ na 15 000, smažeme záznam zaměstnance „ZZZ“ a nakonec promítneme podrobnosti o zaměstnanci „XXX“.
Níže uvedený snímek obrazovky ukazuje kompletní blok PL/SQL použitý v tomto příkladu.
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
Výstup:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Vysvětlení:
- Code řádek 2–5: Deklarace proměnných.
- Code řádek 7–14: Vkládání záznamů do emp tabulky.
- Code řádek 15: Potvrzení transakcí vložení.
- Code řádek 17–19: Aktualizace platu zaměstnance „XXX“ na 15 000.
- Code řádek 20: Potvrzení transakce aktualizace.
- Code řádek 22: Mazání záznamu 'ZZZ'.
- Code řádek 23: Potvrzení transakce odstranění.
- Code řádek 25: Výběr záznamu 'XXX' a naplnění proměnných l_emp_name, l_emp_no, l_salary a l_manager.
- Code řádek 26–30: Zobrazení načtených hodnot záznamů.

