Sunteți pe pagina 1din 6

LABORATOR 7 Limbajul de definire a datelor (CREATE, ALTER, DROP)

O baz de date Oracle poate conine mai multe structuri de date. 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. Instruciunile LDD 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. 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.

Crearea tabelelor CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date [DEFAULT expr], ...); CREATE TABLE nume_tabel [(col1, col2...)] AS subcerere;
Exerciiul

1. Creai tabelul salariat_*** avnd urmtoarea structur: Nume Cod_angajat nume prenume functia sef Data_angajarii varsta email salariu Caracteristici NOT NULL Tip NUMBER(4) VARCHAR2(25) VARCHAR2(25) VARCHAR2(20) NUMBER(4) DATE NUMBER CHAR(10) NUMBER(9,2)

Valoare implicit data curent

Valoare implicit 0

Exerciiul

2. Afiai structura tabelului creat anterior.


NUME PRENUME FUNCTIA SEF DATA_ANG VARSTA EMAIL SALARIU

Se dau urmtoarele valori:


COD

1 2 3 4
Exerciiul Exerciiul Exemplul

..... ..... ..... .....

..... ..... ...... ....

Director functionar economist functionar

null 1 1 1

........ ......... ......... .........

30 25 45 35

null ..... ..... ......

5500 0 3000 1000

3. Inserai n tabelul salariat_*** prima nregistrare din tabelul de mai sus fr s precizai lista de coloane n comanda INSERT.

4. Inserai a doua nregistrare folosind o list de coloane din care excludei data_angajarii i salariul care au valori implicite. Observai apoi rezultatul. 5. Creai tabelul functionar_*** care s conin funcionarii din tabelul salariat_***, avnd urmtoarele coloane: codul, numele, salariul anual i data angajrii. Verificai cum a fost creat tabelul i ce date conine. Modificarea tabelelor Modificarea structurii unui tabel se face cu ajutorul comenzii ALTER TABLE. Modificarea poate consta n: - 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: ALTER TABLE nume_tabel DROP COLUMN coloana; sau ALTER TABLE nume_tabel DROP (coloana);

Observaii:
Exerciiul Exerciiul

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. 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. 6. Adugai o nou coloan tabelului salariat_*** care s conin data naterii. 7. Modificai dimensiunea coloanei nume la 30 si pe cea a salariului la 12 cu 3 zecimale.
2

Exerciiul Exerciiul Exerciiul

8. Modificai tipul coloanei email la VARCHAR2. 9. Modificai valoarea implicit a coloanei data_angajarii la data sistemului+ o zi. 10. Eliminai coloana varsta din tabelul salariat_***.

Eliminarea 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 ; Observaie: Fiind operaie LDD, comanda TRUNCATE are efect definitiv. Redenumirea tabelelor Comanda RENAME permite redenumirea unui tabel, vizualizare sau secven. RENAME nume1_obiect TO nume2_obiect; 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.
Exemplul

11. Redenumii tabelul functionar_*** cu funct_***.

RENAME functionar_*** TO funct_***;

Exerciiul 12. Recreai tabelul functionar_*** utiliznd tabelul funct_***. (CREATE TABLE AS SELECT) Exerciiul

13. Eliminai tabelul funct_***.

Constrngeri Tipuri de constrngeri: NOT NULL - coloane ce nu pot conine valoarea Null; (NOT NULL) UNIQUE - 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 - cheie primar ntre o coloan a tabelului i o alt coloana dintr-un tabel specificat. [FOREIGN KEY nume_col] REFERENCES nume_tabel(nume_coloana)
3

[ 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)). Constrngerile pot fi create o dat cu tabelul sau adugate ulterior cu o comand ALTER TABLE. Adugarea constrngerilor la crearea tabelului (CREATE TABLE) CREATE TABLE [schema.]nume_tabel ( nume_coloana tip_de_date [constrangere_de_coloana], ... ..[constrangere la nivel de tabel])
Exemplul

[DEFAULT

expr]

14. tergei i apoi creai din nou tabelul salariat_*** cu urmtoarea structur. TIP NUMBER(4) VARCHAR2(25) VARCHAR2(25) DATE VARCHAR2(9) NUMBER(4) DATE VARCHAR2(20) NUMBER(12,3) NUMBER(4) CONSTRNGERE Cheie primar NOT NULL data_nasterii<data_angajarii NOT NULL Refer ca i cheie extern cod_ang din acelai tabel unic >0 Combinaia NUME PRENUME s fie unic +

NUME cod_ang nume prenume data_nasterii functia sef data_angajarii Email salariu cod_dept

Observaie: Constrngerile de tip CHECK se pot implementa la nivel de coloan doar dac nu refer o alt coloan a tabelului.

DROP TABLE salariat_***; CREATE TABLE salariat_*** ( cod_ang NUMBER(4) PRIMARY KEY, nume VARCHAR2(25) NOT NULL, prenume VARCHAR2(25), data_nasterii DATE, functia VARCHAR2(9) NOT NULL, sef NUMBER(4) REFERENCES salariat_*** (cod_ang), data_angajarii DATE DEFAULT SYSDATE, email VARCHAR2(20) UNIQUE, salariu NUMBER(9,2) CHECK (salariu > 0), cod_dep NUMBER(4), CONSTRAINT const_c_*** CHECK (data_angajarii > data_nasterii), CONSTRAINT const_u_*** UNIQUE (nume,prenume,data_nasterii)); 15. tergei tabelul salariat_***, iar apoi recreai-l implementnd toate constrngerile la nivel de tabel. Observaie: Constrngerea de tip NOT NULL se poate declara doar la nivel de coloan.
Exerciiul

Exerciiul

16. Creai tabelul departament_*** care s aib urmtoarea structur. TIP NUMBER(4) VARCHAR2(20) VARCHAR2(25) CONSTRNGERI Cheie primar Not null

NUME COD_DEP NUME ORAS

Adugarea constrngerilor ulterior crerii tabelului, eliminarea, activarea sau dezactivarea constrngerilor (ALTER TABLE) - adaug constrngeri (fr NOT NULL) ALTER TABLE nume_tabel ADD [CONSTRAINT nume_constr] tip_constr (coloana); - elimin constrngeri (fr NOT NULL) ALTER TABLE nume_tabel DROP [CONSTRAINT nume_constr] tip_constr (coloana); - adaug constrngerea NOT NULL ALTER TABLE nume_tabel MODIFY coloana NOT NULL; - elimin constrngerea NOT NULL ALTER TABLE nume_tabel MODIFY coloana NULL; - activare/dezactivare constrngere ALTER TABLE nume_tabel MODIFY CONSTRAINT nume_constr ENABLE|DISABLE; sau ALTER TABLE nume_tabel ENABLE| DISABLE nume_constr;
Exerciiul

17. Inserai o nou nregistrare n salariat_*** de forma:


prenume data_n functia sef data_ang email salariu cod_dep

cod nume

N2

P2

11-JUN1960

economist 1

Sysdate

E2

2000

10
5

Ce observai? Introducei nregistrarea dar specificnd valoarea NULL pentru coloana sef.
Exemplul

18. ncercai s adugai o constrngere de cheie extern pe cod_dep din salariat_***. Ce observai?

ALTER TABLE salariat_*** ADD CONSTRAINT cce2_*** departament_*** (cod_dep);

FOREIGN

KEY

(cod_dep)

REFERENCES

Exerciiul 19. Inserai o nou nregistrare n departament_***. Apoi adugai constrngerea de cheie extern definit anterior.

cod_dep 10
Exerciiul

nume loc Economic Bucuresti

20. Inserai noi nregistrri n salariat_***, respectiv n departament_***. Care trebuie s fie ordinea de inserare?
cod nume prenume data_n functia sef data_ang email salariu cod_dep

N3

P3

11-JUN1967 loc Constanta

jurist

Sysdate

E3

2500

20

cod_dep nume 20 Juritic

Exerciiul 21. tergei departamentul 20 din tabelul departament_***. Ce observai? Exemplul 22. tergei constrngerea cce2_***. Recreai aceast constrngere adugnd opiunea

ON DELETE CASCADE. ALTER TABLE salariat_*** DROP CONSTRAINT cce2_***; ALTER TABLE salariat_*** ADD CONSTRAINT cce2_*** FOREIGN KEY (cod_dep) departament_*** (cod_dep) ON DELETE CASCADE;
Exerciiul 23.

REFERENCES

tergei departamentul 20 din tabelul departament_***. Ce observai n tabelul salariat_***? Anulai modificrile.

Exerciiul 24. tergei constrngerea cce2_***. Recreai aceast constrngere adugnd opiunea

ON DELETE SET NULL.


Exemplul 25. ncercai s tergei departamentul 10 din tabelul departament_***. Ce observai?

Consultarea dicionarului datelor Informaii despre tabelele create se gsesc n vizualizrile : USER_TABLES informaii complete despre tabelele utilizatorului curent. ALL_TABLES informaii complete despre tabelele tuturor utilizatorilor. COLS informaii despre coloane. TAB informaii de baz despre tabelele existente n schema utilizatorului curent. Informaii despre constrngeri gsim n : USER_CONSTRAINTS informaii despre constrngerile definite de utilizatorul curent ALL_CONSTRAINTS informaii despre cosntrngerile definite de toi utilizatorii.
6

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