Oracle PL/SQL Inserați, actualizați, ștergeți și selectați în [Exemplu]
⚡ Rezumat inteligent
Instrucțiuni SQL în interior Oracle PL/SQL gestionează fiecare sarcină de manipulare a datelor, permițând unui bloc să insereze, să actualizeze, să șteargă și să selecteze direct rânduri. Comenzile INSERT, UPDATE, DELETE și SELECT INTO mută și preiau date în baza de date.

Tranzacții DML în PL/SQL
DML este prescurtarea de la Data Manipulation Language (Lingvaj de Manipulare a Datelor), grupul de SQL comenzi care modifică datele stocate într-un tabel. În cadrul unui bloc PL/SQL, aceste comenzi efectuează manipularea, în timp ce PL/SQL furnizează logica adiacentă. DML se ocupă de operațiunile de mai jos.
- Inserarea datelor
- Actualizare de date
- Ștergerea datelor
- Selectarea datelor
În PL/SQL, manipularea datelor se face doar prin comenzi SQL.
Inserarea datelor
În PL/SQL, rândurile sunt adăugate într-un tabel cu comanda SQL INSERT INTO. Această comandă preia numele tabelului, coloanele țintă și valorile coloanelor ca date de intrare, apoi inserează valoarea în tabelul de bază.
Comanda INSERT poate prelua valorile direct dintr-un alt tabel folosind o instrucțiune SELECT, în loc să ofere valorile pentru fiecare coloană. Printr-o instrucțiune SELECT, se pot insera simultan oricâte rânduri conține tabelul sursă.
Sintaxă:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Sintaxa de mai sus prezintă comanda INSERT INTO. Numele și valorile tabelului sunt câmpuri obligatorii, în timp ce numele coloanelor sunt opționale atunci când instrucțiunea INSERT furnizează valori pentru fiecare coloană a tabelului. Cuvântul cheie VALUES este obligatoriu atunci când valorile sunt date separat, așa cum se arată mai sus.
Sintaxă:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Această a doua formă de INSERT INTO preia valorile direct din folosind comanda SELECT. Cuvântul cheie VALUES nu trebuie să fie prezent aici deoarece valorile nu sunt furnizate separat.
Actualizare de date
Actualizarea datelor înseamnă modificarea valorii unei coloane dintr-un rând existent. Aceasta se face cu instrucțiunea UPDATE, care preia numele tabelului, numele coloanei și noua valoare ca date de intrare și actualizează datele.
Sintaxă:
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;
Sintaxa de mai sus prezintă instrucțiunea UPDATE. Cuvântul cheie SET instruiește motorul PL/SQL să actualizeze coloana cu valoarea dată. Clauza WHERE este opțională; dacă nu este dată, valoarea coloanei menționate este actualizată în întregul tabel.
Ștergerea datelor
Ștergerea datelor înseamnă eliminarea unei înregistrări complete din tabelul bazei de date. Comanda DELETE este utilizată în acest scop.
Sintaxă:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Sintaxa de mai sus prezintă comanda DELETE. Cuvântul cheie FROM este opțional, iar cu sau fără clauza FROM, comanda se comportă la fel. Clauza WHERE este opțională; dacă nu este dată, atunci întregul tabel va fi golit.
Selectarea datelor
Proiecția datelor, sau preluarea acestora, înseamnă preluarea datelor necesare din tabelul bazei de date. Acest lucru se realizează cu comanda SELECT împreună cu clauza INTO. Comanda SELECT preia valorile din baza de date, iar clauza INTO atribuie aceste valori variabilelor locale ale blocului PL/SQL.
Următoarele aspecte trebuie luate în considerare atunci când se utilizează o instrucțiune SELECT cu INTO:
- O instrucțiune SELECT ar trebui să returneze o singură înregistrare atunci când utilizează clauza INTO, deoarece o variabilă poate conține o singură valoare. Dacă instrucțiunea SELECT returnează mai mult de un rând, Excepție TOO_MANY_ROWS este crescut.
- Instrucțiunea SELECT atribuie valoarea variabilei din clauza INTO, deci are nevoie de cel puțin o înregistrare pentru a popula valoarea. Dacă nu găsește nicio înregistrare, este generată excepția NO_DATA_FOUND.
- Numărul de coloane și tipurile de date ale acestora din clauza SELECT trebuie să corespundă cu numărul de variabile și tipurile de date ale acestora din clauza INTO.
- Valorile sunt preluate și populate în aceeași ordine ca cea menționată în declarație.
- Clauza WHERE este opțională și vă permite să impuneți mai multe restricții asupra înregistrărilor care sunt preluate.
- O instrucțiune SELECT poate fi utilizată în condiția WHERE a altor instrucțiuni DML pentru a defini valorile condițiilor.
- O instrucțiune SELECT utilizată în instrucțiuni INSERT, UPDATE sau DELETE nu ar trebui să aibă o clauză INTO, deoarece în aceste cazuri nu populează nicio variabilă.
Sintaxă:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
Sintaxa de mai sus prezintă comanda SELECT-INTO. Cuvântul cheie FROM este obligatoriu și identifică tabelul din care trebuie extrase datele. Clauza WHERE este opțională; dacă nu este specificată, atunci vor fi extrase datele din întregul tabel.
Exemplu 1: În acest exemplu, vom vedea cum se efectuează operațiuni DML în PL/SQL. Vom insera cele patru înregistrări de mai jos în tabela emp.
| EMP_NAME | EMP_NR | SALARIU | MANAGER |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| AAAA | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
Apoi vom actualiza salariul lui „XXX” la 15000, vom șterge înregistrarea angajatului „ZZZ” și, în final, vom proiecta detaliile angajatului „XXX”.
Captura de ecran de mai jos prezintă blocul PL/SQL complet utilizat pentru acest exemplu.
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; /
ieșire:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Explicaţie:
- Code liniile 2-5: Declararea variabilelor.
- Code liniile 7-14: Inserarea înregistrărilor în tabelul emp.
- Code linia 15: Validarea tranzacțiilor de inserare.
- Code liniile 17-19: Actualizarea salariului angajatului „XXX” la 15000.
- Code linia 20: Se validează tranzacția de actualizare.
- Code linia 22: Ștergerea înregistrării „ZZZ”.
- Code linia 23: Se validează tranzacția de ștergere.
- Code linia 25: Selectarea înregistrării „XXX” și popularea variabilelor l_emp_name, l_emp_no, l_salary și l_manager.
- Code liniile 26-30: Afișarea valorilor înregistrărilor preluate.

