Documente Academic
Documente Profesional
Documente Cultură
Obiective:
Scopul lectiei:
În aceasta lectie veti învata cum sa inserati înregistrari într-o tabela, sa
reactualizati (modificati) înregistrarile existente în tabela si sa stergeti înregistrari dintr-o
tabela. Veti mai învata si cum sa controlati tranzactii cu comenzile COMMIT,
SAVEPOINT si ROLLBACK.
Limbajul de manipulare a datelor (DML) este partea de baza a SQL. Când doriti
sa adaugati, sa modificati sau sa stergeti date dintr-o baza de date, executati o comanda
DML.
O colectie de comenzi DML care formeaza o unitate logica de lucru se numeste
tranzactie.
1
Considerati o baza de date din domeniul bancar. Atunci când un client al bancii
doreste sa transfere bani dintr-un depozit într-un cont curent, tranzactia ar putea consta în
3 operatii separate: scade suma din depozit, creste suma din contul curent, înregistreaza
tranzactia în jurnalul de tranzactii. Serverul Oracle trebuie sa garanteze ca toate cele 3
comenzi SQL sunt executate în asa fel încât sa mentina echilibrul necesar între conturi.
Atunci când, din anumite cauze, una dintre comenzile tranzactiilor de mai sus nu se
executa, atunci celelalte comenzi ale tranzactiilor trebuie sa fie anulate.
DEPT DEPT
DEPTNO DNAME LOC DEPTNO DNAME LOC
Graficul de mai sus ilustreaza adaugarea unui nou departament în tabelul DEPT.
COMANDA INSERT
2
Prin intermediul comenzii INSERT se pot introduce noi înregistrari într-un tabel.
În descrierea sintaxei:
tabel este numele tabelului (bazei de date).
coloana este numele coloanei din tabelul respectiv.
valoare este valoarea corespunzatoare coloanei.
Nota : Folosind clauza VALUES, aceasta comanda adauga numai câte un rând odata la
un tabel.
Deoarece se poate insera o noua înregistrare care contine valori pentru fiecare
coloana, lista coloanelor nu este necesara în sintaxa INSERT.
Totusi, daca aceasta nu este precizata, valorile trebuiesc enumerate conform
ordinii coloanelor din tabel.
3
Inserarea de înregistrari cu valori de NULL
Metoda Descriere
Implicita Omiteti coloanei din lista.
Explicita Specificati cuvântul cheie NULL în lista de dupa VALUES.
Specificati sirul vid (‘’) în lista de dupa VALUES; numai pentru siruri de
caractere si pentru valori de tip data.
1 row created.
Inserarea de valori speciale folosind functii SQL:
Se pot folosi pseudocoloane pentru a introduce valori speciale în tabele.
4
SQL> SELECT empno, ename, job, hiredate, comm
2 FROM emp
3 WHERE empno = 7196;
1 row created.
• Verificarea adaugarii:
5
Inserare de valori folosind variabile de substitutie
Inserarea
Crearea unui script de valori folosind
interactiv variabilevariabilelor
prin folosirea de substitutie:
de substitutie SQL*Plus
Se poate scrie o comanda INSERT care sa permita utilizatorului sa adauge valori
interactiv folosind variabilele
SQL>INSERT INTOde substitutie SQL*Plus.
dept(deptno, dname, loc)
2 Exemplul
VALUESde mai sus înregistreaza
(&department_id,pentru
informatia un departament în tabelul
‘&department_name’,
DEPT. Numarul departamentului, numele si locatia sunt cerute interactiv utilizatorului.
3 Pentru valori de tip data calendaristica
'&location');
sau sir de caractere, ampersandul si numele
variabilei sunt încadrate de ghilimele simple (apostroafe).
1 row created.
6
Exemplul din figura înregistreaza informatia pentru un departament, în tabelul
DEPT. Utilizatorului îi sunt cerute numarul departamentului, numele si locatia acestuia,
folosind mesajele de prompt stabilite în ACCEPT.
1 row created.
7
Modificarea datelor dintr-un tabel
EMP
EMPNO ENAME JOB ... DEPTNO
7839 KING PRESIDENT 10
“...modifica o înregistrare
în tabelul EMP...”
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
. Modificarea
.. datelor dintr-un tabel:
Figura de mai sus arata modificarea numarului departamentului pentru Clark din
10 în 20. EMP
Actualizarea înregistrarilor: EMPNO ENAME JOB ... DEPTNO
7839 KING
Înregistrarile existente pot fi modificate folosind comanda PRESIDENT
UPDATE. 10
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 20
7566 JONES MANAGER 20
...
COMANDA UPDATE
UPDATE tabel
SET coloana = valoare [,coloana=valoare]
[WHERE conditie];
8
Puteti avea confirmarea operatiei de modificare prin interogarea tabelului, afisând
rândurile modificate.
• Daca omiteti clauza WHERE, sunt modificate toate înregistrarile dintr-un tabel.
SQL>UPDATE employee
2 Daca omiteti clauza
SET WHERE,
deptno = 20;vor fi modificate toate înregistrarile din baza
de date.
14 rows updated.
SQL>SELECT ename, deptno
2 FROM employee;
ENAME DEPTNO
______ ______
KING 20
BLAKE 20
CLARK 20
JONES 20
MARTIN 20
ALLEN 20
TURNER 20
...
14 rows selected.
9
Actualizarea înregistrarilor folosind
subinterogari dupa mai multe câmpuri
10
Actualizarea înregistrarilor folosind valori dintr-un alt tabel:
Actualizarea înregistrarilor:
Incalcarea constrângerii de integritate
SQL>UPDATE emp
2 SET deptno = 55
3 WHERE deptno = 10;
UPDATE emp
*
ERROR at line 1
ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK)
violated - parent key not found
Daca încercati sa atribuiti unui câmp o valoare care este legata de o constrângere
de integritate, va rezulta o eroare.
În exemplul de mai sus, departamentul cu numarul 55 nu exista în tabelul parinte,
DEPT, si astfel veti obtine eroarea parent key violation ORA-02291.
Nota: Constrângerile de integritate asigura ca datele adera la un set predefinit de
reguli. O lectie urmatoare va dezvolta acest subiect mai pe larg.
11
COMANDA DELETE
Stergerea înregistrarilor:
DEPT
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK “sterge o înregistrare din
20 RESEARCH DALLAS
tabelul EMP”
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEVELOPMENT DETROIT
60 MIS
...
DEPT
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 MIS
...
12
Puteti sterge anumite înregistrari prin specificarea clauzei WHERE în comanda
DELETE. Exemplul de mai sus sterge departamentul DEVELOPMENT din tabelul
DEPARTMENT. Va puteti asigura ca stergerea s-a facut corect, încercând afisarea
rândurilor sterse printr-un SELECT.
SQL> SELECT *
2 FROM department
3 WHERE dname = 'DEVELOPMENT';
no rows selected.
Exemplu:
Stergeti toti cei angajati dupa data de 1 Ianuarie, 1997.
SQL> DELETE FROM emp
2 WHERE hiredate > TO_DATE('01.01.97', 'DD.MM.YY');
1 row deleted.
Daca ati omis clauza WHERE, toate rândurile din tabel vor fi sterse. Cel de-al
doilea exemplu din figura sterge toate rândurile din tabelul DEPARTMENT, deoarece nu
a fost specificata nici o clauza WHERE.
13
În exemplul de mai jos se încearca stergerea departamentului cu numarul 10 din
tabelul DEPT, dar aceasta provoaca o eroare, deoarece numarul de departament este
folosit ca si cheie externa în tabelul EMP. Daca înregistrarea parinte pe care încercati sa o
stergeti are înregistrari fii, atunci veti primi un mesaj de eroare: child record found
violation ORA - 02292.
Stergerea înregistrarilor:
Incalcarea constrângerii de integritate
Nu puteti sterge o înregistrare care contine o cheie primara folosita ca cheie externa
în alt tabel.
Tranzactii
14
Tipuri de tranzactii
Tip Descriere
Limbaj de manipulare Consta din orice numar de comenzi DML pe care serverul Oracle le
a datelor (DML) trateaza ca o singura entitate sau unitate logica de lucru.
15
Avantajele COMMIT si ROLLBACK
Controlul tranzactiilor
ROLLBACK to Savepoint B
ROLLBACK to Savepoint A
ROLLBACK
Comanda Descriere
16
Procesarea implicita a tranzactiilor
Stare Circumstante
Salvarea modificarilor:
Fiecare modificare efectuata în timpul tranzactiei este temporara pâna când apare
un 'commit' (pâna la 'salvarea' tranzactiei).
17
Starea datelor înainte de COMMIT sau ROLLBACK
18
Salvarea modificarilor
• Faceti modificarile.
SQL>UPDATE emp
2 SET deptno = 10
3 WHERE empno = 7782;
1 row updated.
• Salvati modificarile
SQL>COMMIT;
Commit complete.
SQL> COMMIT;
Commit complete.
19
Starea datelor dupa ROLLBACK
Exemplu:
Încercând sa stergeti o înregistrare din tabelul TEST, puteti sterge accidental întreg
tabelul. Puteti corecta greseala, iar apoi sa dati comenzile corecte si sa salvati
modificarile.
20
Anularea modificarilor pâna la un savepoint:
SQL> UPDATE . . .
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT. . .
SQL> ROLLBACK TO update_done;
Rollback complete.
Se poate anula o parte din tranzactie printr-un rollback implicit daca este detectata o
eroare la executia unei comenzi. Daca o singura comanda DML esueaza în timpul
executiei unei tranzactii, efectul ei este anulat printr-un rollback la nivel de comanda, dar
schimbarile facute de comenzile DML anterioare în tranzactie nu vor fi anulate. Ele pot fi
salvate (commited) sau anulate (rolled back) în mod explicit de catre utilizator.
Oracle executa o comanda COMMIT implicita înainte si dupa orice comanda DDL.
21
Deci, chiar daca comanda voastra DDL nu se executa cu succes, nu puteti anula
comenzile anterioare pentru ca serverul a executat un commit (a salvat modificarile).
Terminati-va tranzactiile explicit, prin executarea unei comenzi COMMIT sau
ROLLBACK.
Consistenta la citire
Consistenta la citire:
22
• Versiunea originala mai veche a datelor din segmentul rollback este scris
înapoi în tabel.
• Toti utilizatorii vad baza de date asa cum era înainte de a începe tranzactia.
Protejarea unei baze de date Oracle este automatizata în întregime si nu necesita actiuni
din partea utilizatorului. Implicit, protejarea are loc pentru toate comenzile SQL cu
exceptia lui SELECT. Mecanismul implicit de protectie în Oracle foloseste în mod
automat cel mai mic nivel aplicabil de restrictionare, astfel furnizând cel mai mare grad
de concurenta existent, precum si integritate maxima a datelor. Oracle permite si
protejarea datelor manual de catre utilizator.
Modurile de protectie
23
Rezumat
Comanda Descriere
Rezumat:
Puteti manipula datele dintr-o baza de date utilizând comenzile: INSERT, UPDATE si
DELETE.
Puteti controla modificarile datelor utilizând comenzile: COMMIT, SAVEPOINT si
ROLLBACK.
Serverul Oracle garanteaza o vedere consistenta a datelor în orice moment.
Protejarea poate fi implicita sau explicita.
În aceste exercitii, veti adauga noi înregistrari la tabelul MY_EMPLOYEE, veti actualiza
si sterge date din tabel si va veti controla tranzactiile.
24
Exercitii:
25