Sunteți pe pagina 1din 75

Platform de e-learning i curricul e-content pentru nvmntul superior tehnic

Baze de date 1 4. SQL - Data Definition Language (DDL)

STUD
MATR ---1456 1325 1645 3145 2146 3251 2215 4311 3514 1925 2101 4705 NUME AN GRUPA DATAN LOC TUTOR PUNCTAJ CODS ------- -- ------ --------- ---------- ----- ------- ---GEORGE 4 1141A 12-MAR-82 BUCURESTI 2890 11 VASILE 2 1122A 05-OCT-84 PITESTI 1456 390 11 MARIA 3 1131B 17-JUN-83 PLOIESTI 1400 11 ION 1 2112B 24-JAN-85 PLOIESTI 3251 1670 21 STANCA 4 2141A 15-MAY-82 BUCURESTI 620 21 ALEX 5 2153B 07-NOV-81 BRASOV 1570 21 ELENA 2 2122A 29-AUG-84 BUCURESTI 2146 890 21 ADRIAN 3 2431A 31-JUL-83 BUCURESTI 450 24 FLOREA 5 2452B 03-FEB-81 BRASOV 3230 24 OANA 2 2421A 20-DEC-84 BUCURESTI 4311 760 24 MARIUS 1 2412B 02-SEP-85 PITESTI 3514 310 24 VOICU 2 2421B 19-APR-84 BRASOV 4311 1290 24

SPEC si BURSA
CODS ----11 21 24 NUME ---------MATEMATICA GEOGRAFIE ISTORIE DOMENIU --------------STIINTE EXACTE UMANIST UMANIST

TIP PMIN PMAX SUMA -------------------- ----- ----- ----FARA BURSA 0 399 BURSA SOCIALA 400 899 100 BURSA DE STUDIU 900 1799 150 BURSA DE MERIT 1800 2499 200 BURSA DE EXCEPTIE 2500 9999 300
3

OBIECTIV
Scopul acestui capitol este de a prezenta elementele limbajului pentru descrierea datelor (DDL) referitoare la: Tipurile de date permise pentru coloanele tabelelor, Crearea de noi tabele, Constrngeri de integritate, Dicionarul de date al sistemului.

TIPURI DE DATE
Sistemul Oracle pune la dispoziie un set optim de tipuri de date care pot fi asociate coloanelor unei tabele, grupate n mai multe categorii: Tipuri numerice scalare Tipuri scalare ir de caractere Tipuri scalare binare Tipuri pentru date calendaristice, timp i interval de timp Tipuri LOB (large object) Tipuri compuse: TABLE i VARRAY
5

TIPURI DE DATE (2)


Aceste tipuri, cu unele diferene n ceea ce privete dimensiunea maxim admis, pot fi folosite i n limbajul procedural PL/SQL. n continuare sunt prezentate tipurile din primele cinci categorii. Crearea unei tabele cu coloane de tip TABLE i VARRAY i manipularea datelor de acest fel nu este prezentat n acest capitolul.
6

TIPURI NUMERICE SCALARE


Tip NUMBER Descriere Numr real de dimensiune variabil, cu 38 de cifre semnificative, avnd valori ntre 1E-130 i 10E125. NUMBER(n) Numr ntreg cu maxim n cifre NUMBER(n, z) Numr real cu n cifre dintre care z zecimale DEC, DECIMAL, Subtipuri pentru NUMBER. Numere n NUMERIC virgul fix cu 38 de cifre semnificative. DOUBLE Subtipuri pentru NUMBER. Numere n PRECISION, FLOAT virgul mobil cu 38 de cifre semnificative. REAL Subtip pentru NUMBER. Numere n virgul mobil cu 18 cifre semnificative.

TIPURI NUMERICE SCALARE (2)


Tip INTEGER, INT, SMALLINT BINARY_INTEGER NATURAL, POSITIVE NATURALN, POSITIVEN SIGNTYPE PLS_INTEGER Descriere Subtipuri pentru NUMBER. Numere ntregi cu maxim 38 de cifre ntregi ntre -231 i 231. Subtipuri pentru BINARY_INTEGER. Numere ntregi non-negative, respectiv pozitive. Subtipuri pentru BINARY_INTEGER. Numere ntregi nenule non-negative, respectiv pozitive. Subtip al BINARY_INTEGER. Poate lua doar valorile -1, 0 i 1. ntregi ntre -231 i 231. Similar cu BINARY_INTEGER dar operaiile cu astfel de numere sunt mai rapide i n caz de depire se ridic o excepie.

SIRURI
Tip CHAR(n), CHAR CHARACTER, CHARACTER(n) NCHAR(n) VARCHAR2(n) STRING(n), VARCHAR(n) NVARCHAR(n) Descriere ir de caractere de lungime fix, egal cu n. Valoarea maxim pentru n este 2000. Dac n lipsete, ir de caractere de lungime 1. Identice cu cele anterioare. Introduse pentru compatibilitatea cu alte sisteme. Analog cu CHAR dar poate stoca iruri scrise n seturi de caractere naionale (multioctet) ir de caractere de lungime variabil egal cu n. Valoarea maxim pentru n este 4000. Identice cu VARCHAR2, introduse pentru compatibilitatea cu alte sisteme Analog cu VARCHAR. Poate stoca iruri scrise n seturi de caractere naionale (multioctet)

SIRURI (2)
Tip LONG Descriere ir de caractere de maxim 231 octei. Este permis doar o singur coloan de acest tip pentru o tabel. Poate stoca un identificator pentru o linie dintr-o tabel. Pentru conversia la/de la ir de caractere (18 caractere) se pot folosi funciile SQL ROWIDTOCHAR respectiv CHARTOROWID. Universal ROWID. Poate stoca un identificator logic i fizic de linie ntr-o tabel, indexat sau nu precum i un identificator de linie extern (non-Oracle). Nu este necesar folosirea funciilor de conversie la/de la ir de caractere (conversie automat).

ROWID

UROWID

10

TIPURI BINARE
Tip RAW(n) LONG RAW Descriere Similar cu VARCHAR2 dar conine date binare. Valoarea maxim pentru n este de 2000. Similar cu LONG dar conine date binare.

11

DATE, TIMP SI INTERVAL


Tip DATE TIMESTAMP[(n)] Descriere Dat calendaristic (secol, an, lun, zi, or, minut, secund). Extensie a tipului DATE. Conine i fraciuni de secund. Dac este prezent, n specific numrul de zecimale pentru acestea. Implicit n=6 Extinde tipul TIMESTAMP coninnd i o diferen ntre ora local i ora universal (GMT) Similar cu tipul anterior dar la stocarea n baza de date valorile sunt convertite la ora zonei bazei de date iar la regsire la ora zonei aplicaiei client. Se stocheaz intervale de ani i luni. Precizia n specific numrul de cifre pentru an (ntre 0 i 4, implicit 2). Similar cu tipul anterior, dar pentru intervale de zile i secunde. valorile z i s sunt preciziile pentru zile, respectiv secunde (0-9, implicit 2 pentru z i 6 pentru s).

TIMESTAMP [(n)] WITH TIME ZONE TIMESTAMP [(n)] WITH LOCAL TIME ZONE INTERVAL YEAR [(n)] TO MONTH INTERVAL DAY [(z)] TO SECOND [(s)]

12

TIPURI LARGE OBJECT


Aceste tipuri, introduse n ultimele versiuni ale sistemului, permit stocarea unor cantiti mari de date pe coloanele unei tabele sau a unei referine (numit i locator) ctre un fiier extern bazei de date. Manipularea valorilor de acest tip se face n PL/SQL cu ajutorul pachetelor de proceduri i funcii puse la dispoziie de sistem. Caracteristicile lor sunt urmtoarele:
13

TIPURI LOB cont.


Tip CLOB NCLOB Descriere ir de caractere de pn la 4 GB. Se recomand ca n aplicaiile noi s fie folosit n locul lui LONG. Similar cu CLOB dar se pot stoca iruri utiliznd seturi naionale de caractere. Dimensiunea maxim este de asemenea de 4 GB Date binare de dimensiune pn la 4 GB Date binare de dimensiune pn la 4 GB stocate n fiiere externe. Nu particip la tranzacii, replicare i pot fi doar citite nu i modificate.

BLOB BFILE

14

CREATE TABLE
Cea mai simpl form a cererii SQL de creare a unei noi tabele are urmtoarea sintax: CREATE TABLE [schema.]nume_tabela (nume_coloana_1 tip_coloana_1 [DEFAULT expresie_1], nume_coloana_2 tip_coloana_2 [DEFAULT expresie_2], . . . nume_coloana_n tip_coloana_n [DEFAULT expresie_n]); unde: nume_tabela este numele tabelei care se creaz, nume_coloana_1, nume_coloana_2, ... sunt numele coloanelor acesteia
15

CREATE TABLE cont.


tip_coloana_1, tip_coloana_2, ... reprezint tipurile de date pentru coloanele respective, alese dintre cele prezentate n paragraful anterior, cu specificarea, dac este cazul, a dimensiunii maxime sau preciziei, clauza opional DEFAULT expresie_i specific o valoare implicit care este introdus automat n acea coloan n cazul n care la adugarea unei noi linii nu se specific o valoare pe coloana respectiv, schema este numele de utilizator Oracle al proprietarului noii tabele. Valoarea implicit pentru acesta este numele utilizatorului care execut cererea de creare.
16

TREBUIE CA:
Utilizatorul are drepturile necesare (dreptul sau privilegiul - n terminologia uzual - de CREATE TABLE). Exist spaiu de stocare pentru noua tabel. Numele tabelei i al coloanelor respect restriciile uzuale Oracle (maxim 30 de caractere, ncepe cu o liter, conine litere, cifre i caracterele _, $, #, nu este cuvnt rezervat Oracle). Sunt permise i alte caractere dac numele este inclus ntre ghilimele. Nu exist deja un alt obiect cu acelai nume n aceeai schem (pentru acelai utilizator Oracle).

17

LITERE MARI SI MICI


Ca i n cazul cuvintelor cheie, literele mici i cele mari sunt considerate egale n numele de tabele i coloane. Exemplu: tabela de studeni din exemple este aceeai dac la creare se folosete oricare din numele STUD, Stud sau StuD.

18

OBSERVATII
Expresia din clauza opional DEFAULT trebuie s se evalueze la o valoare de tip compatibil cu al coloanei respective. Ea poate conine:
Constante numerice sau ir de caractere, Funcii SQL, inclusiv SYSDATE sau USER. dar nu poate conine: Numele unei coloane, Numele unei pseudocoloane. (de exemplu pseudocoloanele definite de o secven: NEXTVAL sau CURRVAL).
19

EXEMPLU
CREATE TABLE STUD( MATR NUMBER(4), NUME VARCHAR2(10), AN NUMBER(1) DEFAULT 1, GRUPA VARCHAR2(6), DATAN DATE, LOC VARCHAR2(10) DEFAULT 'BUCURESTI', TUTOR NUMBER(4), PUNCTAJ NUMBER(4) DEFAULT 0, CODS NUMBER(2) );
20

OBSERVAM CA:
MATR, AN, TUTOR, PUNCTAJ i CODS care conin valori de tip numr ntreg au fost definite ca NUMBER(n) unde n este 1, 2 sau 4, NUME, GRUPA i LOC sunt iruri de caractere de lungime variabil definite ca VARCHAR2, DATAN care conine data naterii studentului este de tipul DATE, Pentru unele dintre coloane au fost asociate valori implicite care vor fi stocate automat n acestea dac la inserarea unei noi linii nu se specific o valoare, nul sau nenul. Valorile implicite sunt compatibile cu tipul coloanelor respective (ntreg sau ir de caractere, dup caz).
21

Crearea unei tabele n care se stocheaz date despre evenimente: momentul de nceput, durata i o descriere a acestora.
CREATE TABLE EVENIMENT( COD NUMBER(10), "MOMENT INCEPUT" TIMESTAMP(3) WITH LOCAL TIME ZONE, DURATA INTERVAL DAY(2) TO SECOND(3), "DESCRIERE (PE LARG)" LONG);

22

OBSERVAM CA:
COD: un numr ntreg de maxim 10 cifre, MOMENT NCEPUT: conine momentul nceputului unui eveniment n forma: data, ora, minutul, secunda i miimile de secund: TIMESTAMP(3) arat c fraciunile de secund sunt memorate cu 3 zecimale. Numele coloanei conine un spaiu i a trebuit pus ntre ghilimele. DURATA: durata evenimentului n zile, ore, minute, secunde i fraciuni de secund. Numrul de zile poate avea maxim 2 cifre iar numrul de secunde maxim 3 zecimale. DESCRIERE (PE LARG): conine un text de descriere a evenimentului care poate avea pn la 2 GB caractere. Se folosesc ghilimelele pentru c numele coloanei conine spaii i paranteze.
23

CREATE din SELECT


CREATE TABLE [schema.]nume_tabela [(descriere_coloana_1, ..., descriere_coloana_n)] AS cerere_SELECT;

Se creaz o tabel avnd numele specificat i aceeai structur cu a rezultatului returnat de SELECT.
24

CREATE din SELECT (2)


Descrierea coloanelor nu este prezent n cerere:
Numele coloanelor tabelei create precum i tipul acestora este identic cu al celor din rezultatul cererii SELECT. Noua tabel nu motenete nici una dintre constrngerile de integritate ale tabelei/tabelelor din care provine rezultatul. Dac n lista de expresii din clauza SELECT exist unele care nu returneaz pentru capul de tabel al rezultatului un nume valid de coloan este obligatorie folosirea unor aliasuri de coloan.
25

CREATE din SELECT (3)


CREATE TABLE STUD11 AS SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT" FROM STUD WHERE CODS = 11; Coninutul tabelei STUD11 va fi urmtorul: MATR NUME PUNCTAJ MARIT ----- ---------- ------------1456 GEORGE 3179 1325 VASILE 429 1645 MARIA 1540 iar descrierea structurii sale este: Nume coloana Tip ------------------------MATR NUMBER(4) NUME VARCHAR2(10) NUMBER PUNCTAJ MARIT
26

CREATE din SELECT (4)


Crearea tabelei se face inclusiv n cazul n care cererea SELECT nu returneaz nici o linie. De exemplu: CREATE TABLE STUD100 AS SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT" FROM STUD WHERE CODS = 100; va avea ca efect crearea tabelei STUD100 avnd aceeai structur cu STUD11 dar aceasta nu va conine nici o linie.
27

CREATE din SELECT (5)


Cererea conine descrierea coloanelor: Descrierea unei coloane are urmtoarea form: nume_coloana [DEFAULT expresie] [constrngeri_integritate] Numrul de descrieri de coloan trebuie s fie egal cu numrul de coloane din rezultatul cererii SELECT. Numele coloanelor tabelei create este cel din descriere iar tipul lor este identic cu al celor din rezultatul cererii SELECT. Dac descrierea unei coloane conine clauza DEFAULT expresie, se asociaz acestei coloane valoarea implicit respectiv. Noua tabel nu motenete nici una dintre constrngerile de integritate ale tabelei/tabelelor din care provine rezultatul dar primete constrngerile de integritate din descriere, dac acestea exist
28

CREATE din SELECT (6)


CREATE TABLE STUD11 (NUMAR DEFAULT 0 NOT NULL, NUME, PUNCTE NOT NULL) AS SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT" FROM STUD WHERE CODS = 11; Coninutul tabelei este acelai, ultima coloan are alt nume, prima are o valoare implicit iar dou dintre ele au asociat o constrngere de tip NOT NULL (nu se pot stoca valori nule pe acele coloane): Nume coloana Null? Tip Implicit -------------- -------- ------------- --------NUMAR NOT NULL NUMBER(4) 0 NUME VARCHAR2(10) PUNCTE NOT NULL NUMBER
29

CONSTRANGERI
Constrngerile de integritate reprezint reguli pe care valorile coninute ntr-o tabel trebuie s le respecte. Ele previn introducerea de date eronate n baza de date i definesc forma corect a valorilor respective dar nu iau n consideraie semnificaia acestora. Constrngerile de integritate sunt verificate automat de sistemul de gestiune atunci cnd au loc operaii de modificare a coninutului tabelelor (adugare, tergere i modificare linii). n cazul n care noile valori nu sunt valide operaia de modificare este rejectat de sistem i se genereaz o eroare.
30

TIPURI DE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
31

CONSTRANGERI (2)
Fiecare constrngere de integritate poate avea asociat un nume specificat la crearea tabelei care permite activarea sau dezactivarea constrngerii i alte operaii cu aceasta. n cazul n care nu se asociaz un astfel de nume sistemul genereaz automat unul. Locul definirii unei constrngeri de integritate n cererea de creare a unei tabele poate fi:
32

CONSTRANGERI (3)
n descrierea unei coloane, dac acea constrngere se refer doar la aceasta (uzual se spune despre o astfel de constrngere c este definit la nivel de coloan), n continuarea listei de descrieri de coloane (la nivel de tabel). n funcie de locul unde se gsete, sintaxa definirii unei constrngeri poate fi diferit. Pentru fiecare tip de constrngere sunt prezentate ambele sintaxe i exemple de folosire a lor.
33

DETALIERE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
34

NOT NULL
Acest tip de constrngere se aplic unei coloane a noii tabele i specific faptul c aceasta nu poate conine valori nule. El poate fi definit doar la nivel de coloan i are urmtoarea sintax:
coloana [CONSTRAINT nume_constr] NOT NULL

35

EXEMPLU
CREATE TABLE SPEC (CODS NUMBER(2), NUME VARCHAR2(10) CONSTRAINT NUMENENUL NOT NULL, DOMENIU VARCHAR2(15) NOT NULL);

36

DETALIERE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
37

PRIMARY KEY
Sintaxa la nivel de coloan:
coloana [CONSTRAINT nume_constrangere] PRIMARY KEY

Sintaxa la nivel de tabel:


[,CONSTRAINT nume_constrangere] PRIMARY KEY(lista_coloane)

38

EXEMPLE
CREATE TABLE SPEC( CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY KEY, NUME VARCHAR2(10), DOMENIU VARCHAR2(15)); Si la nivel de tabela: CREATE TABLE SPEC( CODS NUMBER(2), NUME VARCHAR2(10), DOMENIU VARCHAR2(15), CONSTRAINT SPEC_PK PRIMARY KEY(CODS));
39

PK DIN >1 ATRIBUT


CREATE TABLE BURSA( PMIN NUMBER(4), PMAX NUMBER(4), TIP VARCHAR2(20), SUMA NUMBER(4), CONSTRAINT BURSA_PK PRIMARY KEY(PMIN,PMAX));

40

DETALIERE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
41

UNIQUE
Sintaxa la nivel de coloan:
coloana [CONSTRAINT nume_constrangere] UNIQUE

Sintaxa la nivel de tabel:


[,CONSTRAINT nume_constrangere] UNIQUE(lista_coloane)

42

EXEMPLUL 1
Dac n tabela de SPEC nu pot exista niciodat dou specializri cu acelai nume, definiia anterioar se completeaz cu o constrngere de tip UNIQUE:
CREATE TABLE SPEC( CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY KEY, NUME VARCHAR2(10) CONSTRAINT NUMES_UNIC UNIQUE, DOMENIU VARCHAR2(15));
43

EXEMPLUL 1 cont.
Aceeasi constrangere, la nivel de tabela:
CREATE TABLE SPEC( CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY KEY, NUME VARCHAR2(10), DOMENIU VARCHAR2(15), CONSTRAINT NUMES_UNIC UNIQUE(NUME));

44

EXEMPLUL 2
n tabela BURSA nu pot exista dou burse cu aceeai sum. Cererea de creare anterioar devine: CREATE TABLE BURSA( PMIN NUMBER(4), PMAX NUMBER(4), TIP VARCHAR2(20), SUMA NUMBER(4) CONSTRAINT SUMA_UNICA UNIQUE, CONSTRAINT BURSA_PK PRIMARY KEY(PMIN, PMAX)); n acest caz n tabel nu pot exista dou linii care conin aceeai valoare nenul pe coloana SUMA dar pot exista oricte linii cu valori nule pe aceast coloan.
45

CE E UNIC?
n cazul n care o cheie definit cu UNIQUE conine mai multe coloane, verificarea se face astfel: nu exist dou linii care au aceleai valori nenule pentru toate coloanele cheii. nu exist dou linii care au aceleai valori nenule pentru unele coloane ale cheii i valori nule n rest. Exemplu: n cazul unei tabele NUMERE creat cu cererea:
CREATE TABLE NUMERE( NUMAR1 NUMBER(4), NUMAR2 NUMBER(4), UNIQUE(NUMAR1, NUMAR2));

46

CONTINUT VALID
NUMAR1 NUMAR2 ------ -----NULL NULL NULL NULL 1000 2000 1000 3000 NULL 2000 1000 NULL

47

CONTINUT INVALID
NUMAR1 NUMAR2 ------ -----NULL NULL NULL NULL 1000 2000 1000 3000 NULL 2000 1000 NULL 1000 2000 NULL 2000 1000 NULL
48

DETALIERE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
49

FOREIGN KEY
Prin aceast constrngere valorile unei coloane/unor coloane sunt forate s fie doar dintre cele ale cheii unei tabele (cheie primar sau UNIQUE). Coloanele constrnse n acest fel formeaz ceea ce se numete n terminologia de specialitate o cheie straina sau cheie externa iar constrngerea mai este denumit i de integritate referentiala.
50

SINTAXA
La nivel de coloan: coloana [CONSTRAINT nume_constrangere] REFERENCES tabela(coloana) [ON DELETE CASCADE | ON DELETE SET NULL] La nivel de tabel: [,CONSTRAINT nume_constrangere] FOREIGN KEY(lista_coloane) REFERENCES tabela(lista_coloane) [ON DELETE CASCADE | ON DELETE SET NULL]
51

n cazul tabelei STUD avem dou coloane care pot avea asociat o astfel de constrngere:
Coloana CODS poate fi constrns s conin doar valori ale cheii primare a tabelei SPEC (format dintr-o coloan cu acelai nume - CODS). Coloana TUTOR poate fi constrns s conin doar valori nenule ale cheii primare a lui STUD MATR.

n acest caz cererea anterioara de creare pentru STUD devine:


52

STUD:
CREATE TABLE STUD( MATR NUMBER(4) PRIMARY KEY, NUME VARCHAR2(10), AN NUMBER(1) DEFAULT 1, GRUPA VARCHAR2(6), DATAN DATE, LOC VARCHAR2(10) DEFAULT 'BUCURESTI', TUTOR NUMBER(4) REFERENCES STUD(MATR), PUNCTAJ NUMBER(4) DEFAULT 0, CODS NUMBER(2), CONSTRAINT CODS_FK FOREIGN KEY(CODS) REFERENCES SPEC(CODS));
53

OBSERVATII
n cazul n care tabela SPEC nu exist nc sistemul va semnala eroarea: ORA-00942: table

or view does not exist

n cazul n care tabela SPEC exist dar nu are cheia CODS se semnaleaz eroarea: ORA-02270:

no matching unique or primary key for this column-list ORA-02449: unique/primary keys n table referenced by foreign keys

Dup crearea lui STUD, dac se ncearc tergerea tabelei SPEC se semnaleaz eroarea:

54

OBSERVATII cont.
La inserarea de noi linii n tabela STUD, acestea trebuie s conin pe coloanele CODS i TUTOR fie valori care exist deja n SPEC.CODS i STUD.MATR, fie valori nule. La ncercarea de a terge linii din tabelele SPEC i STUD, dac acestea au valoari ale chei referite n STUD prin constrngerile de mai sus se va semnala de asemenea o eroare. La ncercarea de a modifica valorile cheii n linii din tabelele SPEC i STUD, dac acestea sunt referite n STUD se va semnala de asemenea o eroare.
55

CLAUZA ON DELETE
n cazul n care se dorete ca o linie dintr-o tabel coninnd o valoare de cheie referit ntr-o alt tabel (sau n aceeai tabel) s poat fi tears fr a se obine un mesaj de eroare, la definirea constrngerii se poate specifica modul n care se trateaz aceast tergere din perspectiva tabelei care refer valoarea:
Daca se dorete ca la tergerea liniei coninnd o valoare de cheie s fie terse suplimentar i toate liniile care refer aceast valoare, se specific ON DELETE CASCADE Dac se dorete ca liniile care refer valoarea cheii respective s nu fie terse, se specific ON DELETE SET NULL care are urmtorul efect: n toate liniile care refer acea valoare ea este nlocuit cu valori nule.
56

EXEMPLU
CREATE TABLE STUD( MATR NUMBER(4) PRIMARY KEY, . . . . . . . . . . . . . . . . . . . TUTOR NUMBER(4) REFERENCES STUD(MATR) ON DELETE SET NULL, . . . . . . . . . . . . . . . . . . . CONSTRAINT CODS_FK FOREIGN KEY(CODS) REFERENCES SPEC(CODS) ON DELETE CASCADE);

57

EXEMPLU cont.
La tergerea unei specializri din tabela SPEC vor fi teri automat i toi studenii din tabela STUD avnd pe coloana CODS codul acesteia. La tergerea unui student care este tutorul altor studeni, automat acestora li se va modifica valoarea pe coloana TUTOR la una nul. Tabela SPEC poate fi golit - ceea ce va antrena i golirea tabelei STUD - dar nu tears.
58

FK PENTRU UNIQUE
n cazul n care constrngerea se definete pentru o cheie de tip UNIQUE (care poate conine i valori nule) ea este verificat pentru cheile strine formate doar din valori nenule.

59

DETALIERE CONSTRANGERI
NOT NULL: valorile nu pot fi nule PRIMARY KEY: definete cheia primar a unei tabele UNIQUE: definete o alt cheie a tabelei FOREIGN KEY: definete o cheie strin (extern) CHECK: introduce o condiie (expresie logic).
60

CHECK
Prin acest tip de constrngeri valorile aflate pe o linie a tabelei sunt forate s verifice o condiie (expresie logic). Aceasta poate conine toate elementele prezentate anterior pentru conditii, inclusiv apeluri de funcii, cu cteva excepii: apelurile unor funcii ca SYSDATE, USER, UID referina la pseudocoloanele NEXTVAL, CURRVAL (specifice secvenelor), LEVEL i ROWNUM) subcereri. O aceeai coloan poate participa la mai multe constrngeri de acest tip, avnd fiecare o alt condiie asociat. Condiia se evalueaz doar la nivelul liniei respective, fr a se putea lua n considerare valori aflate pe alte linii ale tabelei.
61

SINTAXA
La nivel de coloan:
coloana [CONSTRAINT nume_constrangere] CHECK (expresie_logica)

La nivel de tabel:
[,CONSTRAINT nume_constrangere] CHECK (expresie_logica)

62

EXEMPLU
Tabela BURSA poate avea asociate mai multe constrngeri care verific urmtoarele condiii:
PMIN i PMAX sunt pozitive PMIN < PMAX SUMA este ntre 0 i 500

Cererea de creare va fi:


CREATE TABLE BURSA( PMIN NUMBER(4) CHECK (PMIN >= 0), PMAX NUMBER(4) CHECK (PMAX >= 0), TIP VARCHAR2(20), SUMA NUMBER(4) CHECK (SUMA BETWEEN 0 AND 500), CONSTRAINT PMINPMAX CHECK (PMIN < PMAX));

63

EXEMPLU cont.
n cazul n care pe coloanele respective se gsesc valori nule, linia nu este rejectat ci se consider c verific expresia logic. Pentru tabela BURSA definit ca mai sus se pot introduce linii avnd valori nule pentru unele din coloanele PMIN, PMAX i SUMA fr a se semnala violarea constrngerilor de integritate de tip CHECK. Expresia logic asociat unei constrngeri CHECK poate fi compus: cererea de creare de mai sus poate fi rescris prin combinarea tuturor condiiilor n una singur:
64

EXEMPLU cont.
CREATE TABLE BURSA( PMIN NUMBER(4), PMAX NUMBER(4), TIP VARCHAR2(20), SUMA NUMBER(4), CONSTRAINT BURSA_CK CHECK (PMIN < PMAX AND PMIN >= 0 AND PMAX >= 0 AND SUMA BETWEEN 0 AND 500));

65

DICTIONARUL DE DATE
Una dintre cerinele fundamentale pentru ca un sistem de gestiune a bazelor de date s fie considerat cu adevrat relaional este aceea ca datele interne ale acestuia s fie organizate i stocate n acelai mod cu datele utilizatorilor i aplicaiilor care l folosesc. n acest sens, i sistemul Oracle i ine aceste date, numite uzual dictionarul de date al sistemului, sub form de tabele, iar utilizatorii care au drepturile necesare le pot accesa fie direct fie folosind o serie de vederi i sinonime puse la dispoziie de sistem.
66

DICTIONARUL DE DATE cont.


Exist mai multe categorii de vederi prin care uzual aceste date sunt accesate, fiecare avnd ca i caracteristic un prefix al numelui care definete categoria respectiv. Cele mai folosite vederi intr n categoriile definite de prefixele urmtoare:
Prefixul USER_ este comun vederilor prin care se pot accesa informaii despre obiectele deinute de utilizator. Prefixul ALL_ este specific vederilor care conin informaii despre toate tabelele la care utilizatorul are acces. Prefixul DBA_ este folosit pentru vederile accesibile doar utilizatorilor care au drepturi (privilegii) de administrator al bazei de date.

67

EXEMPLE
Prezentarea tuturor acestor vederi nu face obiectul lucrrii de fa. n continuare sunt prezentate cteva dintre cele mai importante, legate mai ales de inventarul de tabele i constrngeri de integritate existent la un moment dat n sistem:
USER_CATALOG USER_OBJECTS USER_CONSTRAINTS USER_CONS_COLUMNS
68

USER_CATALOG
utilizator. Are doar dou coloane, prima coninnd numele i al doilea tipul obiectului. O parte a coninutului acestei tabele, obinut cu cererea SQL:
SELECT * FROM USER_CATALOG;

este urmtorul:
TABLE_NAME ---------------BURSA EVENIMENT NUMERE SPEC STUD TABLE_TYPE ----------TABLE TABLE TABLE TABLE TABLE

69

USER_OBJECTS
Conine numele, tipul i alte informaii despre obiectele deinute de utilizator, inclusiv indeci. Informaii sumare despre coninutul vederii se pot obine cu cererea:
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;

Rezultatul include rezultatul obinut n urma cererii anterioare (USER_CATALOG).


70

USER_CONSTRAINTS
Conine date despre constrngerile definite de utilizator. Dintre coloanele sale menionm:
CONSTRAINT_NAME : Numele constrngerii CONSTRAINT_TYPE: Tipul acesteia, codificat pe un caracter: P: cheie primar, U: cheie (UNIQUE), R pentru integritatea referenial i C pentru constrngerile CHECK (aici sunt incluse i cele de tip NOT NULL) SEARCH_CONDITION: Condiia asociat constrngerii
71

EXEMPLU
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION FROM USER_CONSTRAINTS; Rezultat: CONSTRAINT_NAME C SEARCH_CONDITION ------------------------ - ---------------------BURSA_CK C PMIN < PMAX AND PMIN >= 0 AND PMAX >= 0 AND SUMA BETWEEN 0 AND 500 DOM_NENUL U DOM_5 C LENGTH(NUME)>5 NUME_NENUL C NUME IS NOT NULL

72

USER_CONS_COLUMNS
Conine informaii despre coloanele care sunt implicate n constrngerile de integritate. Cererea urmtoare afieaz perechi (nume constrngere, nume coloan implicat) pentru constrngerea BURSA_CK: SELECT CONSTRAINT_NAME, COLUMN_NAME FROM USER_CONS_COLUMNS WHERE CONSTRAINT_NAME = 'BURSA_CK'; Rezultatul este: CONSTRAINT_NAME -----------------------BURSA_CK BURSA_CK BURSA_CK

COLUMN_NAME -------------------PMIN PMAX SUMA


73

CATE VEDERI SUNT?


Exist peste 2000 de vederi puse la dispoziie de sistemul Oracle (V9) dintre care peste 200 n fiecare dintre categoriile USER_, ALL_ i DBA_. O descriere complet a lor se gsete n documentaia aferent sistemului. Lista tuturor vederilor poate fi obinut cu cererea:
SELECT VIEW_NAME FROM ALL_VIEWS;
74

Bibliografie
1. Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer D. Widom: Database Systems: The Complete Book, Prentice-Hall, Englewood Cliffs, NJ, 2002. F. Rdulescu : Oracle SQL, PL/SQL, Editura Printech, ISBN 973718-203-02005

2.

F. Radulescu. Curs: Baze de date

75

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