Oracle PL/SQL vložit, aktualizovat, odstranit a vybrat do [příklad]

V tomto tutoriálu se naučíme používat SQL v PL/SQL. SQL je skutečná komponenta, která se stará o načítání a aktualizaci dat v databázi, zatímco PL/SQL je komponenta, která tato data zpracovává. Dále v tomto článku také probereme, jak kombinovat SQL v rámci bloku PL/SQL.

DML transakce v PL/SQL

DML znamená Jazyk pro manipulaci s daty. Tyto příkazy slouží především k provádění manipulační činnosti. Zabývá se níže uvedenými operacemi.

  • Vkládání dat
  • Aktualizace dat
  • Vymazání dat
  • Výběr dat

V PL/SQL můžeme manipulovat s daty pouze pomocí příkazů SQL.

Vkládání dat

V PL/SQL můžeme data vložit do libovolné tabulky pomocí SQL příkazu INSERT INTO. Tento příkaz vezme jako vstup název tabulky, sloupec tabulky a hodnoty sloupců a vloží hodnotu do základní tabulky.

Příkaz INSERT může také převzít 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' můžeme vložit tolik řádků, kolik obsahuje základní tabulka.

Syntaxe:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • Výše uvedená syntaxe ukazuje příkaz INSERT INTO. Název tabulky a hodnoty jsou povinná pole, zatímco názvy sloupců nejsou povinné, pokud příkazy insert obsahují hodnoty pro všechny sloupce tabulky.
  • Klíčové slovo 'VALUES' je povinné, pokud jsou hodnoty uvedeny samostatně, jak je uvedeno výše.

Syntaxe:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • Výše uvedená syntaxe ukazuje příkaz INSERT INTO, který přebírá hodnoty přímo z pomocí příkazu SELECT.
  • Klíčové slovo 'VALUES' by v tomto případě nemělo být přítomno, protože hodnoty nejsou uvedeny samostatně.

Aktualizace dat

Aktualizace dat jednoduše znamená aktualizaci hodnoty libovolného sloupce v tabulce. To lze provést pomocí příkazu 'UPDATE'. Tento příkaz bere jako vstup název tabulky, název sloupce a hodnotu a aktualizuje data.

Syntaxe:

BEGIN	
  UPDATE <table_name>
  SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> 
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Výše uvedená syntaxe ukazuje UPDATE. Klíčové slovo 'SET' dává pokyn PL/SQL motoru aktualizovat hodnotu sloupce na danou hodnotu.
  • Klauzule „WHERE“ je volitelná. Pokud tato klauzule uvedena nebude, bude aktualizována hodnota uvedeného sloupce 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 update>; 
END;
  • Výše uvedená syntaxe ukazuje příkaz DELETE. Klíčové slovo 'FROM' je volitelné as klauzulí 'FROM' nebo bez ní se příkaz chová stejným způsobem.
  • Klauzule „WHERE“ je volitelná. Pokud tato klauzule uvedena nebude, bude celá tabulka smazána.

Výběr dat

Projekce/načítání dat znamená získání požadovaných dat z databázové tabulky. Toho lze dosáhnout pomocí příkazu 'SELECT' s klauzulí 'INTO'. Příkaz 'SELECT' načte hodnoty z databáze a klauzule 'INTO' přiřadí tyto hodnoty do lokální proměnné PL/SQL blok.

Níže jsou uvedeny body, které je třeba vzít v úvahu v příkazu 'SELECT'.

  • Příkaz 'SELECT' by měl vracet pouze jeden záznam při použití klauzule 'INTO', protože jedna proměnná může obsahovat pouze jednu hodnotu. Pokud příkaz 'SELECT' vrátí více než jednu hodnotu, bude vyvolána výjimka 'TOO_MANY_ROWS'.
  • Příkaz 'SELECT' přiřadí hodnotu proměnné v klauzuli 'INTO', takže k naplnění hodnoty potřebuje získat alespoň jeden záznam z tabulky. Pokud nezískal žádný záznam, je vyvolána výjimka 'NO_DATA_FOUND'.
  • Počet sloupců a jejich datový typ 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 větší omezení záznamů, které mají být načteny.
  • Příkaz 'SELECT' lze použít v podmínce 'WHERE' jiných příkazů DML k definování hodnot podmínek.
  • Příkaz 'SELECT' při použití příkazů 'INSERT', 'UPDATE', 'DELETE' by neměl mít klauzuli 'INTO', protože v těchto případech nenaplní žádnou proměnnou.

Syntaxe:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<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é, které identifikuje název tabulky, ze které je třeba načíst data.
  • Klauzule „WHERE“ je volitelná. Pokud tato klauzule uvedena není, budou načtena data z celé tabulky.

Příklad 1: V tomto příkladu uvidíme, jak provádět operace DML v PL / SQL. Níže uvedené čtyři záznamy vložíme do tabulky emp.

EMP_NAME EMP_NO SALARY MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
Yyy 1002 10000 BBB
Zzz 1003 7500 BBB

Poté aktualizujeme plat 'XXX' na 15000 XNUMX a smažeme záznam zaměstnance 'ZZZ'. Nakonec promítneme podrobnosti o zaměstnanci 'XXX'.

Výběr dat v PL/SQL

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,managed 
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(‘Emplovee 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

Vysvětlení kódu:

  • Řádek kódu 2-5: Deklarace proměnné.
  • Řádek kódu 7-14: Vložení záznamů do tabulky emp.
  • Řádek kódu 15: Potvrzení transakcí vložení.
  • Řádek kódu 17-19: Aktualizace platu zaměstnance 'XXX' na 15000 XNUMX
  • Řádek kódu 20: Potvrzení transakce aktualizace.
  • Řádek kódu 22: Smazání záznamu 'ZZZ'
  • Řádek kódu 23: Potvrzení transakce odstranění.
  • Řádek kódu 25-27: Výběr záznamu 'XXX' a naplnění do proměnné l_emp_name, l_emp_no, l_salary, l_manager.
  • Řádek kódu 28-32: Zobrazení hodnoty načtených záznamů.