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.

  • ⚙️ Příkazy DML: INSERT, UPDATE, DELETE a SELECT INTO provádějí všechny úlohy manipulace s daty uvnitř bloku PL/SQL.
  • Vkládání dat: INSERT INTO přidává řádky z explicitních hodnot (VALUES) nebo přímo z jiné tabulky pomocí příkazu SELECT.
  • 🔄 Aktualizace dat: Příkaz UPDATE s příkazem SET mění hodnoty sloupců, zatímco volitelná klauzule WHERE omezuje počet ovlivněných řádků.
  • 🗑️ Smazání dat: Příkaz DELETE odstraní odpovídající záznamy a vynechání klauzule WHERE vymaže celou tabulku.
  • 🎯 Vyberte do: Funkce SELECT INTO musí vrátit přesně jeden řádek, nebo Oracle vyvolá NO_DATA_FOUND nebo TOO_MANY_ROWS.
  • 🤖 Asistence AI: Asistenti umělé inteligence, jako je GitHub Copilot, navrhují bloky DML a označují chybějící WHERE nebo COMMIT.

Oracle PL/SQL Vložit Aktualizovat Smazat Vybrat Do

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.

Oracle Blok PL/SQL provádějící vkládání, aktualizaci, mazání a výběr v tabulce emp

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ů.

Nejčastější dotazy

Ne. Statický PL/SQL nemůže spustit DDL přímo. Sestavte příkaz jako řetězec a spusťte ho pomocí OKAMŽITĚ VYKONÁVEJTE, který za běhu zpracovává CREATE, ALTER a DROP.

Funkce SELECT INTO musí vrátit přesně jeden řádek. Pro čtení více řádků použijte explicitní kurzor pomocí smyčky FETCH nebo hromadného sběru do kolekce.

DELETE je DML: odstraní vybrané řádky pomocí klauzule WHERE a lze ji vrátit zpět. TRUNCATE je DDL: okamžitě vymaže každý řádek, automaticky se potvrdí a nelze ji vrátit zpět.

Ano. Změny provedené příkazy INSERT, UPDATE a DELETE zůstanou ve vaší relaci, dokud SPÁCHATPL/SQL se automaticky nepotvrdí. Pro uložení použijte COMMIT nebo pro zrušení ROLLBACK.

Příkaz MERGE provádí upsert – aktualizuje řádky, které splňují podmínku spojení, a vkládá ty, které nesplňují – v jednom příkazu namísto samostatných průchodů UPDATE a INSERT.

Funkce RETURNING INTO zachytí hodnoty sloupců z řádků, které byly právě ovlivněny příkazy INSERT, UPDATE nebo DELETE, a uloží je do proměnných, čímž se vyhneme dalšímu příkazu SELECT pro čtení změněných dat.

Ano. GitHub Copilot Navrhuje bloky INSERT, UPDATE, DELETE a SELECT INTO z krátkého komentáře, navrhuje vázané proměnné a doplňuje seznamy sloupců, i když byste si nejprve měli prostudovat logiku.

Asistenti s umělou inteligencí prohledávají DML a hledají chybějící klauzule WHERE, chybějící příkazy COMMIT a nebezpečné zřetězení, poté navrhují opravy a vysvětlují chyby. Tato kontrola strojového učení zachycuje rizikové změny dříve, než se dostanou do produkčního prostředí.

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