10_SQL - Creare Tabele

Embed Size (px)

Citation preview

  • 8/18/2019 10_SQL - Creare Tabele

    1/98

    STUD MATR NUME AN GRUPA DATAN LOC TUTOR PUNCTAJ CODS

    ---- ------- -- ------ --------- ---------- ----- ------- ----1456 GEORGE 4 1141A 12-MAR-82 BUCURESTI 2890 11

    1325 VASILE 2 1122A 05-OCT-84 PITESTI 1456 390 111645 MARIA 3 1131B 17-JUN-83 PLOIESTI 1400 113145 ION 1 2112B 24-JAN-85 PLOIESTI 3251 1670 212146 STANCA 4 2141A 15-MAY-82 BUCURESTI 620 213251 ALEX 5 2153B 07-NOV-81 BRASOV 1570 21

    - -

    2

    4311 ADRIAN 3 2431A 31-JUL-83 BUCURESTI 450 243514 FLOREA 5 2452B 03-FEB-81 BRASOV 3230 241925 OANA 2 2421A 20-DEC-84 BUCURESTI 4311 760 242101 MARIUS 1 2412B 02-SEP-85 PITESTI 3514 310 244705 VOICU 2 2421B 19-APR-84 BRASOV 4311 1290 24

  • 8/18/2019 10_SQL - Creare Tabele

    2/98

    SPEC si BURSACODS NUME DOMENIU

    ----- ---------- ---------------

    11 MATEMATICA STIINTE EXACTE21 GEOGRAFIE UMANIST

    24 ISTORIE UMANIST

    3

    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

  • 8/18/2019 10_SQL - Creare Tabele

    3/98

    OBIECTIVScopul acestui capitol este de a prezenta

    elementele limbajului pentru descriereadatelor (DDL) referitoare la:Tipurile de date permise pentru coloaneletabelelor,

    4

    rearea e no a e e,Constrângeri de integritate,Modificarea structurii unei tabele,Modificarea şi activarea constrângerilor deintegritate,Dicţionarul de date al sistemului.

  • 8/18/2019 10_SQL - Creare Tabele

    4/98

    TIPURI DE DATESistemul Oracle pune la dispoziţie un set optim

    de tipuri de date care pot fi asociatecoloanelor unei tabele, grupate în mai multecategorii:Tipuri numerice scalare

    5

    pur sca are ş r e carac ereTipuri scalare binareTipuri pentru date calendaristice, timp şiinterval de timpTipuri LOB (large object)Tipuri compuse: TABLE şi VARRAY

  • 8/18/2019 10_SQL - Creare Tabele

    5/98

    TIPURI DE DATE (2) Aceste tipuri, cu unele diferenţe în ceea ce

    priveşte dimensiunea maximă admisă, potfi folosite şi în limbajul procedural PL/SQL.În continuare sunt prezentate tipurile din

    6

    primele cinci categorii.Crearea unei tabele cu coloane de tipTABLE şi VARRAY şi manipularea datelorde acest fel nu este prezentată în acestcapitolul.

  • 8/18/2019 10_SQL - Creare Tabele

    6/98

    TIPURI NUMERICE SCALARTip Descriere

    NUMBER Număr real de dimensiune variabilă, cu 38 decifre semnificative, având valori între 1E-130şi 10E125.

    NUMBER(n) Număr întreg cu maximn cifreNUMBER n, z Număr real cun cifre dintre carez zecimale

    7

    DEC, DECIMAL,NUMERIC

    Subtipuri pentru NUMBER. Numere în virgulă fixă cu 38 de cifre semnificative.

    DOUBLEPRECISION, FLOAT

    Subtipuri pentru NUMBER. Numere în virgulă mobilă cu 38 de cifre semnificative.

    REAL Subtip pentru NUMBER. Numere în virgulămobilă cu 18 cifre semnificative.

  • 8/18/2019 10_SQL - Creare Tabele

    7/98

    TIPURI NUMERICE SCALARE (Tip Descriere

    INTEGER, INT,SMALLINT

    Subtipuri pentru NUMBER. Numere întregicu maxim 38 de cifre

    BINARY_INTEGERÎntregi între -231 şi 231 .NATURAL,POSITIVE

    Subtipuri pentru BINARY_INTEGER.Numere întregi non-negative, respectivpozitive.

    8

    ,POSITIVEN

    _ .Numere întregi nenule non-negative,respectiv pozitive.

    SIGNTYPE Subtip al BINARY_INTEGER. Poate luadoar valorile -1, 0 şi 1.

    PLS_INTEGER Întregi între -231 şi 231 . Similar cu

    BINARY_INTEGER dar operaţiile cu astfelde numere sunt mai rapide şi în caz dedepăşire se ridică o excepţie.

  • 8/18/2019 10_SQL - Creare Tabele

    8/98

    SIRURITip Descriere

    CHAR(n), CHAR Şir de caractere de lungime fixă, egală cu n . Valoarea maximă pentru n este 2000. Dacă nlipseşte, şir de caractere de lungime 1.

    CHARACTER,CHARACTER(n)

    Identice cu cele anterioare. Introduse pentrucompatibilitatea cu alte sisteme.

    9

    în seturi de caractere naţionale (multioctet)

    VARCHAR2(n) Şir de caractere de lungime variabilă egală cun . Valoarea maximă pentru n este 4000.

    STRING(n), VARCHAR(n)

    Identice cu VARCHAR2, introduse pentrucompatibilitatea cu alte sisteme

    NVARCHAR(n) Analog cu VARCHAR. Poate stoca şiruriscrise în seturi de caractere naţionale(multioctet)

  • 8/18/2019 10_SQL - Creare Tabele

    9/98

    SIRURI (2)Tip Descriere

    LONG Şir de caractere de maxim 231

    octeţi. Este permisă doar o singură coloană de acest tip pentru o tabelă.

    ROWID Poate stoca un identificator pentru o liniedintr-o tabelă. Pentru conversia la/de la şirde caractere (18 caractere) se pot folosi

    10

    func iile SQL ROWIDTOCHAR respectivCHARTOROWID.

    UROWID Universal ROWID. Poate stoca unidentificator logic şi fizic de linie într-otabelă, indexată sau nu precum şi unidentificator de linie extern (non-Oracle). Nu

    este necesară folosirea funcţiilor de conversiela/de la şir de caractere (conversieautomată).

  • 8/18/2019 10_SQL - Creare Tabele

    10/98

    TIPURI BINARE

    Tip DescriereRAW(n) Similar cu VARCHAR2 dar conţin

    11

    binare. Valoarea maximă pentrun este de2000.LONG RAW Similar cu LONG dar conţine date b

  • 8/18/2019 10_SQL - Creare Tabele

    11/98

    DATE, TIMP SI INTERVALTip Descriere

    DATE Dată calendaristică (secol, an, lună, zi, oră,

    minut, secundă).TIMESTAMP[(n)] Extensie a tipului DATE. Conţine şi fracţiunide secundă. Dacă este prezent, n specificănumărul de zecimale pentru acestea. Implicitn = 6

    TIMESTAMP [(n)] Extinde tipul TIMESTAMP conţinând şi o

    12

    (GMT)TIMESTAMP [(n)]WITH LOCAL TIMEZONE

    Similar cu tipul anterior dar la stocarea înbaza de date valorile sunt convertite la orazonei bazei de date iar la regăsire la ora zoneiaplicaţiei client.

    INTERVAL YEAR[(n)] TO MONTH

    Se stochează intervale de ani şi luni. Precizian specifică numărul de cifre pentru an (între 0

    şi 4, implicit 2).INTERVAL DAY[(z)] TO SECOND[(s)]

    Similar cu tipul anterior, dar pentru intervalede zile şi secunde. valorile z şi s sunt

    preciziile pentru zile, respectiv secunde (0-9,implicit 2 pentru z şi 6 pentru s ).

  • 8/18/2019 10_SQL - Creare Tabele

    12/98

    TIPURI LARGE OBJECT Aceste tipuri, introduse în ultimele versiuni

    ale sistemului, permit stocarea unor cantităţimari de date pe coloanele unei tabele sau aunei referinţe (numită şi locator) către un

    13

    .Manipularea valorilor de acest tip se face înPL/SQL cu ajutorul pachetelor de proceduri şifuncţii puse la dispoziţie de sistem.Caracteristicile lor sunt următoarele:

  • 8/18/2019 10_SQL - Creare Tabele

    13/98

    TIPURI LOB – cont.Tip DescriereCLOB Şir de caractere de până la 4 GB. Se

    recomandă ca în aplicaţiile noi să fie folositîn locul lui LONG.

    NCLOB Similar cu CLOB dar se pot stoca şiruri

    14

    utilizând seturi na ionale de caractere.Dimensiunea maximă este de asemenea de 4GB

    BLOB Date binare de dimensiune până la 4 GBBFILE Date binare de dimensiune până la 4 GB

    stocate în fişiere externe. Nu participă la

    tranzacţii, replicare şi pot fi doar citite nu şimodificate.

  • 8/18/2019 10_SQL - Creare Tabele

    14/98

    CREATE TABLECea mai simplă formă a cererii SQL de creare a unei noitabele are următoarea sintaxă:

    CREATE TABLE [schema.]nume_tabela(nume_coloana_1 tip_coloana_1 [DEFAULTexpresie_1],

    nume_coloana_2 ti _coloana_2 DEFAULT

    15

    expresie_2],. . .

    nume_coloana_n tip_coloana_n [DEFAULTexpresie_n]);

    unde:nume_tabela este numele tabelei care se crează,nume_coloana_1, nume_coloana_2, ... sunt numelecoloanelor acesteia

  • 8/18/2019 10_SQL - Creare Tabele

    15/98

    CREATE TABLE – cont.tip_coloana_1, tip_coloana_2, ... reprezintătipurile de date pentru coloanele respective, alesedintre cele prezentate în paragraful anterior, cuspecificarea, dacă este cazul, a dimensiunii maximesau preciziei,

    16

    _ valoare implicită care este introdusă automat în aceacoloană în cazul în care la adăugarea unei noi linii nuse specifică o valoare pe coloana respectivă,schema este numele de utilizator Oracle alproprietarului noii tabele. Valoarea implicită pentruacesta este numele utilizatorului care executăcererea de creare.

  • 8/18/2019 10_SQL - Creare Tabele

    16/98

    TREBUIE CA:Utilizatorul are drepturile necesare (dreptul sauprivilegiul - în terminologia uzuală - de CREATETABLE).Există spaţiu de stocare pentru noua tabelă.Numele tabelei şi al coloanelor respectă restricţiile

    17

    ,literă, conţine litere, cifre şi caracterele _, $, #, nueste cuvânt rezervat Oracle). Sunt permise şi altecaractere dacă numele este inclus între ghilimele.Nu există deja un alt obiect cu acelaşi nume înaceeaşi schemă (pentru acelaşi utilizator Oracle).

  • 8/18/2019 10_SQL - Creare Tabele

    17/98

    LITERE MARI SI MICICa şi în cazul cuvintelor cheie, literele

    mici şi cele mari sunt considerate egale în numele de tabele şi coloane.

    18

    exemple este aceeaşi dacă la creare sefoloseşte oricare din numele STUD,Stud sau StuD.

  • 8/18/2019 10_SQL - Creare Tabele

    18/98

    OBSERVATIIExpresia din clauza opţională DEFAULTtrebuie să se evalueze la o valoare de tipcompatibil cu al coloanei respective. Ea poateconţine:

    Constante numerice sau şir de caractere,

    19

    Funcţii SQL, inclusiv SYSDATE sau USER.dar nu poate conţine:Numele unei coloane,Numele unei pseudocoloane. (de exemplupseudocoloanele definite de o secvenţă: NEXTVALsau CURRVAL).

  • 8/18/2019 10_SQL - Creare Tabele

    19/98

    EXEMPLUCREATE TABLE STUD(

    MATR NUMBER(4), NUME VARCHAR2(10), AN NUMBER(1) DEFAULT 1,

    20

    DATAN DATE,LOC VARCHAR2(10) DEFAULT 'BUCURESTI',TUTOR NUMBER(4),

    PUNCTAJ NUMBER(4) DEFAULT 0,CODS NUMBER(2) );

  • 8/18/2019 10_SQL - Creare Tabele

    20/98

    OBSERVAM CA:MATR, AN, TUTOR, PUNCTAJ şi CODS care conţinvalori de tip număr întreg au fost definite ca

    NUMBER(n) unde n este 1, 2 sau 4,NUME, GRUPA şi LOC sunt şiruri de caractere delungime variabilă definite ca VARCHAR2,DATAN care conţine data naşterii studentului este de

    21

    pu ,Pentru unele dintre coloane au fost asociate valoriimplicite 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 coloanelorrespective (întreg sau şir de caractere, după caz).

  • 8/18/2019 10_SQL - Creare Tabele

    21/98

    Crearea unei tabele în care se stochează date

    despre evenimente: momentul de început,durata şi o descriere a acestora.CREATE TABLE EVENIMENT(

    22

    ,

    "MOMENT INCEPUT" TIMESTAMP(3) WITH LOCALTIME ZONE,

    DURATA INTERVAL DAY(2) TO SECOND(3),

    "DESCRIERE (PE LARG)" LONG);

  • 8/18/2019 10_SQL - Creare Tabele

    22/98

    OBSERVAM CA:COD: un număr întreg de maxim 10 cifre,MOMENT ÎNCEPUT: conţine momentul începutuluiunui eveniment în forma: data, ora, minutul, secundaşi miimile de secundă: TIMESTAMP(3) arată căfracţiunile de secundă sunt memorate cu 3 zecimale.Numele coloanei conţine un spaţiu şi a trebuit pus

    23

    .DURATA: durata evenimentului în zile, ore, minute,secunde şi fracţiuni de secundă. Numărul de zilepoate avea maxim 2 cifre iar numărul de secundemaxim 3 zecimale.DESCRIERE (PE LARG): conţine un text de descrierea evenimentului care poate avea până la 2 GBcaractere. Se folosesc ghilimelele pentru că numelecoloanei conţine spaţii şi paranteze.

  • 8/18/2019 10_SQL - Creare Tabele

    23/98

    CREATE din SELECTCREATE TABLE [schema.]nume_tabela

    [(descriere_coloana_1, ...,descriere_coloana_n)]

    AS

    24

    _

    Se crează o tabelă având numele

    specificat şi aceeaşi structură cu arezultatului returnat de SELECT.

  • 8/18/2019 10_SQL - Creare Tabele

    24/98

    CREATE din SELECT (2)Descrierea coloanelor nu este prezentă în cerere:

    Numele coloanelor tabelei create precum şi tipulacestora este identic cu al celor din rezultatulcererii SELECT.Noua tabelă nu mo tene te nici una dintre

    25

    constrângerile de integritate ale tabelei/tabelelordin care provine rezultatul.Dacă în lista de expresii din clauza SELECTexistă unele care nu returnează pentru capul detabel al rezultatului un nume valid de coloanăeste obligatorie folosirea unor aliasuri decoloană.

  • 8/18/2019 10_SQL - Creare Tabele

    25/98

    CREATE din SELECT (3)CREATE TABLE STUD11 AS

    SELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"FROM STUD WHERE CODS = 11;Conţinutul tabelei STUD11 va fi următorul:

    MATR NUME PUNCTAJ MARIT----- ---------- -------------

    26

    1456 GEORGE 31791325 VASILE 4291645 MARIA 1540

    iar descrierea structurii sale este: Nume coloana Tip

    ------------- ------------- MATR NUMBER(4) NUME VARCHAR2(10)

    PUNCTAJ MARIT NUMBER

  • 8/18/2019 10_SQL - Creare Tabele

    26/98

    CREATE din SELECT (4)Crearea tabelei se face inclusiv în cazul în carecererea SELECT nu returnează nici o linie. Deexemplu:CREATE TABLE STUD100

    AS

    27

    , , . MARIT"

    FROM STUD WHERE CODS = 100;

    va avea ca efect crearea tabelei STUD100 avândaceeaşi structură cu STUD11 dar aceasta nu vaconţine nici o linie.

  • 8/18/2019 10_SQL - Creare Tabele

    27/98

    CREATE din SELECT (5)Cererea conţine descrierea coloanelor:Descrierea unei coloane are următoarea formă:

    nume_coloana [DEFAULT expresie] [constrângeri_integritate]Numărul de descrieri de coloană trebuie să fie egal cunumărul de coloane din rezultatul cererii SELECT.Numele coloanelor tabelei create este cel din descriere iar

    28

    SELECT.Dacă descrierea unei coloane conţine clauza DEFAULTexpresie, se asociază acestei coloane valoarea implicitărespectivă.Noua tabelă nu moşteneşte nici una dintre constrângerilede integritate ale tabelei/tabelelor din care provinerezultatul dar primeşte constrângerile de integritate dindescriere, dacă acestea există

  • 8/18/2019 10_SQL - Creare Tabele

    28/98

    CREATE din SELECT (6)CREATE TABLE STUD11(NUMAR DEFAULT 0 NOT NULL, NUME, PUNCTE NOT NULL)

    ASSELECT MATR, NUME, PUNCTAJ*1.1 "PUNCTAJ MARIT"FROM STUD

    WHERE CODS = 11;

    29

    , ,prima are o valoare implicită iar două dintre ele au asociată oconstrângere de tip NOT NULL (nu se pot stoca valori nule peacele coloane):

    Nume coloana Null? Tip Implicit-------------- -------- ------------- ---------

    NUMAR NOT NULL NUMBER(4) 0 NUME VARCHAR2(10)

    PUNCTE NOT NULL NUMBER

  • 8/18/2019 10_SQL - Creare Tabele

    29/98

    CONSTRANGERIConstrângerile de integritate reprezintă reguli pe carevalorile conţinute într-o tabelă trebuie să le respecte.Ele previn introducerea de date eronate în baza dedate şi definesc forma corectă a valorilor respectivedar nu iau în consideraţie semnificaţia acestora.

    30

    de sistemul de gestiune atunci când au loc operaţii demodificare a conţinutului tabelelor (adăugare,ştergere şi modificare linii).În cazul în care noile valori nu sunt valide operaţia demodificare este rejectată de sistem şi se generează oeroare.

  • 8/18/2019 10_SQL - Creare Tabele

    30/98

    TIPURI DE CONSTRANGERINOT NULL: valorile nu pot fi nulePRIMARY KEY: defineşte cheia primarăa unei tabeleUNI UE: define te o altă cheie a

    31

    tabeleiFOREIGN KEY: defineşte o cheie străină(externă)CHECK: introduce o condiţie (expresielogică).

  • 8/18/2019 10_SQL - Creare Tabele

    31/98

    CONSTRANGERI (2)Fiecare constrângere de integritate poateavea asociat un nume specificat la creareatabelei care permite activarea saudezactivarea constrângerii şi alte operaţii cu

    32

    .În cazul în care nu se asociază un astfel denume sistemul generează automat unul.Locul definirii unei constrângeri de integritate

    în cererea de creare a unei tabele poate fi:

  • 8/18/2019 10_SQL - Creare Tabele

    32/98

    CONSTRANGERI (3)În descrierea unei coloane, dacă aceaconstrângere se referă doar la aceasta (uzualse spune despre o astfel de constrângere căeste definităla nivel de coloană ),În continuarea listei de descrieri de coloane

    33

    (la nivel de tabelă ).În funcţie de locul unde se găseşte, sintaxadefinirii unei constrângeri poate fi diferită.

    Pentru fiecare tip de constrângere suntprezentate ambele sintaxe şi exemple defolosire a lor.

  • 8/18/2019 10_SQL - Creare Tabele

    33/98

    DETALIERE CONSTRANGERNOT NULL: valorile nu pot fi nulePRIMARY KEY: defineşte cheia primarăa unei tabeleUNI UE: define te o altă cheie a

    34

    tabeleiFOREIGN KEY: defineşte o cheie străină(externă)CHECK: introduce o condiţie (expresielogică).

  • 8/18/2019 10_SQL - Creare Tabele

    34/98

    NOT NULL Acest tip de constrângere se aplică unei

    coloane a noii tabele şi specifică faptul căaceasta nu poate conţine valori nule. Eloate fi definit doar la nivel de coloană i

    35

    are următoarea sintaxă:coloana [CONSTRAINT nume_constr] NOT NULL

  • 8/18/2019 10_SQL - Creare Tabele

    35/98

    EXEMPLUCREATE TABLE SPEC

    (CODS NUMBER(2), NUME VARCHAR2(10) CONSTRAINT

    36

    ,

    DOMENIU VARCHAR2(15) NOT NULL );

  • 8/18/2019 10_SQL - Creare Tabele

    36/98

    DETALIERE CONSTRANGERNOT NULL: valorile nu pot fi nulePRIMARY KEY: defineşte cheia primarăa unei tabeleUNI UE: define te o altă cheie a

    37

    tabeleiFOREIGN KEY: defineşte o cheie străină(externă)CHECK: introduce o condiţie (expresielogică).

  • 8/18/2019 10_SQL - Creare Tabele

    37/98

    PRIMARY KEY Sintaxa la nivel de coloană:coloana [CONSTRAINT nume_constrangere]PRIMARY KEY

    in x l niv l l :

    38

    [,CONSTRAINT nume_constrangere] PRIMARYKEY(lista_coloane)

  • 8/18/2019 10_SQL - Creare Tabele

    38/98

    EXEMPLECREATE TABLE SPEC(CODS NUMBER(2) CONSTRAINT SPEC_PK PRIMARY

    KEY, NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15));

    39

    Si la nivel de tabela:CREATE TABLE SPEC(CODS NUMBER(2),

    NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15),CONSTRAINT SPEC_PK PRIMARY KEY(CODS));

  • 8/18/2019 10_SQL - Creare Tabele

    39/98

    PK DIN >1 ATRIBUTCREATE TABLE BURSA(

    PMIN NUMBER(4),

    PMAX NUMBER(4),

    TIP VARCHAR2(20),

    40

    ,

    CONSTRAINT BURSA_PK PRIMARY KEY(PMIN,PMAX));

  • 8/18/2019 10_SQL - Creare Tabele

    40/98

    DETALIERE CONSTRANGERNOT NULL: valorile nu pot fi nulePRIMARY KEY: defineşte cheia primarăa unei tabeleUNI UE: define te o altă cheie a

    41

    tabeleiFOREIGN KEY: defineşte o cheie străină(externă)CHECK: introduce o condiţie (expresielogică).

  • 8/18/2019 10_SQL - Creare Tabele

    41/98

    UNIQUESintaxa la nivel de coloană:coloana [CONSTRAINT nume_constrangere]UNIQUE

    in x l niv l l :

    42

    [,CONSTRAINT nume_constrangere]

    UNIQUE(lista_coloane)

  • 8/18/2019 10_SQL - Creare Tabele

    42/98

    EXEMPLUL 1Dacă în tabela de SPEC nu pot existaniciodată două specializări cu acelaşi nume,definiţia anterioară se completează cu oconstrângere de tip UNIQUE:

    43

    CODS NUMBER(2) CONSTRAINT SPEC_PK

    PRIMARY KEY, NUME VARCHAR2(10) CONSTRAINT NUMES_UNIC

    UNIQUE,DOMENIU VARCHAR2(15));

  • 8/18/2019 10_SQL - Creare Tabele

    43/98

    EXEMPLUL 1 – cont. Aceeasi constrangere, la nivel detabela:

    CREATE TABLE SPEC(

    44

    CODS NUMBER( ) CONSTRAINT SPEC_PK PRIMARYKEY,

    NUME VARCHAR2(10),

    DOMENIU VARCHAR2(15),

    CONSTRAINT NUMES_UNIC UNIQUE(NUME));

  • 8/18/2019 10_SQL - Creare Tabele

    44/98

    EXEMPLUL 2În tabela BURSA nu pot exista două burse cu aceeaşisumă. Cererea de creare anterioară devine:CREATE TABLE BURSA(PMIN NUMBER(4),PMAX NUMBER(4),

    45

    ,

    SUMA NUMBER(4) CONSTRAINT SUMA_UNICAUNIQUE,

    CONSTRAINT BURSA_PK PRIMARY KEY(PMIN,PMAX));

    În acest caz în tabelănu pot existadouă linii care conţinaceeaşi valoare nenulă pe coloana SUMA darpot existaoricâte linii cu valori nule pe această coloană.

  • 8/18/2019 10_SQL - Creare Tabele

    45/98

    CE E UNIC?În cazul în care o cheie definită cu UNIQUE conţinemai multe coloane, verificarea se face astfel:

    nu există două linii care au aceleaşi valori nenulepentru toate coloanele cheii.nu există două linii care au aceleaşi valori nenule

    46

    .Exemplu: În cazul unei tabele NUMERE creată cucererea:

    CREATE TABLE NUMERE( NUMAR1 NUMBER(4),

    NUMAR2 NUMBER(4),UNIQUE(NUMAR1, NUMAR2));

  • 8/18/2019 10_SQL - Creare Tabele

    46/98

  • 8/18/2019 10_SQL - Creare Tabele

    47/98

    CONTINUT INVALID NUMAR1 NUMAR2------ ------

    NULL NULL NULL NULL

    1000 2000

    48

    1000 3000 NULL 20001000 NULL1000 2000

    NULL 20001000 NULL

  • 8/18/2019 10_SQL - Creare Tabele

    48/98

    DETALIERE CONSTRANGERNOT NULL: valorile nu pot fi nulePRIMARY KEY: defineşte cheia primarăa unei tabeleUNI UE: define te o altă cheie a

    49

    tabeleiFOREIGN KEY: defineşte o cheie străină(externă)

    CHECK: introduce o condiţie (expresielogică).

  • 8/18/2019 10_SQL - Creare Tabele

    49/98

    FOREIGN KEY Prin această constrângere valorile uneicoloane/unor coloane sunt forţate să fiedoar dintre cele ale cheii unei tabele(cheie primară sau UNIQUE).

    50

    o oane e cons r nse n aces eformează ceea ce se numeşte înterminologia de specialitate ocheiestraina sau cheie externa iarconstrângerea mai este denumită şideintegritate referentiala .

  • 8/18/2019 10_SQL - Creare Tabele

    50/98

    SINTAXALa nivel de coloană:coloana [CONSTRAINT nume_constrangere]

    REFERENCES tabela(coloana)[ON DELETE CASCADE |

    ON DELETE SET NULL]

    51

    La nivel de tabelă:[,CONSTRAINT nume_constrangere] FOREIGNKEY(lista_coloane)REFERENCES tabela(lista_coloane)

    [ON DELETE CASCADE |ON DELETE SET NULL]

  • 8/18/2019 10_SQL - Creare Tabele

    51/98

    În cazul tabelei STUD avem două coloanecare pot avea asociată o astfel deconstrângere:ColoanaCODSpoate fi constrânsă să conţină doar

    valori ale cheii primare a tabeleiSPEC(formată

    52

    intr-o co oan cu ace aşi nume - D .ColoanaTUTOR poate fi constrânsă să conţinădoar valori nenule ale cheii primare a luiSTUD-MATR .

    În acest caz cererea anterioara de crearepentru STUD devine:

  • 8/18/2019 10_SQL - Creare Tabele

    52/98

    STUD:CREATE TABLE STUD( MATR NUMBER(4) PRIMARY KEY,

    NUME VARCHAR2(10), AN NUMBER(1) DEFAULT 1,GRUPA VARCHAR2(6),

    53

    ,

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

  • 8/18/2019 10_SQL - Creare Tabele

    53/98

    OBSERVATIIÎn cazul în caretabela SPEC nu există încăsistemul va semnala eroarea:ORA-00942: tableor view does not exist În cazul în care tabelaSPEC există dar nu arecheia CODSse semnalează eroarea:ORA-02270:

    54

    no matc ng un que or pr mary ey or t scolumn-list După crearea lui STUD, dacă se încearcăştergerea tabelei SPECse semnalează eroarea:

    ORA-02449: unique/primary keys în tablereferenced by foreign keys

  • 8/18/2019 10_SQL - Creare Tabele

    54/98

    OBSERVATII – cont.Lainserarea de noi linii în tabela STUD, acesteatrebuie să conţină pe coloanele CODS şi TUTOR

    fie valori care există deja în SPEC.CODS şiSTUD.MATR,fie valori nule.La încercarea de aşterge liniidin tabelele SPEC şi

    55

    , ac aces ea au va oar a e c e re er e nSTUD prin constrângerile de mai sus se vasemnala de asemenea oeroare.La încercarea de amodifica valorile cheii în linii

    din tabelele SPEC şi STUD, dacă acestea suntreferite în STUD se va semnala de asemenea oeroare.

  • 8/18/2019 10_SQL - Creare Tabele

    55/98

    CLAUZA ON DELETEÎn cazul în care se doreşte ca o linie dintr-o tabelăconţinând o valoare de cheie referită într-o altă

    tabelă (sau în aceeaşi tabelă)să poată fi ştearsăfărăa se obţine un mesaj de eroare, la definireaconstrângerii se poate specifica modul în care setratează această ter ere din ers ectiva tabelei care

    56

    referă valoarea:

    Daca se doreşte ca la ştergerea liniei conţinând o valoare decheiesă fie şterse suplimentar şi toate liniile care referăaceastă valoare, se specificăON DELETE CASCADEDacă se doreşte ca liniile care referă valoarea cheiirespectivesă nu fie şterse, se specificăON DELETE SETNULLcare are următorul efect: în toate liniile care referăacea valoare ea este înlocuită cu valori nule.

  • 8/18/2019 10_SQL - Creare Tabele

    56/98

    EXEMPLUCREATE TABLE STUD( MATR NUMBER(4) PRIMARY KEY,

    . . . . . . . . . . . . . . . . . . .TUTOR NUMBER(4) REFERENCES STUD(MATR)

    ON DELETE SET NULL,

    57

    . . . . . . . . . . . . . . . . . . .CONSTRAINT CODS_FK FOREIGN KEY(CODS)

    REFERENCES SPEC(CODS)ON DELETE CASCADE);

  • 8/18/2019 10_SQL - Creare Tabele

    57/98

    EXEMPLU – cont.Laştergerea unei specializăridin tabela SPECvor fi şterşi automat şi toţi studenţii dintabela STUD având pe coloana CODS codulacesteia.La ter erea unui studentcare este tutorul

    58

    altor studenţi, automat acestora li se vamodifica valoarea pe coloana TUTOR la unanulă.TabelaSPEC poate fi golită- ceea ce vaantrena şi golirea tabelei STUD - dar nuştearsă.

  • 8/18/2019 10_SQL - Creare Tabele

    58/98

    FK PENTRU UNIQUEÎn cazul în care constrângerea sedefineşte pentru o cheie de tipUNIQUE(care poate conţine şi valori nule)eaeste verificată entru cheile străine

    59

    formate doar din valori nenule.

  • 8/18/2019 10_SQL - Creare Tabele

    59/98

  • 8/18/2019 10_SQL - Creare Tabele

    60/98

    CHECK Prin acest tip de constrângerivalorile aflate pe o linieatabelei sunt forţate să verifice o condiţie (expresie logică).

    Aceasta poate conţine toate elementele prezentateanterior pentru conditii, inclusiv apeluri de funcţii, cucâtevaexcepţii:

    apelurile unor funcţii ca SYSDATE, USER, UID

    61

    ,

    (specifice secvenţelor), LEVEL şi ROWNUM)subcereri.O aceeaşi coloană poate participala mai multeconstrângeri de acest tip, având fiecare o altă condiţieasociată.Condiţia se evalueazădoar la nivelul liniei respective, fărăa se putea lua în considerare valori aflate pe alte linii aletabelei.

  • 8/18/2019 10_SQL - Creare Tabele

    61/98

    SINTAXALa nivel de coloană:coloana [CONSTRAINT nume_constrangere]CHECK (expresie_logica)

    62

    [,CONSTRAINT nume_constrangere]

    CHECK (expresie_logica)

  • 8/18/2019 10_SQL - Creare Tabele

    62/98

    EXEMPLUTabela BURSA poate avea asociate mai multeconstrângeri care verifică următoarele condiţii:

    PMIN şi PMAX sunt pozitivePMIN < PMAXSUMA este între 0 şi 500

    63

    CREATE TABLE BURSA(PMIN NUMBER(4) CHECK (PMIN >= 0),PMAX NUMBER(4) CHECK (PMAX >= 0),TIP VARCHAR2(20),

    SUMA NUMBER(4) CHECK (SUMA BETWEEN 0 AND 500),CONSTRAINT PMINPMAX CHECK (PMIN < PMAX));

  • 8/18/2019 10_SQL - Creare Tabele

    63/98

    EXEMPLU – cont.În cazul în care pe coloanele respective segăsescvalori nule, linia nu este rejectată ci se

    consideră că verifică expresia logică.Pentru tabela BURSA definită ca mai sus sepot introduce linii având valori nule pentru

    64

    ,a se semnala violarea constrângerilor deintegritate de tip CHECK.Expresia logică asociată unei constrângeriCHECKpoate fi compusă: cererea de crearede mai sus poate fi rescrisă prin combinareatuturor condiţiilor în una singură:

  • 8/18/2019 10_SQL - Creare Tabele

    64/98

    EXEMPLU – cont.CREATE TABLE BURSA(PMIN NUMBER(4), PMAX NUMBER(4),

    TIP VARCHAR2(20),SUMA NUMBER(4),

    65

    _

    AND PMIN >= 0 AND PMAX >= 0 AND SUMABETWEEN 0 AND 500));

  • 8/18/2019 10_SQL - Creare Tabele

    65/98

    MODIFICAREA STRUCTURI Vizualizarea structurii tabelei Adaugarea unei coloane

    Stergerea unei coloaneModificarea unei coloane Adaugarea unei constrangeri

    66

    Stergerea unei constrangeri Activare/dezactivare constrangeriGolirea unei tabeleStergerea unei tabeleRedenumirea unei tabele Adaugarea de comentarii

  • 8/18/2019 10_SQL - Creare Tabele

    66/98

    1. VIZUALIZARE STRUCTURClientul SQL*Plus pune la dispoziţie comanda DESCRIBE princare se pot afişa numele coloanelor, tipul acestora şieventualele constrângeri de tip NOT NULL.

    Sintaxa comenzii SQL*Plus este:DESCRIBE nume_tabelaObservaţie: DESCRIBE nu este o cerere SQL ci ocomandăSQL*Plus.Ea nu trebuie terminată cu punct şi virgulă (;).

    67

    Exemplu. Pentru a obţine descrierea tabelei SPEC folosimcomanda:DESCRIBE SPECRezultat obţinut:

    Name Null? Type--------------- -------- -----------------CODS NUMBER(2)

    NUME VARCHAR2(10)DOMENIU VARCHAR2(15)

  • 8/18/2019 10_SQL - Creare Tabele

    67/98

    2. ADAUGARE COLOANASintaxa: ALTER TABLE nume_tabela ADD

    (nume_coloana tip_date[DEFAULT expresie] [constrangere]);

    68

    tabela SPEC în care se memorează anul înfiinţării fiecărei specializări:

    ALTER TABLE SPEC ADD(AN_INFIINTARE

    NUMBER(4)CONSTRAINT ANS_NENUL NOT NULL);

  • 8/18/2019 10_SQL - Creare Tabele

    68/98

    ADAUGARE COLOANA – conDacă tabela conţine deja cel puţin o linie, penoua coloană vor fi prezente doar valori nule. Adăugarea unei coloane care are asociată o

    69

    constrângere de tipNOT NULL(ca înexemplul anterior) nu se poate face decât încazul în care tabela nu conţine nici o linie.Coloana se va adăuga întotdeauna dupăcelelalte, devenindultima coloanădin tabelă.

  • 8/18/2019 10_SQL - Creare Tabele

    69/98

    3. STERGERE COLOANASintaxa: ALTER TABLE nume_tabela DROP COLUMN

    nume_coloana [CASCADE CONSTRAINTS];

    sau

    70

    nume_ a e a s a

    coloane) [CASCADE CONSTRAINTS];Exemplu: Ştergerea coloanei adăugată anterior:

    ALTER TABLE SPEC

    DROP COLUMN AN_INFIINTARE;

  • 8/18/2019 10_SQL - Creare Tabele

    70/98

    STERGERE COLOANA – contCererea se poate executa atât în cazul în caretabela este goală cât şi dacă ea conţine dejalinii,Dacă tabela are doar o singură coloană,aceasta nu se oate ter e

    71

    Opţiunea CASCADE CONSTRAINTS ştergesuplimentar toate constrângerile deintegritate în care sunt implicate coloaneleşterse, inclusiv cele de tip FOREIGN KEY carereferă valorile coloanei sau coloanelorrespective.

  • 8/18/2019 10_SQL - Creare Tabele

    71/98

    UNUSEDŞtergerea unei coloane este o operaţie costisitoaredin punct de vedere al resurselor sistemului.

    De aceea, în cazul în care la un moment dat acestaeste foarte încărcat ştergerea se poate face în douăetape:

    72

    unei liste de coloane prin opţiunea SET UNUSED.Sintaxa este: ALTER TABLE nume_tabela SET

    UNUSED(lista_coloane);

    sau ALTER TABLE nume_tabela SET UNUSED COLUMNnume_coloana;

  • 8/18/2019 10_SQL - Creare Tabele

    72/98

    UNUSED – cont.Etapa 2:Ştergerea efectivă acoloanelor marcate ca neutilizate la unmoment ulterior de timp, când sistemulnu mai este foarte încărcat. Sintaxa

    73

    cererii este: ALTER TABLE nume_tabela DROPUNUSED COLUMNS;

  • 8/18/2019 10_SQL - Creare Tabele

    73/98

    EXEMPLEPentru marcarea coloanelor DATAN, LOC şiTUTOR din tabela STUD se pot executacererile:

    ALTER TABLE STUD SET UNUSED(DATAN,

    74

    ALTER TABLE STUD SET UNUSED COLUMNTUTOR;

    Ştergerea coloanelor marcate se face prin

    cererea: ALTER TABLE SPEC DROP UNUSED COLUMNS;

  • 8/18/2019 10_SQL - Creare Tabele

    74/98

    UNUSED - ObservatiiColoanele marcate ca neutilizate:nu mai apar în structura afişată deDESCRIBE,nu mai pot fi folosite în cererile SQL asupra

    75

    tabelei respectivese pot adăuga noi coloane în tabelă avândacelaşi nume.

  • 8/18/2019 10_SQL - Creare Tabele

    75/98

    4. MODIFICARE COLOANASintaxa: ALTER TABLE nume_tabela

    MODIFY(nume_coloana [tip_date][DEFAULT expresie] [constrangere])

    Prin această cerere se pot modifica

    76

    Se poate schimba tipul de date al coloaneiSe poate asocia o nouă valoare implicităSe poate adăuga o constrângere de tip NOT NULLpentru acea coloană.

    Printr-o singură cerere se pot efectua toateoperaţiile de mai sus sau doar o parte a lor.

  • 8/18/2019 10_SQL - Creare Tabele

    76/98

    EXEMPLUmodificarea caracteristicilor coloanelor NUMEşi DOMENIU din tabela SPEC este efectuatăprin următoarele trei cereri de tip ALTERTABLE:

    77

    VARCHAR2(20) CONSTRAINT DOM_MENUL NOT NULL);

    ALTER TABLE SPEC MODIFY (DOMENIUDEFAULT 'NECOMPLETAT');

    ALTER TABLE SPEC MODIFY(NUME

    CONSTRAINT NUME_NENUL NOT NULL);

  • 8/18/2019 10_SQL - Creare Tabele

    77/98

    MODIFICARE COLOANA – contÎn ceea ce priveşte modificările tipuluide date asociat unei coloane, acesteapot fi:

    Cre terea dimensiunii coloanelor de ti ir

    78

    de caractere,Creşterea dimensiunii şi preciziei datelornumerice,

    Schimbarea tipurilor CHAR în VARCHAR2 şireciproc doar dacă au aceeaşi dimensiune.

  • 8/18/2019 10_SQL - Creare Tabele

    78/98

    MODIFICARE COLOANA – contDoar în cazul în care tabela este goală saucoloana conţine doar valori nule se mai potefectua şi operaţiile:

    Scăderea dimensiunii coloanelor de tip şir de

    79

    Scăderea dimensiunii şi preciziei datelor numerice,Orice altă schimbare a tipului coloanei respective.În cazul schimbării valorii implicite pentru o

    coloană, noua valoare va fi folosită doarpentru inserările de linii ulterioare modificării.

  • 8/18/2019 10_SQL - Creare Tabele

    79/98

    5. ADAUGARE CONSTRANGERSintaxa: ALTER TABLE nume_tabela

    ADD [CONSTRAINT nume] tip(coloana);

    Tipul constrângerii nu poate fi NOT NULL. În

    80

    sc m se pot e n constr nger e t pCHECK conţinând condiţii de acest tip.Exemplu: Se doreşte ca pe coloana NUME atabelei SPEC să nu existe valori nule sauidentice şi lungimea minimă să fie de 6caractere:

  • 8/18/2019 10_SQL - Creare Tabele

    80/98

    EXEMPLU ALTER TABLE SPEC ADD CONSTRAINT NUME_NENUL

    CHECK(NUME IS NOT NULL);

    ALTER TABLE SPEC

    81

    ADD CONSTRAINT NUME_UNICUNIQUE(NUME);

    ALTER TABLE SPEC

    ADD CONSTRAINT NUME_5CHECK(LENGTH(NUME)>5);

  • 8/18/2019 10_SQL - Creare Tabele

    81/98

    6. STERGERE CONSTRANGERESintaxa: ALTER TABLE nume_tabela DROP PRIMARY KEY

    [CASCADE];

    ALTER TABLE nume_tabela DROPUNIQUE(lista_coloane)[CASCADE];

    ALTER TABLE nume_tabela DROP CONSTRAINT nume

    82

    [CASCADE];

    Efectul acestor cereri este:DROP PRIMARY KEY şi DROP UNIQUE specifică ştergereaconstrângerii de tip cheie primară/cheie unică pentru tabelarespectivă. Constrângerea poate să nu aibă un nume asociatla definire.

    DROP CONSTRAINT specifică ştergerea unei constrângeriavând asociat un nume.Opţiunea CASCADE se aplică în cazul în care existăconstrângeri dependente şi specifică ştergerea suplimentarăa acestora.

  • 8/18/2019 10_SQL - Creare Tabele

    82/98

    EXEMPLUStergerea cheii primare a tabelei SPECşi a constrângerilor dependente deacestea (de exemplu cea de cheiestrăină din STUD se face astfel:

    83

    ALTER TABLE SPEC DROP PRIMARY KEYCASCADE;

    7. ACTIVARE/DEZACTIVARE

  • 8/18/2019 10_SQL - Creare Tabele

    83/98

    CONSTRANGERESintaxa: Dezactivare: ALTER TABLE nume_tabela DISABLE PRIMARY KEY

    [CASCADE] ALTER TABLE nume_tabela

    DISABLE UNIQUE(lista_coloane) [CASCADE]

    84

    ALTER TABLE nume_tabela DISABLE CONSTRAINT

    nume[CASCADE]

    Reactivare: ALTER TABLE nume_tabela ENABLE PRIMARY KEY; ALTER TABLE nume_tabela ENABLE

    UNIQUE(lista_coloane); ALTER TABLE nume_tabela ENABLE CONSTRAINT

    nume;

  • 8/18/2019 10_SQL - Creare Tabele

    84/98

    EFECTDISABLEspecifică dezactivarea constrângerii deintegritate respective.OpţiuneaCASCADEduce la dezactivareasuplimentară a tuturor constrângerilor dependente.ENABLE CONSTRAINTs ecifică reactivarea

    85

    constrângerii respective.În momentul reactivării sistemulverificădacă datelela care se referă constrângerea sunt conforme cuaceasta.În cazul în care nu se constată respectareaconstrângerii,ea nu este activatăşi se generează unmesaj de eroare. În caz de activare cu succes,constrângerile dependente nu sunt reactivate.

  • 8/18/2019 10_SQL - Creare Tabele

    85/98

    EXEMPLUDezactivarea şi reactivareaconstrângerii de cheie primară SPEC_PKpentru tabela SPEC:

    ALTER TABLE SPEC DISABLE PRIMARY

    86

    KEY CASCADE;

    ALTER TABLE SPEC ENABLECONSTRAINT SPEC_PK;

  • 8/18/2019 10_SQL - Creare Tabele

    86/98

    8. GOLIRE TABELASintaxa:TRUNCATE TABLE nume_tabela [REUSE

    STORAGE];Exemplu: golirea tabelei SPEC se poate face princererea SQL

    87

    ;

    Opţiunea REUSE STORAGE este folosită pentru aspecifica faptul că spaţiul ocupat de liniile şterserămâne alocat tabelei şi poate fi folosit la inserărileulterioare în aceasta.În lipsa acestei opţiuni spaţiul respectiv devinedisponibil, putând fi utilizat şi pentru alte tabele.

  • 8/18/2019 10_SQL - Creare Tabele

    87/98

    9. STERGERE TABELASintaxa:DROP TABLE nume_tabela;

    Exemplu: ştergerea tabelei SPEC se poateface prin cererea SQL

    88

    DROP TABLE SPEC;

    Observaţie:ştergerea unei tabele estedefinitivă.O dată ştearsă ea poate fi restaurată doar dinsalvările bazei de date efectuate deadministrator.

  • 8/18/2019 10_SQL - Creare Tabele

    88/98

    10. REDENUMIRE TABELASintaxa:RENAME nume_vechi TO nume_nou

    Exemplu: redenumirea tabelei SPEC se poateface prin cererea SQL

    89

    RENAME SPEC TO SPECIALIZARI;

    Observaţie: comanda RENAME nu estespecifică tabelelor ci tuturor obiectelor dinbaza de date.Cu ajutorul ei se pot redenumi de asemeneavederi, secvenţe şi sinonime.

  • 8/18/2019 10_SQL - Creare Tabele

    89/98

    11. COMENTARIITabelele şi coloanele acestora pot avea asociat uncomentariu. Acesta este un text şi se asociază astfel:

    COMMENT ON TABLE nume_tabela IS 'text‘;COMMENT ON COLUMN nume_tabela.cume_coloana IS

    'text‘;

    Acestea sunt stocate în dic ionarul de date în

    90

    tabelele:USER_COL_COMMENTSşi ALL_COL_COMMENTS:

    comentariile asociate coloanelorUSER_TAB_COMMENTSşi USER_TAB_COMMENTS

    comentariile asociate tabelelor

  • 8/18/2019 10_SQL - Creare Tabele

    90/98

    DICTIONARUL DE DATEUna dintre cerinţele fundamentale pentru caun sistem de gestiune a bazelor de date să fieconsiderat cu adevărat relaţional este aceeaca datele interne ale acestuiasă fieorganizate şi stocate în acelaşi modcu datele

    91

    În acest sens, şi sistemul Oracle îşi ţineaceste date, numite uzualdictionarul de dateal sistemului , sub formă de tabele, iarutilizatorii care au drepturile necesare le pot

    accesa fie direct fie folosind o serie devederişi sinonime puse la dispoziţie de sistem.

  • 8/18/2019 10_SQL - Creare Tabele

    91/98

    DICTIONARUL DE DATE – contExistă mai multe categorii de vederi prin care uzualaceste date sunt accesate, fiecare având ca şicaracteristică un prefix al numelui care defineştecategoria respectivă.Cele mai folosite vederi intră în categoriile definite de

    92

    PrefixulUSER_ este comun vederilor prin care se pot accesainformaţii despre obiectele deţinute de utilizator.Prefixul ALL_ este specific vederilor care conţin informaţiidespre toate tabelele la care utilizatorul are acces.PrefixulDBA_ este folosit pentru vederile accesibile doar

    utilizatorilor care au drepturi (privilegii) de administrator albazei de date.

  • 8/18/2019 10_SQL - Creare Tabele

    92/98

    EXEMPLEPrezentarea tuturor acestor vederi nu faceobiectul lucrării de faţă.

    În continuare sunt prezentate câteva dintrecele mai importante, legate mai ales deinventarul de tabele i constrân eri de

    93

    integritate existent la un moment dat însistem:

    USER_CATALOGUSER_OBJECTS

    USER_CONSTRAINTSUSER_CONS_COLUMNS

  • 8/18/2019 10_SQL - Creare Tabele

    93/98

    USER_CATALOGutilizator. Are doar două coloane, prima conţinândnumele şi al doilea tipul obiectului. O parte aconţinutului acestei tabele, obţinut cu cererea SQL:

    SELECT * FROM USER_CATALOG;

    este următorul:

    94

    _ _ ---------------- -----------BURSA TABLEEVENIMENT TABLE

    NUMERE TABLESPEC TABLESTUD TABLE

    USER OBJECTS

  • 8/18/2019 10_SQL - Creare Tabele

    94/98

    USER_OBJECTSConţine numele, tipul şi alte informaţii despreobiectele deţinute de utilizator, inclusivindecşi.Informaţii sumare despre conţinutul vederii

    95

    se po o ne cu cererea:SELECT OBJECT_NAME, OBJECT_TYPEFROM USER_OBJECTS;

    Rezultatul include rezultatul obţinut în urmacererii anterioare (USER_CATALOG).

    USER CONSTRAINTS

  • 8/18/2019 10_SQL - Creare Tabele

    95/98

    USER_CONSTRAINTSConţine date despre constrângerile definitede utilizator. Dintre coloanele salemenţionăm:CONSTRAINT_NAME: Numele constrângerii

    96

    _ : u ,

    un caracter: P: cheie primară, U: cheie (UNIQUE),R pentru integritatea referenţială şi C pentruconstrângerile CHECK (aici sunt incluse şi cele detip NOT NULL)SEARCH_CONDITION: Condiţia asociatăconstrângerii

    EXEMPLU

  • 8/18/2019 10_SQL - Creare Tabele

    96/98

    EXEMPLUSELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITION

    FROM USER_CONSTRAINTS;

    Rezultat:CONSTRAINT_NAME C SEARCH_CONDITION

    97

    BURSA_CK C PMIN < PMAX AND PMIN >= 0 AND PMAX >= 0 AND SUMA

    BETWEEN 0 AND 500DOM_NENUL UDOM_5 C LENGTH(NUME)>5

    NUME_NENUL C NUME IS NOT NULL

    USER CONS COLUMNS

  • 8/18/2019 10_SQL - Creare Tabele

    97/98

    USER_CONS_COLUMNSConţine informaţii despre coloanele care sunt implicate înconstrângerile de integritate. Cererea următoare afişeazăperechi (nume constrângere, nume coloană implicată) pentruconstrângerea BURSA_CK:

    SELECT CONSTRAINT_NAME, COLUMN_NAMEFROM USER_CONS_COLUMNS

    98

    WHERE CONSTRAINT_NAME = 'BURSA_CK';

    Rezultatul este:CONSTRAINT_NAME COLUMN_NAME------------------------ --------------------BURSA_CK PMIN

    BURSA_CK PMAXBURSA_CK SUMA

    CATE VEDERI SUNT?

  • 8/18/2019 10_SQL - Creare Tabele

    98/98

    CATE VEDERI SUNT?Există peste2000 de vederipuse ladispoziţie de sistemul Oracle (V9) dintrecare peste 200 în fiecare dintrecategoriile USER_, ALL_ şi DBA_.

    99

    escr ere comp e a or se g seş e ndocumentaţia aferentă sistemului.Lista tuturor vederilor poate fi obţinutăcu cererea:SELECT VIEW_NAME FROM ALL_VIEWS;