This is an old revision of the document!
Laboratorul 09.
Crearea și definirea structurilor tabelare
Crearea unei tabele
Sintaxa comenzii de creare este următoarea:
CREATE TABLE [schema.]TABLE_NAME [table_constraint]
COLUMN datatype [DEFAULT expr] [column_constraints]
[table_contstraints][TABLESPACE tablespace]
[storage parameters]
[ENABLE/DISABLE clause][AS subquery]
unde:
schema - este schema unde se creează tabela (specifică utilizatorului și bazei de date)
table_name - este numele tabelei
column - este numele coloanei
datatype - reprezintă tipul coloanei
DEFAULT expr - specifică valoarea implicită a coloanei
column_constraints - definește constrângerile de integritate pentru coloană
table_constraints - definește constrângerile de integritate la nivel de tabelă
tablespace - specifică în ce tablespace al bazei de date se creează tabela
storage_parameters - definește parametrii de creare și pot fi
PCTFREE - procentaj de spațiu rezervat pentru update
PCTUSED - procentaj minim folosit pentru un bloc de date
INITRANS - numărul inițial de tranzacții pentru fiecare bloc (1-255)
MAXTRANS - numărul maxim de tranzacții concurente (1-255)
CLUSTER - specifică dacă tabela face parte dintr-un cluster
ENABLE/DISABLE clause - activare / dezactivare de constrângeri
AS subquery - inserare de date dintr-o altă tabelă obținute printr-o interogare
Tipurile de date
Tipurile de date care pot fi asociate coloanelor unei tabele pot fi :
Câteva dintre cele mai uzuale tipuri de date sunt:
NUMBER - număr real de dimensiune variabilă (maxim 38 cifre)
NUMBER(n) - număr întreg de n cifre
NUMBER(n,m) - număr real de n cifre, dintre care m zecimale
CHAR(n) - șir de caractere de lungime fixă n (1-2000)
NCHAR(n) - analog cu CHAR, dar poate stoca șiruri de caractere Unicode
VARCHAR2(n) - șir de caractere de lungime variabilă n
NVARCHAR2(n) - analog cu VARCHAR dar poate stoca șiruri de caractere Unicode
LONG - șir de caractere de maxim 2 la puterea 31 octeți
LONG RAW - similar cu LONG dar conține date binare
ROWID - poate stoca identificatorul unei linii din tabelă
DATE - data calendaristică
TIMESTAMP(n) - extensie pentru tipul DATE care conține și fracțiuni de secundă pe n zecimale
Constrângeri de integritate
NOT NULL - înregistrările nu pot conține valori nule
UNIQUE - definește o cheie unică pe una sau mai multe coloane (nu pot fi mai multe înregistrări cu aceleași valori pe coloanele respective
PRIMARY KEY - definește o cheie primară la nivel de coloană sau tabelă (nu pot fi mai multe înregistrări cu aceeași cheie primară)
FOREIGN KEY - definește o cheie externă (tabela se relaționează cu altă tabelă pe o cheie unică sau cheie primară)
CHECK - forțează o condiție pe coloană
Exemplu
CREATE TABLE angajati (
id_ang NUMBER(4) PRIMARY KEY,
nume varchar2(30) CONSTRAINT CK_NUME CHECK (nume=UPPER(nume)),
functie varchar2(20) REFERENCES functii(den_functie),
id_sef NUMBER(4) REFERENCES angajati(id_ang),
data_ang DATE,
salariu NUMBER(7,2) CHECK (salariu>0),
comision NUMBER(7,2),
id_dep NUMBER(2) REFERENCES departamente (id_dep),
CONSTRAINT CK_COM CHECK (comision<=salariu));
Exerciții
Exercițiile nu sunt identice între 2 ședințe de laborator. Diferențele sunt date de parametrii adiționali
prezenți în fiecare dintre ele, ce vor fi descriși de laborant în cadrul fiecărui laborator.
1. Să se creeze o tabela 'salarii' care să conțină ID și DENUMIRE DEPARTAMENT, SALARIU MINIM, SALARIU MAXIM și parametrii adiționali
. Tabela va fi populată, prin comanda de creare, din tabelele cu departamente și angajați.
2. Să se creeze trei tabele: INTRARI_GESTIUNE, IESIRI_GESTIUNE și STOCURI_GESTIUNE, cu următoarele structuri:
INTRARI_GESTIUNE: NR_DOC_IN, DATA_DOC_IN, COD_PRODUS, CANT_IN, COD_UM, PRET_UNITAR
IESIRI_GESTIUNE: NR_DOC_OUT, DATA_DOC_OUT, COD_PRODUS,CANT_OUT,COD_UM, NR_DOC_IN, DATA_DOC_IN
STOCURI_GESTIUNE: NR_DOC_IN,DATA_DOC_IN,COD_PRODUS,STOC,COD_UM, VALOARE, DATA_STOC
Constrângeri: pe un tip produs, pot exista mai multe intrări; pe un document de intrare pot exista mai multe produse; același produs poate avea mai multe unități de măsură, deci implicit mai multe prețuri unitare; pentru un produs și document de intrare, pot exista mai multe documente de ieșire – până la epuizarea stocurilor.
Scrieți cereri pe aceste tabele care îndeplinesc parametrii adiționali
. Fiecare cerere va fi data sub forma CERERE(PARAMETRI): ea va fi implementata intr-un fisier cu numele CERERE, iar parametrii se vor cere ca variabile substituite.
3. Pe lângă tabelele de la exercițiul 2, construiți o tabelă FACTURI, care conține NUMAR_FACTURA,DATA_FACTURARII, DEBITOR, CREDITOR si o lista de produse intrate in gestiune, sau iesite din gestiune. Scrieți cereri pe această tabelă care îndeplinesc parametrii adiționali
.
Bibliografie
Alexandru Boicea - Oracle SQL SQL Plus, Editura Printech