Documente Academic
Documente Profesional
Documente Cultură
SQL - Data Definition Language (DDL)
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
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
TIMESTAMP [(n)] WITH TIME ZONE TIMESTAMP [(n)] WITH LOCAL TIME ZONE INTERVAL YEAR [(n)] TO MONTH INTERVAL DAY [(z)] TO SECOND [(s)]
12
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
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
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
Se creaz o tabel avnd numele specificat i aceeai structur cu a rezultatului returnat de SELECT.
24
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
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
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
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.
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
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
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
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;
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
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.
75