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