Documente Academic
Documente Profesional
Documente Cultură
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
1
5/12/2008
2
5/12/2008
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) );
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).
4
5/12/2008
5
5/12/2008
6
5/12/2008
7
5/12/2008
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
8
5/12/2008
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:
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));
9
5/12/2008
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.
11
5/12/2008
12
5/12/2008
13
5/12/2008
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
15
5/12/2008
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
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
17