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

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:

 HIREDATE DATE DEFAULT SYSDATE,
 SAL NUMBER (7,2) DEFAULT 0;

Tipurile de date

Tipurile de date care pot fi asociate coloanelor unei tabele pot fi :

  • tipuri numerice
  • tipuri alfanumerice
  • tipuri pentru data calendaristică și timp
  • tipuri compuse (matrice sau tabelă)

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));

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));

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

  1. Alexandru Boicea - Oracle SQL SQL Plus, Editura Printech
bd/laboratoare/09.1398749275.txt.gz · Last modified: 2014/04/29 08:27 by andreea.urzica
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0