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.

  • ⚙️ Comenzi DML: INSERT, UPDATE, DELETE și SELECT INTO efectuează fiecare sarcină de manipulare a datelor în interiorul unui bloc PL/SQL.
  • Inserarea datelor: INSERT INTO adaugă rânduri din VALUES explicite sau direct dintr-un alt tabel folosind o comandă SELECT.
  • 🔄 Actualizare date: UPDATE cu SET modifică valorile coloanelor, în timp ce o clauză WHERE opțională limitează rândurile afectate.
  • 🗑️ Ștergerea datelor: DELETE elimină înregistrările corespondente, iar omiterea clauzei WHERE șterge întregul tabel.
  • 🎯 Selectați în: SELECT INTO trebuie să returneze exact un rând sau Oracle generează NO_DATA_FOUND sau TOO_MANY_ROWS.
  • 🤖 Asistență AI: Asistenții AI, cum ar fi GitHub Copilot, redactează blocuri DML și semnalează lipsă de WHERE sau COMMIT.

Oracle PL/SQL Inserare Actualizare Ștergere Selectare Înto

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.

Oracle Bloc PL/SQL care efectuează inserarea, actualizarea, ștergerea și selectarea în tabelul 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;
/

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.

Întrebări frecvente

Nu. PL/SQL static nu poate rula DDL direct. Construiți instrucțiunea ca șir de caractere și executați-o cu EXECUTAȚI IMEDIAT, care gestionează CREATE, ALTER și DROP la momentul execuției.

O comandă SELECT INTO trebuie să returneze exact un rând. Pentru a citi mai multe rânduri, utilizați o comandă explicită. cursor cu o buclă FETCH sau BULK COLLECT INTO o colecție.

DELETE este o funcție DML: elimină rândurile selectate cu o clauză WHERE și poate fi anulată. TRUNCATE este o funcție DDL: șterge fiecare rând instantaneu, se validează automat și nu poate fi anulată.

Da. Modificările efectuate de INSERARE, ACTUALIZARE și ȘTERGERE rămân în sesiune până când COMITEAZAPL/SQL nu se autocommitează. Folosiți COMMIT pentru a salva sau ROLLBACK pentru a șterge.

Funcția MERGE efectuează o upsert — actualizează rândurile care corespund unei condiții de joncțiune și le inserează pe cele care nu corespund — într-o singură instrucțiune, în loc de pase separate de UPDATE și INSERT.

RETURNING INTO capturează valorile coloanelor din rândurile pe care o comandă INSERT, UPDATE sau DELETE tocmai le-a afectat și le stochează în variabile, evitând o comandă SELECT suplimentară pentru citirea datelor modificate.

Da. Copilotul GitHub schițează blocurile INSERT, UPDATE, DELETE și SELECT INTO dintr-un comentariu scurt, sugerează variabile de legare și completează listele de coloane, deși ar trebui să revizuiți mai întâi logica.

Asistenții inteligenți artificiali scanează DML pentru clauze WHERE lipsă, COMMIT-uri absente și concatenare nesigură, apoi sugerează remedieri și explică erorile. Această analiză a învățării automate identifică modificările riscante înainte ca acestea să ajungă în producție.

Rezumați această postare cu: