This is an old revision of the document!
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:
OPTIUNEA DEFAULT
Unei coloane ii poate fi data o valoare implicita prin optiunea DEFAULT. Aceasta previne aparitia de valori null (sau erori, daca era specificat NOT NULL) atunci cand o linie este inserata fara o valoare din coloana. Valorile implicite pot fi literali, o expresie, dar nu numele altei coloane. Functii ca SYSDATE si USER sunt valide.
Exemplu:
CREATE TABLE exemplu (hiredate DATE DEFAULT SYSDATE, sal NUMBER (7,2) DEFAULT 0, operator varchar2(10) DEFAULT USER, university varchar2(5) DEFAULT 'UPB');
Crearea unei tabele cu linii din alta tabela
Exemplu 1:
CREATE TABLE DEPT30 AS SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE DEPTNO = 30;
Exemplu 2:
CREATE TABLE EMP_SALS (NAME,SALARY,GRADE) AS SELECT ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE EMP.SAL BETWEEN LOSAL AND HISAL;
Tipurile de date care pot fi asociate coloanelor unei tabele pot fi :
Câteva dintre cele mai uzuale tipuri de date sunt:
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));
Constrangerea NOT NULL
Constrangerea NOT NULL se aplica la nivel de coloane si verifica daca inregistrarile au valori nule pe coloanele respective, fortand un cod de eroare care anuleaza tranzactia. Cand se creaza constrangeri pe o cheie primara se creaza automat si o constrangere NOT NULL pe coloanele respective (o cheie primara nu trebuie sa contina valori nule pe coloanele care o definesc).
Constrangerea UNIQUE
Aceasta desemneaza o coloana sau o combinatie de coloane ca fiind cheie unica. Doua linii in aceeasi tabela nu pot avea aceeasi valoare pentru aceasta cheie. Valorile NULL sunt permise daca cheia unica este bazata pe o singura coloana.
Exemplu: pentru a va asigura ca nu sunt 2 nume de departamente identice la aceeasi locatie:
CREATE TABLE DEPT (DEPTNO NUMBER, DNAME VARCHAR2(9), LOC VARCHAR2(10), CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME,LOC))
Constrangere de cheie primara
Ca si in cazul cheilor unice, o cheie primara forteaza unicitatea unei coloane sau a unei combinatii de coloane implicate si un index unic este creat pentru a permite acest lucru. Poate fi o singura cheie primara pe o tabela, si aceasta este cheia prin care liniile in tabela sunt identificate individual. In coloanele de chei primare nu sunt permise valori NULL.
Exemplu: Nomenclator de functii in care fiecare functie sa aiba un cod unic.
CREATE TABLE functii ( cod_functie NUMBER(2) CONSTRAINT PK PRIMARY KEY, den_functie VARCHAR(10), data_valid DATE);
Constrangere de cheie externa
Cheile externe furnizeaza reguli de integritate de referinta in cadrul unei tabele sau intre tabele. O cheie exeterna este folosita numai in relatie cu o cheie primara sau unica.
Exemplu: Relationarea tabelei angajati cu tabelele departamente si functii.
CREATE TABLE angajati (id_ang NUMBER(4) PRIMARY KEY, nume varchare2(10), functie varchar2(10) REFERENCES functii(den_functie), id_sef NUMBER(4) REFERENCES angajati(id_ang), data_ang DATE, salariu NUMBER(7,2), comision NUMBER (7,2), id_dep NUMBER(2) REFERENCES departamente(id_dep));
Optiunea ON DELETE CASCADE
Pentru a putea sterge in tabela de referinta linii referite in alte tabele se foloseste optiunea ON DELETE CASCADE. In acest caz, cand se sterge o linie in tabela de referinta se vor sterge toate liniile din tabelele relationate care sunt in relatie cu linia respectiva.
In cazul unei tabele relationata cu ea insasi, stergerea unei linii care este referita duce la aparitia de valori nule pe toate coloanele in liniile relationate. Spre exemplu, in tabela angajati, cand se sterge linia aferenta unui sef, toti angajatii care au seful respectiv vor primi valoare null pe coloana id_sef.
Folosind optiunea ON DELETE SET NULL, coloanele de relatie din tabela relationata devin nule si nu sunt sterse liniile realationate atunci cand se sterge o linie din tabela de referinta.
Constrangerea de verificare (CHECK)
Constrangerea CHECK defineste explicit conditia pe care trebuie sa o satisfaca o linie Conditia poate folosi aceleasi constructii ca cele dintr-o restrictie de cerere, cu urmatoarele exceptii: (1) nu sunt permise subcereri, (2) nu sunt permise referirile la pseudo-coloane precum SYSDATE.
Exemplu:
CREATE TABLE EMP (EMPNO NUMBER(4) CONSTRAINT EMP_PRIM PRIMARY KEY, ENAME VARCHAR2(10) CONSTRAINT ENAME_CONS CHECK(ENAME=UPPER(ENAME)), JOB VARCHAR2(10), MGR NUMBER(4) CONSTRAINT EMP_MGR REFERENCES EMP(EMPNO), HIREDATE DATE DEFAULT SYSDATE, SAL NUMBER(7,2) CONSTRAINT SAL_CONS NOT NULL, COMM NUMBER(7,2), DEPTNO NUMBER(2) CONSTRAINT DEPTNO_CONS NOT NULL, CONSTRAINT EMP_DEPT FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));
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
.