10.CONSTRANGERI
ObiectiveDupa parcurgerea acestui capitol trebuie sa fiti capabili sa:
Constrangeri
Servarul Oracle utilizeaza constrangeri pentru a preveni patrunderea de date invalide in tabele
Tipuri de constrangeri
Constrangere | Descriere |
---|---|
NOT NUL | specifica faptul ca o coloana nu poate avea valoarea nula |
UNIQUE | specifica o coloana sau o combinatie de coloane a carei valori trevuie sa fie unice pentru toate randurile din tabel |
PRIMARY KEY | identifica fiecare rand al tabelei |
FOREIGN KEY | stabileste o relatie de cheie straina intre coloana si coloana tabelei de referinta |
CHEcK | specifica o conditie care trebuie sa fie adevarata |
Ghidul Constrangerilor
Toate constrangerile sunt cuprinse intr-un dictionar. Este usor sa se faca referinta la constrangeri daca li se da nume sugestive. Numele unei constrangeri trebuie sa urmeze un anumit standard. Daca nu se denumeste constrangerea, servarul Oracle genereaza un nume de forma SYS_Cn, unde n este un numar intreg astfel incat numele constragerii este unic.
Constrangerile definite pentru un anumit tabel pot fi vizualizate in USER_CONSTRAINTS (dictionarul tabelei).
Definirea Constrangerilor
Sintaxa CREATE TABLE [schema.]table
(column datatype [DEFAULT expr] [column_constraint], [table_constraint][...]); |
In sintaxa mai sus prezentata:
schema | este aceeasi ca si numele titularului |
table | este numele tabelei |
DEFAULT expr | specifica o valoare predefinita care sa fie utilizata daca o valoare este omisa indeclaratia INSERT |
column | este numele coloanei |
datatype | este tipul datei si lungimea coloanei |
column_constraint | este o constata de integritate ca parte a definitiei coloanei |
table_constraint | este o constanta de integritate ca parte a definitiei tabelei |
EXEMPLU
Adaugarea unei constrangeri unui tabel odata cu creearea lui
De obicei constrangerile sunt create in acelasi timp cu tabelul.Constrangerile pot fi adaugate tabelului dupa creearea lui.
Constrangerile pot fi definite pe 2 nivele:
Nivelul constrangerii | Descriere |
---|---|
Coloana | Face referire la o singura coloana; poate defini orice tip de constrangere de integritate |
Tabel | Face referire la una sau ma multe coloane; poate defini orice constrangere exceptand pe cea de tip NOT NUL |
1. Constrangere la nivel de coloana
column [CONSTRAINT constraint_name] constraint_type |
2. Constrangere la nivel de tabel
column,.. [CONSTRAINT constraint_name] constraint_type (column,...), |
In sintaxa avem:
constraint_name | este numele constrangerii |
constraint_type | este tipul constrangerii |
Constrangerea de tip NOT NULL asigura faptul ca o coloana sa nu contina valoarea nula. Ea poate fi specificata la nivel
de coloana si nu la nivel de tabel.
Exemplu
In exemplul urmator constrangerea NOT NULL se aplica coloanelor ENAME si HIREDATE din tabelul newemp. Pentru coloana ENAME constragerea nu este denumita astfel incat servarul Oracle o sa creeze un nume pentru ea.Pentru coloana HIREDATE constrangerea este denumita: "...CONSTRAINT hiredate_nn NOT NULL...".
Acum vom incerca sa inseram valori doar in coloanele EMPNO, SAL, COMM, dar la executareane va da eroare pentru ca ENAME si HIREDATE au valori nule iar constrangerile ne obliga sa le atribuim o valoare.