Sunteți pe pagina 1din 17

5/12/2008

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

F. Radulescu. Curs: Baze de date 1 F. Radulescu. Curs: Baze de date 2

SPEC si BURSA OBIECTIV


CODS NUME DOMENIU
----- ---------- ---------------
Scopul acestui capitol este de a prezenta
elementele limbajului pentru descrierea
11 MATEMATICA STIINTE EXACTE
datelor (DDL) referitoare la:
21 GEOGRAFIE UMANIST
24 ISTORIE UMANIST
Tipurile de date permise pentru coloanele
tabelelor,
TIP PMIN PMAX SUMA Crearea de noi tabele,
-------------------- ----- ----- ----- Constrângeri de integritate,
FARA BURSA 0 399 Modificarea structurii unei tabele,
BURSA SOCIALA 400 899 100 Modificarea şi activarea constrângerilor de
BURSA DE STUDIU 900 1799 150 integritate,
BURSA DE MERIT 1800 2499 200 Dicţionarul de date al sistemului.
BURSA DE EXCEPTIE 2500 9999 300

F. Radulescu. Curs: Baze de date 3 F. Radulescu. Curs: Baze de date 4

TIPURI DE DATE TIPURI DE DATE (2)


Sistemul Oracle pune la dispoziţie un set optim Aceste tipuri, cu unele diferenţe în ceea ce
de tipuri de date care pot fi asociate
coloanelor unei tabele, grupate în mai multe priveşte dimensiunea maximă admisă, pot
categorii: fi folosite şi în limbajul procedural PL/SQL.
Tipuri numerice scalare În continuare sunt prezentate tipurile din
Tipuri scalare şir de caractere primele cinci categorii.
Tipuri scalare binare
Tipuri pentru date calendaristice, timp şi Crearea unei tabele cu coloane de tip
interval de timp TABLE şi VARRAY şi manipularea datelor
Tipuri LOB (large object) de acest fel nu este prezentată în acest
Tipuri compuse: TABLE şi VARRAY capitolul.
F. Radulescu. Curs: Baze de date 5 F. Radulescu. Curs: Baze de date 6

1
5/12/2008

TIPURI NUMERICE SCALARE TIPURI NUMERICE SCALARE (2)


Tip Descriere Tip Descriere
INTEGER, INT, Subtipuri pentru NUMBER. Numere întregi
NUMBER Număr real de dimensiune variabilă, cu 38 de SMALLINT cu maxim 38 de cifre
cifre semnificative, având valori între 1E-130 BINARY_INTEGER 31
Întregi între -2 şi 2 .
31

şi 10E125. NATURAL, Subtipuri pentru BINARY_INTEGER.


NUMBER(n) Număr întreg cu maxim n cifre POSITIVE Numere întregi non-negative, respectiv
pozitive.
NUMBER(n, z) Număr real cu n cifre dintre care z zecimale NATURALN, Subtipuri pentru BINARY_INTEGER.
DEC, DECIMAL, Subtipuri pentru NUMBER. Numere în POSITIVEN Numere întregi nenule non-negative,
NUMERIC virgulă fixă cu 38 de cifre semnificative. respectiv pozitive.
SIGNTYPE Subtip al BINARY_INTEGER. Poate lua
DOUBLE Subtipuri pentru NUMBER. Numere în doar valorile -1, 0 şi 1.
PRECISION, FLOAT virgulă mobilă cu 38 de cifre semnificative. PLS_INTEGER Întregi între -2
31 31
şi 2 . Similar cu
REAL Subtip pentru NUMBER. Numere în virgulă BINARY_INTEGER dar operaţiile cu astfel
mobilă cu 18 cifre semnificative. de numere sunt mai rapide şi în caz de
depăşire se ridică o excepţie.

F. Radulescu. Curs: Baze de date 7 F. Radulescu. Curs: Baze de date 8

SIRURI SIRURI (2)


Tip Descriere Tip Descriere
CHAR(n), CHAR Şir de caractere de lungime fixă, egală cu n. LONG Şir de caractere de maxim 231 octeţi. Este
Valoarea maximă pentru n este 2000. Dacă n permisă doar o singură coloană de acest tip
lipseşte, şir de caractere de lungime 1. pentru o tabelă.
CHARACTER, Identice cu cele anterioare. Introduse pentru ROWID Poate stoca un identificator pentru o linie
CHARACTER(n) compatibilitatea cu alte sisteme. dintr-o tabelă. Pentru conversia la/de la şir
de caractere (18 caractere) se pot folosi
NCHAR(n) Analog cu CHAR dar poate stoca şiruri scrise funcţiile SQL ROWIDTOCHAR respectiv
în seturi de caractere naţionale (multioctet) CHARTOROWID.
VARCHAR2(n) Şir de caractere de lungime variabilă egală cu UROWID Universal ROWID. Poate stoca un
n. Valoarea maximă pentru n este 4000. identificator logic şi fizic de linie într-o
STRING(n), Identice cu VARCHAR2, introduse pentru tabelă, indexată sau nu precum şi un
VARCHAR(n) compatibilitatea cu alte sisteme identificator de linie extern (non-Oracle). Nu
NVARCHAR(n) Analog cu VARCHAR. Poate stoca şiruri este necesară folosirea funcţiilor de conversie
scrise în seturi de caractere naţionale la/de la şir de caractere (conversie
automată).
(multioctet)

F. Radulescu. Curs: Baze de date 9 F. Radulescu. Curs: Baze de date 10

TIPURI BINARE DATE, TIMP SI INTERVAL


Tip Descriere
DATE Dată calendaristică (secol, an, lună, zi, oră,
minut, secundă).
TIMESTAMP[(n)] Extensie a tipului DATE. Conţine şi fracţiuni
de secundă. Dacă este prezent, n specifică
Tip Descriere numărul de zecimale pentru acestea. Implicit
n=6
RAW(n) Similar cu VARCHAR2 dar conţine date TIMESTAMP [(n)] Extinde tipul TIMESTAMP conţinând şi o
WITH TIME ZONE diferenţă între ora locală şi ora universală
binare. Valoarea maximă pentru n este de TIMESTAMP [(n)]
(GMT)
Similar cu tipul anterior dar la stocarea în
2000. WITH LOCAL TIME
ZONE
baza de date valorile sunt convertite la ora
zonei bazei de date iar la regăsire la ora zonei
LONG RAW Similar cu LONG dar conţine date binare. INTERVAL YEAR
aplicaţiei client.
Se stochează intervale de ani şi luni. Precizia
[(n)] TO MONTH n specifică numărul de cifre pentru an (între 0
şi 4, implicit 2).
INTERVAL DAY Similar cu tipul anterior, dar pentru intervale
[(z)] TO SECOND de zile şi secunde. valorile z şi s sunt
[(s)] preciziile pentru zile, respectiv secunde (0-9,
implicit 2 pentru z şi 6 pentru s).

F. Radulescu. Curs: Baze de date 11 F. Radulescu. Curs: Baze de date 12

2
5/12/2008

TIPURI LARGE OBJECT TIPURI LOB – cont.


Aceste tipuri, introduse în ultimele versiuni
ale sistemului, permit stocarea unor cantităţi Tip Descriere
mari de date pe coloanele unei tabele sau a CLOB Şir de caractere de până la 4 GB. Se
recomandă ca în aplicaţiile noi să fie folosit
unei referinţe (numită şi locator) către un în locul lui LONG.
NCLOB Similar cu CLOB dar se pot stoca şiruri
fişier extern bazei de date. utilizând seturi naţionale de caractere.
Dimensiunea maximă este de asemenea de 4
Manipularea valorilor de acest tip se face în GB
BLOB Date binare de dimensiune până la 4 GB
PL/SQL cu ajutorul pachetelor de proceduri şi BFILE Date binare de dimensiune până la 4 GB
funcţii puse la dispoziţie de sistem. stocate în fişiere externe. Nu participă la
tranzacţii, replicare şi pot fi doar citite nu şi
Caracteristicile lor sunt următoarele: modificate.

F. Radulescu. Curs: Baze de date 13 F. Radulescu. Curs: Baze de date 14

CREATE TABLE CREATE TABLE – cont.


 Cea mai simplă formă a cererii SQL de creare a unei noi  tip_coloana_1, tip_coloana_2, ... reprezintă
tabele are următoarea sintaxă: tipurile de date pentru coloanele respective, alese
CREATE TABLE [schema.]nume_tabela dintre cele prezentate în paragraful anterior, cu
(nume_coloana_1 tip_coloana_1 [DEFAULT specificarea, dacă este cazul, a dimensiunii maxime
expresie_1], sau preciziei,
nume_coloana_2 tip_coloana_2 [DEFAULT  clauza opţională DEFAULT expresie_i specifică o
expresie_2], valoare implicită care este introdusă automat în acea
. . . coloană în cazul în care la adăugarea unei noi linii nu
nume_coloana_n tip_coloana_n [DEFAULT se specifică o valoare pe coloana respectivă,
expresie_n]);
 schema este numele de utilizator Oracle al
unde: proprietarului noii tabele. Valoarea implicită pentru
 nume_tabela este numele tabelei care se crează, acesta este numele utilizatorului care execută
 nume_coloana_1, nume_coloana_2, ... sunt numele cererea de creare.
coloanelor acesteia
F. Radulescu. Curs: Baze de date 15 F. Radulescu. Curs: Baze de date 16

TREBUIE CA: LITERE MARI SI MICI


 Utilizatorul are drepturile necesare (dreptul sau Ca şi în cazul cuvintelor cheie, literele
privilegiul - în terminologia uzuală - de CREATE
TABLE). mici şi cele mari sunt considerate egale
 Există spaţiu de stocare pentru noua tabelă. în numele de tabele şi coloane.
 Numele tabelei şi al coloanelor respectă restricţiile
uzuale Oracle (maxim 30 de caractere, începe cu o Exemplu: tabela de studenţi din
literă, conţine litere, cifre şi caracterele _, $, #, nu exemple este aceeaşi dacă la creare se
este cuvânt rezervat Oracle). Sunt permise şi alte
caractere dacă numele este inclus între ghilimele. foloseşte oricare din numele STUD,
 Nu există deja un alt obiect cu acelaşi nume în Stud sau StuD.
aceeaşi schemă (pentru acelaşi utilizator Oracle).

F. Radulescu. Curs: Baze de date 17 F. Radulescu. Curs: Baze de date 18

3
5/12/2008

OBSERVATII EXEMPLU
Expresia din clauza opţională DEFAULT CREATE TABLE STUD(
trebuie să se evalueze la o valoare de tip MATR NUMBER(4),
compatibil cu al coloanei respective. Ea poate NUME VARCHAR2(10),
conţine: AN NUMBER(1) DEFAULT 1,
 Constante numerice sau şir de caractere, GRUPA VARCHAR2(6),
 Funcţii SQL, inclusiv SYSDATE sau USER. DATAN DATE,
 dar nu poate conţine: LOC VARCHAR2(10) DEFAULT 'BUCURESTI',
 Numele unei coloane, TUTOR NUMBER(4),
 Numele unei pseudocoloane. (de exemplu
pseudocoloanele definite de o secvenţă: NEXTVAL PUNCTAJ NUMBER(4) DEFAULT 0,
sau CURRVAL). CODS NUMBER(2) );

F. Radulescu. Curs: Baze de date 19 F. Radulescu. Curs: Baze de date 20

OBSERVAM CA:
 MATR, AN, TUTOR, PUNCTAJ şi CODS care conţin Crearea unei tabele în care se stochează date
valori de tip număr întreg au fost definite ca
NUMBER(n) unde n este 1, 2 sau 4, despre evenimente: momentul de început,
 NUME, GRUPA şi LOC sunt şiruri de caractere de durata şi o descriere a acestora.
lungime variabilă definite ca VARCHAR2, CREATE TABLE EVENIMENT(
 DATAN care conţine data naşterii studentului este de
tipul DATE, COD NUMBER(10),
 Pentru unele dintre coloane au fost asociate valori "MOMENT INCEPUT" TIMESTAMP(3) WITH LOCAL
implicite care vor fi stocate automat în acestea dacă TIME ZONE,
la inserarea unei noi linii nu se specifică o valoare,
nulă sau nenulă. DURATA INTERVAL DAY(2) TO SECOND(3),
 Valorile implicite sunt compatibile cu tipul coloanelor "DESCRIERE (PE LARG)" LONG);
respective (întreg sau şir de caractere, după caz).

F. Radulescu. Curs: Baze de date 21 F. Radulescu. Curs: Baze de date 22

OBSERVAM CA: CREATE din SELECT


 COD: un număr întreg de maxim 10 cifre, CREATE TABLE [schema.]nume_tabela
 MOMENT ÎNCEPUT: conţine momentul începutului [(descriere_coloana_1, ...,
unui eveniment în forma: data, ora, minutul, secunda
şi miimile de secundă: TIMESTAMP(3) arată că descriere_coloana_n)]
fracţiunile de secundă sunt memorate cu 3 zecimale. AS
Numele coloanei conţine un spaţiu şi a trebuit pus
între ghilimele. cerere_SELECT;
 DURATA: durata evenimentului în zile, ore, minute,
secunde şi fracţiuni de secundă. Numărul de zile
poate avea maxim 2 cifre iar numărul de secunde Se crează o tabelă având numele
maxim 3 zecimale.
 DESCRIERE (PE LARG): conţine un text de descriere specificat şi aceeaşi structură cu a
a evenimentului care poate avea până la 2 GB
caractere. Se folosesc ghilimelele pentru că numele rezultatului returnat de SELECT.
coloanei conţine spaţii şi paranteze.
F. Radulescu. Curs: Baze de date 23 F. Radulescu. Curs: Baze de date 24

4
5/12/2008

CREATE din SELECT (2) CREATE din SELECT (3)


 Descrierea coloanelor nu este prezentă CREATE TABLE STUD11
AS
în cerere: SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"
 Numele coloanelor tabelei create precum şi tipul FROM STUD WHERE CODS = 11;
acestora este identic cu al celor din rezultatul  Conţinutul tabelei STUD11 va fi următorul:
cererii SELECT. MATR NUME PUNCTAJ MARIT
----- ---------- -------------
 Noua tabelă nu moşteneşte nici una dintre 1456 GEORGE 3179
constrângerile de integritate ale tabelei/tabelelor 1325 VASILE 429
din care provine rezultatul. 1645 MARIA 1540
 Dacă în lista de expresii din clauza SELECT  iar descrierea structurii sale este:
există unele care nu returnează pentru capul de Nume coloana Tip
tabel al rezultatului un nume valid de coloană ------------- -------------
este obligatorie folosirea unor aliasuri de MATR NUMBER(4)
coloană. NUME VARCHAR2(10)
PUNCTAJ MARIT NUMBER

F. Radulescu. Curs: Baze de date 25 F. Radulescu. Curs: Baze de date 26

CREATE din SELECT (4) CREATE din SELECT (5)


 Crearea tabelei se face inclusiv în cazul în care  Cererea conţine descrierea coloanelor:
cererea SELECT nu returnează nici o linie. De  Descrierea unei coloane are următoarea formă:
exemplu: nume_coloana [DEFAULT expresie] [constrângeri_integritate]
 Numărul de descrieri de coloană trebuie să fie egal cu
CREATE TABLE STUD100 numărul de coloane din rezultatul cererii SELECT.
AS  Numele coloanelor tabelei create este cel din descriere iar
SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ tipul lor este identic cu al celor din rezultatul cererii
SELECT.
MARIT"  Dacă descrierea unei coloane conţine clauza DEFAULT
FROM STUD expresie, se asociază acestei coloane valoarea implicită
respectivă.
WHERE CODS = 100;
 Noua tabelă nu moşteneşte nici una dintre constrângerile
 va avea ca efect crearea tabelei STUD100 având de integritate ale tabelei/tabelelor din care provine
aceeaşi structură cu STUD11 dar aceasta nu va rezultatul dar primeşte constrângerile de integritate din
descriere, dacă acestea există
conţine nici o linie.

F. Radulescu. Curs: Baze de date 27 F. Radulescu. Curs: Baze de date 28

CREATE din SELECT (6) CONSTRANGERI


CREATE TABLE STUD11  Constrângerile de integritate reprezintă reguli pe care
(NUMAR DEFAULT 0 NOT NULL, NUME, PUNCTE NOT NULL) valorile conţinute într-o tabelă trebuie să le respecte.
AS
SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"  Ele previn introducerea de date eronate în baza de
FROM STUD date şi definesc forma corectă a valorilor respective
WHERE CODS = 11; dar nu iau în consideraţie semnificaţia acestora.
 Conţinutul tabelei este acelaşi, ultima coloană are alt nume,  Constrângerile de integritate sunt verificate automat
prima are o valoare implicită iar două dintre ele au asociată o de sistemul de gestiune atunci când au loc operaţii de
constrângere de tip NOT NULL (nu se pot stoca valori nule pe
acele coloane): modificare a conţinutului tabelelor (adăugare,
Nume coloana Null? Tip Implicit ştergere şi modificare linii).
-------------- -------- ------------- ---------  În cazul în care noile valori nu sunt valide operaţia de
NUMAR NOT NULL NUMBER(4) 0 modificare este rejectată de sistem şi se generează o
NUME VARCHAR2(10)
PUNCTE NOT NULL NUMBER
eroare.

F. Radulescu. Curs: Baze de date 29 F. Radulescu. Curs: Baze de date 30

5
5/12/2008

TIPURI DE CONSTRANGERI CONSTRANGERI (2)


NOT NULL: valorile nu pot fi nule Fiecare constrângere de integritate poate
PRIMARY KEY: defineşte cheia primară avea asociat un nume specificat la crearea
a unei tabele tabelei care permite activarea sau
dezactivarea constrângerii şi alte operaţii cu
UNIQUE: defineşte o altă cheie a aceasta.
tabelei
În cazul în care nu se asociază un astfel de
FOREIGN KEY: defineşte o cheie străină nume sistemul generează automat unul.
(externă)
Locul definirii unei constrângeri de integritate
CHECK: introduce o condiţie (expresie în cererea de creare a unei tabele poate fi:
logică).
F. Radulescu. Curs: Baze de date 31 F. Radulescu. Curs: Baze de date 32

CONSTRANGERI (3) DETALIERE CONSTRANGERI


În descrierea unei coloane, dacă acea NOT NULL: valorile nu pot fi nule
constrângere se referă doar la aceasta (uzual
se spune despre o astfel de constrângere că
PRIMARY KEY: defineşte cheia primară
este definită la nivel de coloană), a unei tabele
În continuarea listei de descrieri de coloane UNIQUE: defineşte o altă cheie a
(la nivel de tabelă). tabelei
În funcţie de locul unde se găseşte, sintaxa FOREIGN KEY: defineşte o cheie străină
definirii unei constrângeri poate fi diferită. (externă)
Pentru fiecare tip de constrângere sunt CHECK: introduce o condiţie (expresie
prezentate ambele sintaxe şi exemple de
folosire a lor. logică).
F. Radulescu. Curs: Baze de date 33 F. Radulescu. Curs: Baze de date 34

NOT NULL EXEMPLU


Acest tip de constrângere se aplică unei CREATE TABLE SPEC
coloane a noii tabele şi specifică faptul că (CODS NUMBER(2),
aceasta nu poate conţine valori nule. El NUME VARCHAR2(10) CONSTRAINT
poate fi definit doar la nivel de coloană şi NUMENENUL NOT NULL,
are următoarea sintaxă:
DOMENIU VARCHAR2(15) NOT
coloana [CONSTRAINT nume_constr] NOT NULL
NULL);

F. Radulescu. Curs: Baze de date 35 F. Radulescu. Curs: Baze de date 36

6
5/12/2008

DETALIERE CONSTRANGERI PRIMARY KEY


NOT NULL: valorile nu pot fi nule Sintaxa la nivel de coloană:
PRIMARY KEY: defineşte cheia primară coloana [CONSTRAINT nume_constrangere]
a unei tabele PRIMARY KEY
UNIQUE: defineşte o altă cheie a Sintaxa la nivel de tabelă:
tabelei
[,CONSTRAINT nume_constrangere] PRIMARY
FOREIGN KEY: defineşte o cheie străină KEY(lista_coloane)
(externă)
CHECK: introduce o condiţie (expresie
logică).
F. Radulescu. Curs: Baze de date 37 F. Radulescu. Curs: Baze de date 38

EXEMPLE PK DIN >1 ATRIBUT


CREATE TABLE SPEC( CREATE TABLE BURSA(
CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY PMIN NUMBER(4),
KEY,
PMAX NUMBER(4),
NUME VARCHAR2(10),
TIP VARCHAR2(20),
DOMENIU VARCHAR2(15));
SUMA NUMBER(4),
Si la nivel de tabela:
CREATE TABLE SPEC( CONSTRAINT BURSA_PK PRIMARY KEY(PMIN,PMAX));
CODS NUMBER(2),
NUME VARCHAR2(10),
DOMENIU VARCHAR2(15),
CONSTRAINT SPEC_PK PRIMARY KEY(CODS));

F. Radulescu. Curs: Baze de date 39 F. Radulescu. Curs: Baze de date 40

DETALIERE CONSTRANGERI UNIQUE


NOT NULL: valorile nu pot fi nule Sintaxa la nivel de coloană:
PRIMARY KEY: defineşte cheia primară coloana [CONSTRAINT nume_constrangere]
a unei tabele UNIQUE
UNIQUE: defineşte o altă cheie a Sintaxa la nivel de tabelă:
tabelei
 [,CONSTRAINT nume_constrangere]
FOREIGN KEY: defineşte o cheie străină UNIQUE(lista_coloane)
(externă)
CHECK: introduce o condiţie (expresie
logică).
F. Radulescu. Curs: Baze de date 41 F. Radulescu. Curs: Baze de date 42

7
5/12/2008

EXEMPLUL 1 EXEMPLUL 1 – cont.


Dacă în tabela de SPEC nu pot exista Aceeasi constrangere, la nivel de
niciodată două specializări cu acelaşi nume, tabela:
definiţia anterioară se completează cu o
constrângere de tip UNIQUE: CREATE TABLE SPEC(
CREATE TABLE SPEC( CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY
CODS NUMBER(2) CONSTRAINT SPEC_PK KEY,
PRIMARY KEY, NUME VARCHAR2(10),
NUME VARCHAR2(10) CONSTRAINT NUMES_UNIC DOMENIU VARCHAR2(15),
UNIQUE, CONSTRAINT NUMES_UNIC UNIQUE(NUME));
DOMENIU VARCHAR2(15));
F. Radulescu. Curs: Baze de date 43 F. Radulescu. Curs: Baze de date 44

EXEMPLUL 2 CE E UNIC?
 În tabela BURSA nu pot exista două burse cu aceeaşi  În cazul în care o cheie definită cu UNIQUE conţine
sumă. Cererea de creare anterioară devine: mai multe coloane, verificarea se face astfel:
CREATE TABLE BURSA(
 nu există două linii care au aceleaşi valori nenule
PMIN NUMBER(4), pentru toate coloanele cheii.
PMAX NUMBER(4),  nu există două linii care au aceleaşi valori nenule
TIP VARCHAR2(20), pentru unele coloane ale cheii şi valori nule în rest.
SUMA NUMBER(4) CONSTRAINT SUMA_UNICA  Exemplu: În cazul unei tabele NUMERE creată cu
UNIQUE, cererea:
CONSTRAINT BURSA_PK PRIMARY KEY(PMIN, CREATE TABLE NUMERE(
PMAX)); NUMAR1 NUMBER(4),
NUMAR2 NUMBER(4),
 În acest caz în tabelă nu pot exista două linii care conţin
aceeaşi valoare nenulă pe coloana SUMA dar pot exista UNIQUE(NUMAR1, NUMAR2));
oricâte linii cu valori nule pe această coloană.
F. Radulescu. Curs: Baze de date 45 F. Radulescu. Curs: Baze de date 46

CONTINUT VALID CONTINUT INVALID


NUMAR1 NUMAR2 NUMAR1 NUMAR2
------ ------ ------ ------
NULL NULL NULL NULL
NULL NULL NULL NULL
1000 2000 1000 2000
1000 3000 1000 3000
NULL 2000 NULL 2000
1000 NULL 1000 NULL
1000 2000
NULL 2000
1000 NULL

F. Radulescu. Curs: Baze de date 47 F. Radulescu. Curs: Baze de date 48

8
5/12/2008

DETALIERE CONSTRANGERI FOREIGN KEY


NOT NULL: valorile nu pot fi nule Prin această constrângere valorile unei
PRIMARY KEY: defineşte cheia primară coloane/unor coloane sunt forţate să fie
a unei tabele doar dintre cele ale cheii unei tabele
UNIQUE: defineşte o altă cheie a (cheie primară sau UNIQUE).
tabelei Coloanele constrânse în acest fel
FOREIGN KEY: defineşte o cheie străină formează ceea ce se numeşte în
(externă) terminologia de specialitate o cheie
straina sau cheie externa iar
CHECK: introduce o condiţie (expresie constrângerea mai este denumită şi de
logică). integritate referentiala.
F. Radulescu. Curs: Baze de date 49 F. Radulescu. Curs: Baze de date 50

SINTAXA
 La nivel de coloană: În cazul tabelei STUD avem două coloane
coloana [CONSTRAINT nume_constrangere] care pot avea asociată o astfel de
REFERENCES tabela(coloana) constrângere:
[ON DELETE CASCADE |  Coloana CODS poate fi constrânsă să conţină doar
ON DELETE SET NULL] valori ale cheii primare a tabelei SPEC (formată
 La nivel de tabelă: dintr-o coloană cu acelaşi nume - CODS).
[,CONSTRAINT nume_constrangere] FOREIGN  Coloana TUTOR poate fi constrânsă să conţină
KEY(lista_coloane) doar valori nenule ale cheii primare a lui STUD -
MATR.
REFERENCES tabela(lista_coloane)
[ON DELETE CASCADE | În acest caz cererea anterioara de creare
ON DELETE SET NULL] pentru STUD devine:

F. Radulescu. Curs: Baze de date 51 F. Radulescu. Curs: Baze de date 52

STUD: OBSERVATII
CREATE TABLE STUD( În cazul în care tabela SPEC nu există încă
MATR NUMBER(4) PRIMARY KEY, sistemul va semnala eroarea: ORA-00942: table
NUME VARCHAR2(10), or view does not exist
AN NUMBER(1) DEFAULT 1, În cazul în care tabela SPEC există dar nu are
GRUPA VARCHAR2(6), cheia CODS se semnalează eroarea: ORA-02270:
DATAN DATE, no matching unique or primary key for this
LOC VARCHAR2(10) DEFAULT 'BUCURESTI', column-list
TUTOR NUMBER(4) REFERENCES STUD(MATR),
După crearea lui STUD, dacă se încearcă
PUNCTAJ NUMBER(4) DEFAULT 0,
ştergerea tabelei SPEC se semnalează eroarea:
CODS NUMBER(2), ORA-02449: unique/primary keys în table
CONSTRAINT CODS_FK FOREIGN KEY(CODS) referenced by foreign keys
REFERENCES SPEC(CODS));

F. Radulescu. Curs: Baze de date 53 F. Radulescu. Curs: Baze de date 54

9
5/12/2008

OBSERVATII – cont. CLAUZA ON DELETE


La inserarea de noi linii în tabela STUD, acestea  În cazul în care se doreşte ca o linie dintr-o tabelă
trebuie să conţină pe coloanele CODS şi TUTOR conţinând o valoare de cheie referită într-o altă
fie valori care există deja în SPEC.CODS şi tabelă (sau în aceeaşi tabelă) să poată fi ştearsă fără
STUD.MATR, fie valori nule. a se obţine un mesaj de eroare, la definirea
constrângerii se poate specifica modul în care se
La încercarea de a şterge linii din tabelele SPEC şi tratează această ştergere din perspectiva tabelei care
STUD, dacă acestea au valoari ale chei referite în referă valoarea:
STUD prin constrângerile de mai sus se va  Daca se doreşte ca la ştergerea liniei conţinând o valoare de
semnala de asemenea o eroare. cheie să fie şterse suplimentar şi toate liniile care referă
această valoare, se specifică ON DELETE CASCADE
La încercarea de a modifica valorile cheii în linii
 Dacă se doreşte ca liniile care referă valoarea cheii
din tabelele SPEC şi STUD, dacă acestea sunt respective să nu fie şterse, se specifică ON DELETE SET
referite în STUD se va semnala de asemenea o NULL care are următorul efect: în toate liniile care referă
eroare. acea valoare ea este înlocuită cu valori nule.

F. Radulescu. Curs: Baze de date 55 F. Radulescu. Curs: Baze de date 56

EXEMPLU EXEMPLU – cont.


CREATE TABLE STUD( La ştergerea unei specializări din tabela SPEC
MATR NUMBER(4) PRIMARY KEY, vor fi şterşi automat şi toţi studenţii din
. . . . . . . . . . . . . . . . . . . tabela STUD având pe coloana CODS codul
TUTOR NUMBER(4) REFERENCES STUD(MATR) acesteia.
ON DELETE SET NULL, La ştergerea unui student care este tutorul
. . . . . . . . . . . . . . . . . . . altor studenţi, automat acestora li se va
CONSTRAINT CODS_FK FOREIGN KEY(CODS) modifica valoarea pe coloana TUTOR la una
REFERENCES SPEC(CODS) nulă.
ON DELETE CASCADE); Tabela SPEC poate fi golită - ceea ce va
antrena şi golirea tabelei STUD - dar nu
ştearsă.
F. Radulescu. Curs: Baze de date 57 F. Radulescu. Curs: Baze de date 58

FK PENTRU UNIQUE DETALIERE CONSTRANGERI


În cazul în care constrângerea se NOT NULL: valorile nu pot fi nule
defineşte pentru o cheie de tip UNIQUE PRIMARY KEY: defineşte cheia primară
(care poate conţine şi valori nule) ea a unei tabele
este verificată pentru cheile străine UNIQUE: defineşte o altă cheie a
formate doar din valori nenule. tabelei
FOREIGN KEY: defineşte o cheie străină
(externă)
CHECK: introduce o condiţie (expresie
logică).
F. Radulescu. Curs: Baze de date 59 F. Radulescu. Curs: Baze de date 60

10
5/12/2008

CHECK SINTAXA
 Prin acest tip de constrângeri valorile aflate pe o linie a
tabelei sunt forţate să verifice o condiţie (expresie logică). La nivel de coloană:
 Aceasta poate conţine toate elementele prezentate
anterior pentru conditii, inclusiv apeluri de funcţii, cu coloana [CONSTRAINT nume_constrangere]
câteva excepţii: CHECK (expresie_logica)
 apelurile unor funcţii ca SYSDATE, USER, UID
 referinţa la pseudocoloanele NEXTVAL, CURRVAL La nivel de tabelă:
(specifice secvenţelor), LEVEL şi ROWNUM)
 subcereri. [,CONSTRAINT nume_constrangere]
 O aceeaşi coloană poate participa la mai multe CHECK (expresie_logica)
constrângeri de acest tip, având fiecare o altă condiţie
asociată.
 Condiţia se evaluează doar la nivelul liniei respective, fără
a se putea lua în considerare valori aflate pe alte linii ale
tabelei.

F. Radulescu. Curs: Baze de date 61 F. Radulescu. Curs: Baze de date 62

EXEMPLU EXEMPLU – cont.


 Tabela BURSA poate avea asociate mai multe În cazul în care pe coloanele respective se
constrângeri care verifică următoarele condiţii: găsesc valori nule, linia nu este rejectată ci se
 PMIN şi PMAX sunt pozitive consideră că verifică expresia logică.
 PMIN < PMAX Pentru tabela BURSA definită ca mai sus se
 SUMA este între 0 şi 500 pot introduce linii având valori nule pentru
 Cererea de creare va fi: unele din coloanele PMIN, PMAX şi SUMA fără
CREATE TABLE BURSA( a se semnala violarea constrângerilor de
PMIN NUMBER(4) CHECK (PMIN >= 0), integritate de tip CHECK.
PMAX NUMBER(4) CHECK (PMAX >= 0),
TIP VARCHAR2(20),
Expresia logică asociată unei constrângeri
SUMA NUMBER(4) CHECK (SUMA BETWEEN 0 AND 500),
CHECK poate fi compusă: cererea de creare
CONSTRAINT PMINPMAX CHECK (PMIN < PMAX));
de mai sus poate fi rescrisă prin combinarea
tuturor condiţiilor în una singură:

F. Radulescu. Curs: Baze de date 63 F. Radulescu. Curs: Baze de date 64

EXEMPLU – cont. MODIFICAREA STRUCTURII


CREATE TABLE BURSA(  Vizualizarea structurii tabelei
PMIN NUMBER(4), PMAX NUMBER(4),  Adaugarea unei coloane
TIP VARCHAR2(20),  Stergerea unei coloane
SUMA NUMBER(4),  Modificarea unei coloane
 Adaugarea unei constrangeri
CONSTRAINT BURSA_CK CHECK (PMIN < PMAX
AND PMIN >= 0 AND PMAX >= 0 AND SUMA
 Stergerea unei constrangeri
BETWEEN 0 AND 500));  Activare/dezactivare constrangeri
 Golirea unei tabele
 Stergerea unei tabele
 Redenumirea unei tabele
 Adaugarea de comentarii

F. Radulescu. Curs: Baze de date 65 F. Radulescu. Curs: Baze de date 66

11
5/12/2008

1. VIZUALIZARE STRUCTURA 2. ADAUGARE COLOANA


 Clientul SQL*Plus pune la dispoziţie comanda DESCRIBE prin
care se pot afişa numele coloanelor, tipul acestora şi Sintaxa:
eventualele constrângeri de tip NOT NULL. ALTER TABLE nume_tabela ADD
 Sintaxa comenzii SQL*Plus este:
DESCRIBE nume_tabela
(nume_coloana tip_date
 Observaţie: DESCRIBE nu este o cerere SQL ci o comandă [DEFAULT expresie] [constrangere]);
SQL*Plus. Ea nu trebuie terminată cu punct şi virgulă (;).
 Exemplu. Pentru a obţine descrierea tabelei SPEC folosim Exemplu: Adăugarea unei noi coloane la
comanda:
DESCRIBE SPEC
tabela SPEC în care se memorează anul
 Rezultat obţinut: înfiinţării fiecărei specializări:
Name Null? Type ALTER TABLE SPEC ADD(AN_INFIINTARE
--------------- -------- -----------------
CODS NUMBER(2)
NUMBER(4)
NUME VARCHAR2(10) CONSTRAINT ANS_NENUL NOT NULL);
DOMENIU VARCHAR2(15)
F. Radulescu. Curs: Baze de date 67 F. Radulescu. Curs: Baze de date 68

ADAUGARE COLOANA – cont. 3. STERGERE COLOANA


Sintaxa:
Dacă tabela conţine deja cel puţin o linie, pe ALTER TABLE nume_tabela DROP COLUMN
nume_coloana [CASCADE CONSTRAINTS];
noua coloană vor fi prezente doar valori nule.
Adăugarea unei coloane care are asociată o sau
constrângere de tip NOT NULL (ca în ALTER TABLE nume_tabela DROP (lista
coloane) [CASCADE CONSTRAINTS];
exemplul anterior) nu se poate face decât în
cazul în care tabela nu conţine nici o linie. Exemplu: Ştergerea coloanei adăugată anterior:
ALTER TABLE SPEC
Coloana se va adăuga întotdeauna după
DROP COLUMN AN_INFIINTARE;
celelalte, devenind ultima coloană din tabelă.

F. Radulescu. Curs: Baze de date 69 F. Radulescu. Curs: Baze de date 70

STERGERE COLOANA – cont. UNUSED


Cererea se poate executa atât în cazul în care  Ştergerea unei coloane este o operaţie costisitoare
tabela este goală cât şi dacă ea conţine deja din punct de vedere al resurselor sistemului.
linii,  De aceea, în cazul în care la un moment dat acesta
este foarte încărcat ştergerea se poate face în două
Dacă tabela are doar o singură coloană, etape:
aceasta nu se poate şterge,  Etapa 1: Marcarea ca neutilizate a unei coloane sau a
Opţiunea CASCADE CONSTRAINTS şterge unei liste de coloane prin opţiunea SET UNUSED.
suplimentar toate constrângerile de Sintaxa este:
integritate în care sunt implicate coloanele ALTER TABLE nume_tabela SET
UNUSED(lista_coloane);
şterse, inclusiv cele de tip FOREIGN KEY care sau
referă valorile coloanei sau coloanelor ALTER TABLE nume_tabela SET UNUSED COLUMN
respective. nume_coloana;

F. Radulescu. Curs: Baze de date 71 F. Radulescu. Curs: Baze de date 72

12
5/12/2008

UNUSED – cont. EXEMPLE


Etapa 2: Ştergerea efectivă a Pentru marcarea coloanelor DATAN, LOC şi
coloanelor marcate ca neutilizate la un TUTOR din tabela STUD se pot executa
cererile:
moment ulterior de timp, când sistemul ALTER TABLE STUD SET UNUSED(DATAN,
nu mai este foarte încărcat. Sintaxa LOC);
cererii este: ALTER TABLE STUD SET UNUSED COLUMN
ALTER TABLE nume_tabela DROP TUTOR;
UNUSED COLUMNS; Ştergerea coloanelor marcate se face prin
cererea:
ALTER TABLE SPEC DROP UNUSED COLUMNS;

F. Radulescu. Curs: Baze de date 73 F. Radulescu. Curs: Baze de date 74

UNUSED - Observatii 4. MODIFICARE COLOANA


Coloanele marcate ca neutilizate: Sintaxa:
ALTER TABLE nume_tabela
 nu mai apar în structura afişată de MODIFY(nume_coloana [tip_date]
DESCRIBE, [DEFAULT expresie] [constrangere])
Prin această cerere se pot modifica
 nu mai pot fi folosite în cererile SQL asupra următoarele caracteristici ale unei coloane:
tabelei respective  Se poate schimba tipul de date al coloanei
 se pot adăuga noi coloane în tabelă având  Se poate asocia o nouă valoare implicită
acelaşi nume.  Se poate adăuga o constrângere de tip NOT NULL
pentru acea coloană.
Printr-o singură cerere se pot efectua toate
operaţiile de mai sus sau doar o parte a lor.

F. Radulescu. Curs: Baze de date 75 F. Radulescu. Curs: Baze de date 76

EXEMPLU MODIFICARE COLOANA – cont.


modificarea caracteristicilor coloanelor NUME În ceea ce priveşte modificările tipului
şi DOMENIU din tabela SPEC este efectuată de date asociat unei coloane, acestea
prin următoarele trei cereri de tip ALTER pot fi:
TABLE:
ALTER TABLE SPEC MODIFY (DOMENIU  Creşterea dimensiunii coloanelor de tip şir
VARCHAR2(20) CONSTRAINT DOM_MENUL NOT de caractere,
NULL);  Creşterea dimensiunii şi preciziei datelor
ALTER TABLE SPEC MODIFY (DOMENIU numerice,
DEFAULT 'NECOMPLETAT');
 Schimbarea tipurilor CHAR în VARCHAR2 şi
ALTER TABLE SPEC MODIFY(NUME
reciproc doar dacă au aceeaşi dimensiune.
CONSTRAINT NUME_NENUL NOT NULL);
F. Radulescu. Curs: Baze de date 77 F. Radulescu. Curs: Baze de date 78

13
5/12/2008

MODIFICARE COLOANA – cont. 5. ADAUGARE CONSTRANGERE


Doar în cazul în care tabela este goală sau Sintaxa:
coloana conţine doar valori nule se mai pot ALTER TABLE nume_tabela
efectua şi operaţiile: ADD [CONSTRAINT nume] tip(coloana);
 Scăderea dimensiunii coloanelor de tip şir de Tipul constrângerii nu poate fi NOT NULL. În
caractere schimb se pot defini constrângeri de tip
 Scăderea dimensiunii şi preciziei datelor numerice, CHECK conţinând condiţii de acest tip.
 Orice altă schimbare a tipului coloanei respective.
Exemplu: Se doreşte ca pe coloana NUME a
În cazul schimbării valorii implicite pentru o tabelei SPEC să nu existe valori nule sau
coloană, noua valoare va fi folosită doar identice şi lungimea minimă să fie de 6
pentru inserările de linii ulterioare modificării. caractere:
F. Radulescu. Curs: Baze de date 79 F. Radulescu. Curs: Baze de date 80

EXEMPLU 6. STERGERE CONSTRANGERE


ALTER TABLE SPEC  Sintaxa:
ALTER TABLE nume_tabela DROP PRIMARY KEY
ADD CONSTRAINT NUME_NENUL [CASCADE];
ALTER TABLE nume_tabela DROP
CHECK(NUME IS NOT NULL); UNIQUE(lista_coloane)
[CASCADE];
ALTER TABLE SPEC ALTER TABLE nume_tabela DROP CONSTRAINT nume
[CASCADE];
ADD CONSTRAINT NUME_UNIC  Efectul acestor cereri este:
UNIQUE(NUME);  DROP PRIMARY KEY şi DROP UNIQUE specifică ştergerea
constrângerii de tip cheie primară/cheie unică pentru tabela
respectivă. Constrângerea poate să nu aibă un nume asociat
ALTER TABLE SPEC la definire.
ADD CONSTRAINT NUME_5  DROP CONSTRAINT specifică ştergerea unei constrângeri
având asociat un nume.
CHECK(LENGTH(NUME)>5);  Opţiunea CASCADE se aplică în cazul în care există
constrângeri dependente şi specifică ştergerea suplimentară
a acestora.
F. Radulescu. Curs: Baze de date 81 F. Radulescu. Curs: Baze de date 82

7. ACTIVARE/DEZACTIVARE
EXEMPLU
CONSTRANGERE
Stergerea cheii primare a tabelei SPEC
 Sintaxa: Dezactivare:
şi a constrângerilor dependente de ALTER TABLE nume_tabela DISABLE PRIMARY KEY
acestea (de exemplu cea de cheie [CASCADE]
ALTER TABLE nume_tabela
străină din STUD) se face astfel: DISABLE UNIQUE(lista_coloane) [CASCADE]
ALTER TABLE nume_tabela DISABLE CONSTRAINT
ALTER TABLE SPEC DROP PRIMARY KEY nume
CASCADE; [CASCADE]
 Reactivare:
ALTER TABLE nume_tabela ENABLE PRIMARY KEY;
ALTER TABLE nume_tabela ENABLE
UNIQUE(lista_coloane);
ALTER TABLE nume_tabela ENABLE CONSTRAINT
nume;
F. Radulescu. Curs: Baze de date 83 F. Radulescu. Curs: Baze de date 84

14
5/12/2008

EFECT EXEMPLU
 DISABLE specifică dezactivarea constrângerii de
integritate respective. Dezactivarea şi reactivarea
 Opţiunea CASCADE duce la dezactivarea constrângerii de cheie primară SPEC_PK
suplimentară a tuturor constrângerilor dependente.
pentru tabela SPEC:
 ENABLE CONSTRAINT specifică reactivarea ALTER TABLE SPEC DISABLE PRIMARY
constrângerii respective. KEY CASCADE;
 În momentul reactivării sistemul verifică dacă datele
la care se referă constrângerea sunt conforme cu ALTER TABLE SPEC ENABLE
aceasta. CONSTRAINT SPEC_PK;
 În cazul în care nu se constată respectarea
constrângerii, ea nu este activată şi se generează un
mesaj de eroare. În caz de activare cu succes,
constrângerile dependente nu sunt reactivate.
F. Radulescu. Curs: Baze de date 85 F. Radulescu. Curs: Baze de date 86

8. GOLIRE TABELA 9. STERGERE TABELA


 Sintaxa: Sintaxa:
TRUNCATE TABLE nume_tabela [REUSE DROP TABLE nume_tabela;
STORAGE];
 Exemplu: golirea tabelei SPEC se poate face prin Exemplu: ştergerea tabelei SPEC se poate
cererea SQL face prin cererea SQL
TRUNCATE TABLE SPEC; DROP TABLE SPEC;
 Opţiunea REUSE STORAGE este folosită pentru a Observaţie: ştergerea unei tabele este
specifica faptul că spaţiul ocupat de liniile şterse
rămâne alocat tabelei şi poate fi folosit la inserările definitivă.
ulterioare în aceasta. O dată ştearsă ea poate fi restaurată doar din
 În lipsa acestei opţiuni spaţiul respectiv devine salvările bazei de date efectuate de
disponibil, putând fi utilizat şi pentru alte tabele.
administrator.
F. Radulescu. Curs: Baze de date 87 F. Radulescu. Curs: Baze de date 88

10. REDENUMIRE TABELA 11. COMENTARII


Sintaxa:  Tabelele şi coloanele acestora pot avea asociat un
comentariu. Acesta este un text şi se asociază astfel:
RENAME nume_vechi TO nume_nou COMMENT ON TABLE nume_tabela IS 'text‘;
Exemplu: redenumirea tabelei SPEC se poate COMMENT ON COLUMN nume_tabela.cume_coloana IS
'text‘;
face prin cererea SQL
 Acestea sunt stocate în dicţionarul de date în
RENAME SPEC TO SPECIALIZARI; tabelele:
Observaţie: comanda RENAME nu este  USER_COL_COMMENTS şi ALL_COL_COMMENTS:
specifică tabelelor ci tuturor obiectelor din  comentariile asociate coloanelor
baza de date.  USER_TAB_COMMENTS şi USER_TAB_COMMENTS
 comentariile asociate tabelelor
Cu ajutorul ei se pot redenumi de asemenea
vederi, secvenţe şi sinonime.
F. Radulescu. Curs: Baze de date 89 F. Radulescu. Curs: Baze de date 90

15
5/12/2008

DICTIONARUL DE DATE DICTIONARUL DE DATE – cont.


Una dintre cerinţele fundamentale pentru ca  Există mai multe categorii de vederi prin care uzual
un sistem de gestiune a bazelor de date să fie aceste date sunt accesate, fiecare având ca şi
considerat cu adevărat relaţional este aceea caracteristică un prefix al numelui care defineşte
ca datele interne ale acestuia să fie categoria respectivă.
organizate şi stocate în acelaşi mod cu datele  Cele mai folosite vederi intră în categoriile definite de
utilizatorilor şi aplicaţiilor care îl folosesc. prefixele următoare:
În acest sens, şi sistemul Oracle îşi ţine  Prefixul USER_ este comun vederilor prin care se pot accesa
informaţii despre obiectele deţinute de utilizator.
aceste date, numite uzual dictionarul de date
 Prefixul ALL_ este specific vederilor care conţin informaţii
al sistemului, sub formă de tabele, iar despre toate tabelele la care utilizatorul are acces.
utilizatorii care au drepturile necesare le pot  Prefixul DBA_ este folosit pentru vederile accesibile doar
accesa fie direct fie folosind o serie de vederi utilizatorilor care au drepturi (privilegii) de administrator al
şi sinonime puse la dispoziţie de sistem. bazei de date.

F. Radulescu. Curs: Baze de date 91 F. Radulescu. Curs: Baze de date 92

EXEMPLE USER_CATALOG
Prezentarea tuturor acestor vederi nu face  utilizator. Are doar două coloane, prima conţinând
obiectul lucrării de faţă. numele şi al doilea tipul obiectului. O parte a
conţinutului acestei tabele, obţinut cu cererea SQL:
În continuare sunt prezentate câteva dintre SELECT * FROM USER_CATALOG;
cele mai importante, legate mai ales de  este următorul:
inventarul de tabele şi constrângeri de TABLE_NAME TABLE_TYPE
integritate existent la un moment dat în ---------------- -----------
sistem: BURSA TABLE
 USER_CATALOG EVENIMENT TABLE
NUMERE TABLE
 USER_OBJECTS SPEC TABLE
 USER_CONSTRAINTS STUD TABLE
 USER_CONS_COLUMNS

F. Radulescu. Curs: Baze de date 93 F. Radulescu. Curs: Baze de date 94

USER_OBJECTS USER_CONSTRAINTS
Conţine numele, tipul şi alte informaţii despre Conţine date despre constrângerile definite
obiectele deţinute de utilizator, inclusiv de utilizator. Dintre coloanele sale
indecşi. menţionăm:
Informaţii sumare despre conţinutul vederii  CONSTRAINT_NAME : Numele constrângerii
se pot obţine cu cererea:  CONSTRAINT_TYPE: Tipul acesteia, codificat pe
SELECT OBJECT_NAME, OBJECT_TYPE un caracter: P: cheie primară, U: cheie (UNIQUE),
R pentru integritatea referenţială şi C pentru
FROM USER_OBJECTS;
constrângerile CHECK (aici sunt incluse şi cele de
Rezultatul include rezultatul obţinut în urma tip NOT NULL)
cererii anterioare (USER_CATALOG).  SEARCH_CONDITION: Condiţia asociată
constrângerii
F. Radulescu. Curs: Baze de date 95 F. Radulescu. Curs: Baze de date 96

16
5/12/2008

EXEMPLU USER_CONS_COLUMNS
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,  Conţine informaţii despre coloanele care sunt implicate în
SEARCH_CONDITION constrângerile de integritate. Cererea următoare afişează
FROM USER_CONSTRAINTS; perechi (nume constrângere, nume coloană implicată) pentru
constrângerea BURSA_CK:
Rezultat: SELECT CONSTRAINT_NAME, COLUMN_NAME
CONSTRAINT_NAME C SEARCH_CONDITION FROM USER_CONS_COLUMNS
------------------------ - ---------------------- WHERE CONSTRAINT_NAME = 'BURSA_CK';
BURSA_CK C PMIN < PMAX AND PMIN >= 0
AND PMAX >= 0 AND SUMA
 Rezultatul este:
BETWEEN 0 AND 500 CONSTRAINT_NAME COLUMN_NAME
DOM_NENUL U ------------------------ --------------------
DOM_5 C LENGTH(NUME)>5 BURSA_CK PMIN
NUME_NENUL C NUME IS NOT NULL BURSA_CK PMAX
BURSA_CK SUMA

F. Radulescu. Curs: Baze de date 97 F. Radulescu. Curs: Baze de date 98

CATE VEDERI SUNT?


Există peste 2000 de vederi puse la
dispoziţie de sistemul Oracle (V9) dintre
care peste 200 în fiecare dintre
categoriile USER_, ALL_ şi DBA_. Sfarsitul capitolului
O descriere completă a lor se găseşte în
documentaţia aferentă sistemului. CREAREA TABELELOR
Lista tuturor vederilor poate fi obţinută
cu cererea:
SELECT VIEW_NAME FROM ALL_VIEWS;

F. Radulescu. Curs: Baze de date 99 F. Radulescu. Curs: Baze de date 100

17

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