Sunteți pe pagina 1din 10

PROIECTAREA BAZELOR DE DATE-Anul 3 Laborator 1 Limbajul de manipulare a datelor (LMD) - I Limbajul de definire a datelor (LDD) - II Limbajul de manipulare a datelor

(LMD)

Comenzile SQL care alctuiesc LMD permit: regsirea datelor (SELECT); adugarea de noi nregistrri (INSERT); modificarea valorilor coloanelor din nregistrrile existente (UPDATE); adugarea sau modificarea condiionat de nregistrri (MERGE); suprimarea de nregistrri (DELETE). Tranzacia este o unitate logic de lucru, constituit dintr-o secven de comenzi care trebuie s se execute atomic (ca un ntreg) pentru a menine consistena bazei de date. Server-ul Oracle asigur consistena datelor pe baza tranzaciilor, inclusiv n eventualitatea unei anomalii a unui proces sau a sistemului. Tranzaciile ofer mai mult flexibilitate i control n modificarea datelor. Comenzile SQL care alctuiesc LCD sunt: ROLLBACK pentru a renuna la modificrile aflate n ateptare se utilizeaz instruciunea ROLLBACK. n urma execuiei acesteia, se ncheie tranzacia, se anuleaz modificrile asupra datelor, se restaureaz starea lor precedent i se elibereaz blocrile asupra liniilor. COMMIT - determin ncheierea tranzaciei curente i permanentizarea modificrilor care au intervenit pe parcursul acesteia. Instruciunea suprim toate punctele intermediare definite n tranzacie i elibereaz blocrile tranzaciei. Obs: O comand LDD (CREATE, ALTER, DROP) determin un COMMIT implicit. SAVEPOINT - Instruciunea SAVEPOINT marcheaz un punct intermediar n procesarea tranzaciei. n acest mod este posibil mprirea tranzaciei n subtranzacii. Aceast instruciune nu face parte din standardul ANSI al limbajului SQL.

I. Comanda INSERT
1. Inserri mono-tabel Comanda INSERT are urmtoarea sintax simplificat: INSERT INTO obiect [AS alias] [ (nume_coloan [, nume_coloan ] ) ] {VALUES ( {expr | DEFAULT} [, {expr | DEFAULT} ] ) | subcerere} Subcererea specificat n comanda INSERT returneaz linii care vor fi adugate n tabel. Dac n tabel se introduc linii prin intermediul unei subcereri, coloanele din lista SELECT trebuie s corespund, ca numr i tip, celor precizate n clauza INTO. n absena unei liste de coloane n

2
clauza INTO, subcererea trebuie s furnizeze valori pentru fiecare atribut al obiectului destinaie, respectnd ordinea n care acestea au fost definite. Observaii (tipuri de date): Pentru claritate, este recomandat utilizarea unei liste de coloane n clauza INSERT. n clauza VALUES, valorile de tip caracter i dat calendaristic trebuie incluse ntre apostrofuri. Nu se recomand includerea ntre apostrofuri a valorilor numerice, ntruct aceasta ar determina conversii implicite la tipul NUMBER. Pentru introducerea de valori speciale n tabel, pot fi utilizate funcii. Adugarea unei linii care va conine valori null se poate realiza n mod: implicit, prin omiterea numelui coloanei din lista de coloane; explicit, prin specificarea n lista de valori a cuvntului cheie null n cazul irurilor de caractere sau al datelor calendaristice se poate preciza irul vid (''). Observaii (erori): Server-ul Oracle aplic automat toate tipurile de date, domeniile de valori i constrngerile de integritate. La introducerea sau actualizarea de nregistrri, pot aprea erori n urmtoarele situaii: nu a fost specificat o valoare pentru o coloan NOT NULL; exist valori duplicat care ncalc o constrngere de unicitate; a fost nclcat constrngerea de cheie extern sau o constrngere de tip CHECK; exist o incompatibilitate n privina tipurilor de date; s-a ncercat inserarea unei valori avnd o dimensiune mai mare dect a coloanei corespunztoare. 2. Inserari multi-tabel O inserare multi-tabel presupune introducerea de linii calculate pe baza rezultatelor unei subcereri, ntr-unul sau mai multe tabele. Acest tip de inserare, introdus de Oracle9i, este util n mediul data warehouse. Pentru o astfel de inserare, n versiunile anterioare lui Oracle9i erau necesare n operaii independente INSERT INTOSELECT, unde n reprezint numrul tabelelor destinaie. Aceasta presupunea n procesri ale aceleiai surse de date i, prin urmare, creterea de n ori a timpului necesar procesului. Sintaxa comenzii INSERT n acest caz poate fi: Pentru inserri necondiionate: INSERT ALL INTO [INTO] subcerere; Pentru inserri condiionate: INSERT [ALL | FIRST] WHEN condiie THEN INTO [WHEN condiie THEN INTO [ELSE INTO ]] subcerere; - ALL determin evaluarea tuturor condiiilor din clauzele WHEN. Pentru cele a cror valoare este TRUE, se insereaz nregistrarea specificat n opiunea INTO corespunztoare. - FIRST determin inserarea corespunztoare primei clauze WHEN a crei condiie este evaluat TRUE. Toate celelalte clauze WHEN sunt ignorate.

3
Exerciii [I] 1. S se creeze tabelele EMP, DEPT (n irul de caractere pnu, p reprezint prima liter a prenumelui, iar nu reprezint primele dou litere ale numelui dumneavoastr), prin copierea structurii i coninutului tabelelor EMPLOYEES, respectiv DEPARTMENTS. 2. Listai structura tabelelor surs i a celor create anterior. Ce se observ? 3. Listai coninutul tabelelor create anterior. 4. S se insereze departamentul 300, cu numele Programare n DEPT. 5. S se insereze un angajat corespunztor departamentului introdus anterior n tabelul EMP, preciznd valoarea NULL pentru coloanele a cror valoare nu este cunoscut la inserare (metoda implicit de inserare). Determinai ca efectele instruciunii s devin permanente. 6. S se mai introduc un angajat corespunztor departamentului 300, preciznd dup numele tabelului lista coloanelor n care se introduc valori (metoda explicita de inserare). Se presupune c data angajrii acestuia este cea curent (SYSDATE). Salvai nregistrarea. 7. Creai un nou tabel, numit EMP1, care va avea aceeai structur ca i EMPLOYEES, dar nicio nregistrare. Copiai n tabelul EMP1 salariaii (din tabelul EMPLOYEES) al cror comision depete 25% din salariu. 8. Creai 2 tabele emp2 i emp3 cu aceeai structur ca tabelul EMPLOYEES, dar fr nregistrri (acceptm omiterea constrngerilor de integritate). Prin intermediul unei singure comenzi, copiai din tabelul EMPLOYEES: - n tabelul EMP1 salariaii care au salariul mai mic dect 5000; - n tabelul EMP2 salariaii care au salariul cuprins ntre 5000 i 10000; - n tabelul EMP3 salariaii care au salariul mai mare dect 10000. Verificai rezultatele, apoi tergei toate nregistrrile din aceste tabele.

II. Comanda UPDATE


Sintaxa simplificat a comenzii UPDATE este: UPDATE nume_tabel [alias] SET col1 = expr1[, col2=expr2] [WHERE conditie]; sau UPDATE nume_tabel [alias] SET (col1,col2,...) = (subcerere) [WHERE conditie]; Observaii: - de obicei pentru identificarea unei linii se folosete o condiie ce implic cheia primar; - dac nu apare clauza WHERE atunci sunt afectate toate liniile tabelului specificat; - cazurile n care instruciunea UPDATE nu poate fi executat sunt similare celor n care eueaz instruciunea INSERT. Acestea au fost menionate anterior. Exerciii [II] 9. Mrii salariul tuturor angajailor din tabelul EMP cu 5%. Vizualizati, iar apoi anulai modificrile.

4
10. Schimbai jobul tuturor salariailor din departamentul 80 care au comision n 'SA_REP'. Anulai modificrile. 11. S se promoveze Douglas Grant la manager n departamentul 20, avnd o cretere de salariu cu 1000$. 12. Schimbai salariul i comisionul celui mai prost pltit salariat din firm, astfel nct s fie egale cu salariul si comisionul directorului. 13. S se modifice jobul i departamentul angajatului avnd codul 114, astfel nct s fie la fel cu cele ale angajatului avnd codul 205.

III. Comanda DELETE


Sintaxa simplificat a comenzii DELETE este: DELETE FROM nume_tabel [WHERE conditie]; Daca nu se specifica nici o conditie, vor fi terse toate liniile din tabel. Exercitii [III] 14. tergei toate nregistrrile din tabelul DEPT. Anulai modificrile. 15. tergei angajaii care nu au comision. Anulai modificrile. 16. Suprimai departamentele care un au nici un angajat. Anulai modificrile.

Limbajul de definire a datelor (LDD)


n general, instruciunile LDD sunt utilizate pentru definirea structurii corespunztoare obiectelor unei scheme : tabele, vizualizri, vizualizri materializate, indeci, sinonime, clustere, proceduri i funcii stocate, declanatori, pachete stocate etc. Aceste instruciuni permit: crearea, modificarea i suprimarea obiectelor unei scheme i a altor obiecte ale bazei de date, inclusiv baza nsi i utilizatorii acesteia (CREATE, ALTER, DROP); modificarea numelor obiectelor unei scheme (RENAME); tergerea datelor din obiectele unei scheme, fr suprimarea structurii obiectelor respective (TRUNCATE). Implicit, o instruciune LDD permanentizeaz (COMMIT) efectul tuturor instruciunilor precedente i marcheaz nceputul unei noi tranzacii. Instruciunile LDD au efect imediat asupra bazei de date i nregistreaz informaia n dicionarul datelor. Definirea unui obiect presupune : crearea (CREATE), modificarea (ALTER) i suprimarea sa (DROP). Reguli de numire a obiectelor bazei de date Identificatorii obiectelor trebuie s nceap cu o liter i s aib maxim 30 de caractere, cu excepia numelui bazei de date care este limitat la 8 caractere i celui al legturii unei baze de date, a crui lungime poate atinge 128 de caractere.

5
Numele poate conine caracterele A-Z, a-z, 0-9, _, $ i #. Dou obiecte ale aceluiai utilizator al server-ului Oracle nu pot avea acelai nume. Identificatorii nu pot fi cuvinte rezervate ale server-ului Oracle. Identificatorii obiectelor nu sunt case-sensitive.

Definirea tabelelor
1. Crearea tabelelor
Formele simplificate ale comenzii de creare a tabelelor sunt : CREATE TABLE nume_tabel ( coloana_1 tip_date [constrangere_nivel_coloana] [DEFAULT valoare], ......... coloana_n tip_date [constrangere_nivel_coloana] [DEFAULT valoare], [constrangeri_nivel_tabel] ); sau CREATE TABLE nume_tabel [(coloana_1,..., coloana_n)] AS subcerere; Constrngerile definite asupra unui tabel pot fi de urmtoarele tipuri: NOT NULL - coloana nu poate conine valoarea Null; (NOT NULL) UNIQUE pentru coloane sau combinaii de coloane care trebuie s aib valori unice n cadrul tabelului; ( UNIQUE (col1, col2, ) ) PRIMARY KEY - identific n mod unic orice nregistrare din tabel. Echivalent cu NOT NULL + UNIQUE; (PRIMARY KEY (col1, col2, )) FOREIGN KEY - stabilete o relaie de cheie extern ntre o coloan a tabelului i o coloan dintr-un tabel specificat. [FOREIGN KEY nume_col] REFERENCES nume_tabel(nume_coloana) [ ON DELETE {CASCADE| SET NULL}] - FOREIGN KEY este utilizat ntr-o constrngere la nivel de tabel pentru a defini coloana din tabelul copil; - REFERENCES identific tabelul printe i coloana corespunztoare din acest tabel; - ON DELETE CASCADE determin ca, odat cu tergerea unei linii din tabelul printe, s fie terse i liniile dependente din tabelul copil; - ON DELETE SET NULL determin modificarea automat a valorilor cheii externe la valoarea null, atunci cnd se terge valoarea printe. CHECK- o condiie care s fie adevrat la nivel de coloan sau linie (CHECK (conditie)).

Obs: Constrngerile pot fi create odat cu tabelul sau adugate ulterior cu o comand ALTER TABLE.

6
Constrngerile de tip CHECK se pot implementa la nivel de coloan doar dac nu refer o alt coloan a tabelului. In cazul n care cheia primar este compus, ea nu poate fi definit la nivel de coloane, ci doar la nivel de tabel. Constrngerea de tip NOT NULL se poate declara doar la nivel de coloan. Principalele tipuri de date pentru coloanele tabelelor sunt urmtoarele : Tip de date VARCHAR2(n) [BYTE | CHAR] Descriere Definete un ir de caractere de dimensiune variabil, avnd lungimea maxim de n octei sau caractere. Valoarea maxim a lui n corespunde la 4000 octei, iar cea minim este de un octet sau un caracter. Reprezint un ir de caractere de lungime fix avnd n octei sau caractere. Valoarea maxim a lui n corespunde la 2000 octei. Valoarea implicit i minim este de un octet. Reprezint un numr avnd p cifre, dintre care s cifre formeaz partea zecimal Conine iruri de caractere avnd lungime variabil, care nu pot ocupa mai mult de 2GB. Reprezint date calendaristice valide, ntre 1 ianuarie 4712 i.Hr. i 31 decembrie 9999 d.Hr.

CHAR(n) [BYTE | CHAR]

NUMBER(p, s) LONG DATE

2. Modificarea (structurii) tabelelor


Modificarea structurii unui tabel se face cu ajutorul comenzii ALTER TABLE. Forma comenzii depinde de tipul modificrii aduse: adugarea unei noi coloane (nu se poate specifica poziia unei coloane noi n structura tabelului; o coloan nou devine automat ultima n cadrul structurii tabelului) ALTER TABLE nume_tabel ADD (coloana tip_de_date [DEFAULT expr][, ...]); modificarea unei coloane (schimbarea tipului de date, a dimensiunii sau a valorii implicite a acesteia; schimbarea valorii implicite afecteaz numai inserrile care succed modificrii) ALTER TABLE nume_tabel MODIFY (coloana tip_de_date [DEFAULT expr][, ...]); eliminarea unei coloane din structura tabelului: ALTER TABLE nume_tabel DROP COLUMN coloana; sau ALTER TABLE nume_tabel DROP (coloana); Obs: dimensiunea unei coloane numerice sau de tip caracter poate fi mrit, dar nu poate fi micorat dect dac acea coloan conine numai valori null sau dac tabelul nu conine nici o linie. tipul de date al unei coloane poate fi modificat doar dac valorile coloanei respective sunt null.

7
o coloan CHAR poate fi convertit la tipul de date VARCHAR2 sau invers, numai dac valorile coloanei sunt null sau dac nu se modific dimensiunea coloanei. Comanda ALTER permite adugarea unei constrngeri ntr-un tabel existent, eliminarea, activarea sau dezactivarea constrngerilor. Pentru adugare de constrngeri, comanda are forma: ALTER TABLE nume_tabel ADD [CONSTRAINT nume_constr] tip_constr (coloana); Pentru eliminare de constrngeri: ALTER TABLE nume_tabel DROP [CONSTRAINT nume_constr] tip_constr (coloana); Pentru activare/dezactivare constrngere: ALTER TABLE nume_tabel MODIFY CONSTRAINT nume_constr ENABLE|DISABLE; sau ALTER TABLE nume_tabel ENABLE| DISABLE nume_constr;

3. Suprimarea tabelelor
tergerea fizic a unui tabel, inclusiv a nregistrrilor acestuia, se realizeaz prin comanda: DROP TABLE nume_tabel; Pentru tergerea coninutului unui tabel i pstrarea structurii acestuia se poate utiliza comanda : TRUNCATE TABLE nume_tabel ; !!!Obs: Fiind operaie LDD, comanda TRUNCATE are efect definitiv.

4. Redenumirea tabelelor
Comanda RENAME permite redenumirea unui tabel, vizualizare sau secven. RENAME nume1_obiect TO nume2_obiect; Obs: n urma redenumirii sunt transferate automat constrngerile de integritate, indecii i privilegiile asupra vechilor obiecte. Sunt invalidate toate obiectele ce depind de obiectul redenumit, cum ar fi vizualizri, sinonime sau proceduri i funcii stocate. Exerciii [III] 17. S se creeze tabelul ANGAJATI corespunztor schemei relaionale: ANGAJATI(cod_ang, nume, prenume, email, data_ang, job, cod_sef, salariu, cod_dep) n urmtoarele moduri: a) fr precizarea vreunei chei sau constrngeri b) cu precizarea cheilor primare la nivel de linie si a constrangerilor NOT NULL pentru coloanele nume i salariu

8
c) cu precizarea cheii primare la nivel de tabel si a constrngerilor NOT NULL pentru coloanele nume i salariu. Se presupune c valoarea implicit a coloanei data_ang este SYSDATE. Obs: Nu pot exista dou tabele cu acelai nume n cadrul unei scheme, deci creerea unui tabel va fi precedata de suprimarea sa prin comanda : DROP TABLE ANGAJATI ; 18. Adugai urmtoarele nregistrri n tabelul ANGAJATI : Cod_ang 100 101 102 103 104 Nume Nume1 Nume2 Nume3 Nume4 Nume5 Prenume Prenume1 Prenume2 Prenume3 Prenume4 Prenume5 Email Null Nume2 Nume3 Null Nume5 Data_ang Null 02-02-2004 05-06-2000 Null Null Job Director Inginer Programator Inginer Programator Cod_sef null 100 101 100 101 Salariu 20000 10000 5000 9000 3000 Cod_dep 10 10 20 20 30

Completai valorile coloanelor nume i prenume cu cele corespunztoare unor colegi din grupa. Prima si a patra nregistrare vor fi introduse specificnd coloanele pentru care introducei date efectiv (inserare explicit), iar celelalte vor fi inserate fr precizarea coloanelor n comanda INSERT (inserare explicit). Salvai comenzile de inserare ntr-un fiier p2l3.sql. 19. Creai tabelul ANGAJATI_10, prin copierea angajailor din departamentul 10 din tabelul ANGAJATI. Listai structura noului tabel. Ce se observ ? 20. Introduceti coloana comision in tabelul ANGAJATI. Coloana va avea tipul de date NUMBER(4,2). 21. Este posibil modificarea tipului coloanei salariu n NUMBER(6,2)? 22. Setai o valoare DEFAULT pentru coloana salariu. 23. Modificai tipul coloanei comision n NUMBER(2, 2) i al coloanei salariu la NUMBER(10,2), n cadrul aceleiai instruciuni. 24. Actualizati coloana comision, setnd-o la valoarea 0.1 pentru salariaii al cror job ncepe cu litera P. (UPDATE) 25. Modificai tipul de date al coloanei email n VARCHAR2. 26. Adugai coloana nr_telefon n tabelul ANGAJAT, setndu-i o valoare implicit. 27. Vizualizai nregistrrile existente. Suprimai coloana nr_telefon. Ce efect ar avea o comand ROLLBACK n acest moment? 28. Redenumii tabelul ANGAJATI n ANGAJATI3. 29. Consultai vizualizarea TAB din dicionarul datelor. Redenumii ANGAJAT3 n ANGAJATI. 30. Suprimai coninutul tabelului ANGAJATI_10, fr a suprima structura acestuia. 31. Creai i tabelul DEPARTAMENTE, corespunztor schemei relaionale : DEPARTAMENTE (cod_dep, nume, cod_director) specificnd doar constrngerea NOT NULL pentru nume (nu precizai deocamdat constrngerea de cheie primar).

9
32. Introducei urmtoarele nregistrri n tabelul DEPARTAMENTE : Cod_dep 10 20 30 Nume Administrativ Proiectare IT Cod_director 100 101 Null

33. Se va preciza apoi cheia primara cod_dep (comanda ALTER). Obs: Introducerea unei constrngeri dup crearea tabelului, presupune ca toate liniile existente n tabel la momentul respectiv s satisfac noua constrngere. Acest mod de specificare a constrngerilor permite numirea acestora. In situaia in care constrngerile sunt precizate la nivel de coloan sau tabel (n CREATE TABLE) ele vor primi implicit nume atribuite de sistem, dac nu se specific vreun alt nume ntr-o clauz CONSTRAINT. 34. S se precizeze constrngerea de cheie extern pentru coloana cod_dep din ANGAJAT. a) fr suprimarea tabelului (ALTER TABLE); b) prin suprimarea i recrearea tabelului, cu precizarea noii constrngeri la nivel de coloan ({DROP, CREATE} TABLE). De asemenea, se vor mai preciza constrngerile (la nivel de coloan, dac este posibil): - PRIMARY KEY pentru cod_ang; - FOREIGN KEY pentru cod_sef; - UNIQUE pentru combinaia nume + prenume; - UNIQUE pentru email ; - NOT NULL pentru nume, email ; - verificarea cod_dep >0 ; - verificarea ca salariul sa fie mai mare dect comisionul*100 ; 35. Suprimai i recreai tabelul, specificnd toate constrngerile la nivel de tabel (n msura n care este posibil). 36. Reintroducei date n tabel, utiliznd i modificnd, dac este necesar fiierul p2l3.sql. 37. Ce se ntmpl dac se ncearc suprimarea tabelului DEPARTAMENTE? DROP TABLE departamente ; 38. Introducei constrngerea NOT NULL asupra coloanei email. 39. (Incercai s) adugai o nou nregistrare n tabelul ANGAJATI, care s corespund codului de departament 50. Se poate? 40. Adugai un nou departament, cu numele Analiza, codul 60 i directorul null n DEPARTAMENTE. COMMIT. 41. (Incercai s) tergei departamentul 20 din tabelul DEPARTAMENTE. Comentai. 42. tergei departamentul 60 din DEPARTAMENTE. ROLLBACK. 43. (Incercai s) introducei un nou angajat, specificnd valoarea 114 pentru cod_sef. Ce se obine ?

10
44. Adugai un nou angajat, avnd codul 114. Incercai din nou introducerea nregistrrii de la exerciiul precedent. ?? Ce concluzii reies din exerciiile precedente ? Care este ordinea de inserare, atunci cnd avem constrngeri de cheie extern ? 45. Se dorete tergerea automat a angajailor dintr-un departament, odat cu suprimarea departamentului. Pentru aceasta, este necesar introducerea clauzei ON DELETE CASCADE n definirea constrngerii de cheie extern. Suprimai constrngerea de cheie extern asupra tabelului ANGAJATI i reintroducei aceast constrngere, specificnd clauza ON DELETE CASCADE. 46. tergei departamentul 20 din DEPARTAMENTE. Ce se ntmpl ? Rollback. 47. Introducei constrngerea de cheie extern asupra coloanei cod_director a tabelului DEPARTAMENTE. Se dorete ca tergerea unui angajat care este director de departament s atrag dup sine setarea automat a valorii coloanei cod_director la null. 48. tergei angajatul avnd codul 114 din tabelul ANGAJAT. Analizai efectele comenzii. Rollback. 49. Adugai o constrngere de tip check asupra coloanei salariu, astfel nct acesta s nu poat depi 30000. 50. Incercai actualizarea salariului angajatului 100 la valoarea 35000. 51. Dezactivai constrngerea creat anterior i rencercai actualizarea. Ce se ntmpl dac ncercm reactivarea constrngerii?

S-ar putea să vă placă și