Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tabele

sql



+ Font mai mare | - Font mai mic



Tabele

Crearea unui tabel



Crearea unui tabel consta din generarea structurii sale, adica atribuirea unui nume tabelului si definirea caracteristicelor sale (se definesc coloanele, se definesc constrangerile de integritate, se specifica parametrii de stocare etc.).

In Oracle9i tabelele pot fi create in orice moment, chiar si in timpul utilizarii bazei. Structura unui tabel poate fi modificata online. Nu este necesar sa se specifice dimensiunea acestuia. Totusi, din considerente administrative, este important sa se cunoasca estimativ cat spatiu va utiliza tabelul.

Comanda CREATE TABLE permite crearea unui tabel relational sau a unui tabel obiect. Tabelul relational reprezinta structura fundamentala pentru stocarea datelor utilizatorului. Un tabel obiect utilizeaza un tip obiect pentru definitia unei singure coloane si este folosit pentru a stoca instantele unui obiect particular.

Pentru a crea un tabel, utilizatorul trebuie sa aiba acest privilegiu si sa dispuna de spatiul de memorie in care sa creeze obiectul. La nivelul schemei sale, un utilizator are toate privilegiile.

CREATE TABLE [<nume_schema>.] <nume_tabel> (

          <nume_coloana_1> <tip_date> [DEFAULT <expresie>],

          <nume_coloana_n> <tip_date> [DEFAULT <expresie>])

[CLUSTER <nume_cluster> (<coloana_1>,., <coloana_m>)]

[ENABLE | DISABLE <clause>];

Comanda poate contine optional clauza TABLESPACE, care specifica spatiul tabel in care va fi stocat tabelul. De asemenea, poate contine optional clauza STORAGE care este folosita pentru setarea parametrilor de stocare prin intermediul carora se specifica marimea si modul de alocare a extinderilor segmentului tabel. La crearea unui tabel nu este nevoie sa se specifice dimensiunea maxima a acestuia, ea fiind determinata pana la urma de marimea spatiului alocat spatiului tabel in care este creat tabelul.

Structura unui tabel poate fi creata in urmatoarele patru moduri:

fara a indica cheile;

indicand cheile la nivel de coloana;

indicand cheile la nivel de tabel;

prin copiere din alt tabel.

Crearea structurii unui tabel fara a indica cheile:

CREATE TABLE  carte

(codel CHAR(5),

titlu VARCHAR2(30),

autor VARCHAR2(30),

pret NUMBER(8,2),

nrex NUMBER(3),

coded CHAR(5));

Crearea structurii unui tabel indicand cheile la nivel coloana:

CREATE TABLE carte

(codel CHAR(5) PRIMARY KEY,

titlu VARCHAR2(30),

autor VARCHAR2(30),

pret NUMBER(8,2),

nrex NUMBER(3),

coded CHAR(5) NOT NULL

REFERENCES domeniu(coded));

Constrangerea de cheie primara sau externa ce presupune

CREATE TABLE carte

(codel CHAR(5) PRIMARY KEY,

titlu VARCHAR2(30),

autor VARCHAR2(30),

pret NUMBER(8,2),

nrex NUMBER(3),

coded CHAR(5) NOT NULL

REFERENCES domeniu(coded)

ON DELETE CASCADE);

Optiunea ON DELETE CASCADE specifica ca suprimarea oricarui domeniu de carte din tabelul domeniu este autorizata si implica suprimarea automata a tuturor cartilor din domeniul respectiv care se gasesc in tabelul carte.

Crearea structurii unui tabel indicand cheile la nivel de tabel:

CREATE TABLE carte

(codel CHAR(5),

titlu VARCHAR2(30),

autor VARCHAR2(30),

pret NUMBER(8,2),

nrex NUMBER(3),

coded CHAR(5) NOT NULL,

PRIMARY KEY (codel),

FOREIGN KEY (coded)

REFERENCES domeniu (coded));

Daca cheia primara are mai mult de o coloana atunci cheile trebuie indicate la nivel de tabel.

CREATE TABLE imprumuta

(codel CHAR(5),

codec CHAR(5),

dataim DATE DEFAULT SYSDATE,

datares DATE,

dataef DATE,

PRIMARY KEY (codel, codec, dataim),

FOREIGN KEY (codel)

REFERENCES carte(codel),

FOREIGN KEY (codec)

REFERENCES cititor(codec));

Crearea structurii unui tabel prin copiere din alt tabel:

CREATE TABLE carte_info

AS SELECT codel, titlu, autor

FROM carte

WHERE coded = 'I';

Constrangerile din primul tabel nu se pastreaza si pentru al doilea tabel. Comanda creeaza un tabel, dar si insereaza date in tabel.

Constrangeri

Constrangerea este un mecanism care asigura ca valorile unei coloane sau a unei multimi de coloane satisfac o conditie declarata. Unei constrageri i se poate da un nume unic. Daca nu se specifica un nume explicit atunci sistemul automat ii atribuie un nume de forma SYS_Cn, unde n reprezinta numarul constrangerii. Constrangerile pot fi sterse, pot fi adaugate, pot fi activate sau dezactivate, dar nu pot fi modificate.

Exemplu

Sa se defineasca o constrangere la nivel de coloana prin care sa se specifice cheia primara si cheia externa.

CREATE TABLE carte

(codel  CHAR(5)

CONSTRAINT cp_carte PRIMARY KEY,

titlu VARCHAR2(30),.

coded CHAR(5)

CONSTRAINT nn_coded NOT NULL

CONSTRAINT ce_coded

REFERENCES domeniu(coded));

Exemplu

Sa se defineasca o constrangere la nivel de tabel prin care sa se specifice cheia primara si cheia externa.

CREATE TABLE carte

(codel  CHAR(5),

titlu VARCHAR2(30),.

coded CHAR(5) NOT NULL,

CONSTRAINT cp_carte PRIMARY KEY (codel),

CONSTRAINT ce_coded

FOREIGN KEY (coded)

REFERENCES domeniu(coded));

Observatii

Liniile ce nu respecta constangerea sunt depuse automat intr-un tabel special.

Constrangerile previn stergerea unui tabel daca exista dependente.

Constrangerile pot fi create o data cu tabelul sau dupa ce acesta a fost creat.

Constrangerile pot fi activate sau dezactivate in functie de necesitati.

Constrangeri declarative constrangeri de domeniu, constrangerea de integritate a entitatii, constrangerea de integritate referentiala.

Constrangerile de domeniu definesc valori luate de un atribut (DEFAULT, CHECK, UNIQUE, NOT NULL).

constrangerea (coloana) DEFAULT

constrangerea (coloana sau tabel) CHECK ; constrangerea CHECK la nivel de tabel poate compara coloane intre ele, poate face referinta la una sau mai multe coloane, dar nu poate contine subcereri. Constrangerea la nivel de coloana nu poate referi alte coloane ale aceluiasi tabel.

CREATE TABLE carte

(codel CHAR(5),.

pret NUMBER(8,2)

CONSTRAINT alfa

CHECK (pret < nrex),.);

La executia acestei comenzi apare mesajul: ORA - 02438: Column check constraint cannot reference other columns.

Daca dupa NUMBER(8, 2) se adauga o virgula, atunci constrangerea va fi la nivel de tabel, iar in aceste caz este permisa referirea altei coloane.

constrangerea (coloana sau tabel) UNIQUE ;

constrangerea declarativa NOT NULL poate fi doar la nivel coloana.

Constrangerea de integritate a entitatii precizeaza cheia primara a unui tabel. Cand se creeaza cheia primara se genereaza automat un index unic. Valorile cheii primare sunt distincte si diferite de valoarea null.

Constrangerea de integritate referentiala asigura coerenta intre cheile primare si cheile externe corespunzatoare. Cand este definita o cheie externa sistemul Oracle verifica:

daca a fost definita o cheie primara pentru tabelul referit de cheia externa;

daca numarul coloanelor ce compun cheia externa corespunde numarului de coloane a cheii primare;

daca tipul si lungimea fiecarei coloane a cheii externe corespunde cu tipul si lungimea fiecarei coloane a cheii primare.

Aceasta constrangere poate fi definita la nivel de coloana sau tabel si asigura coerenta intre cheile primare si cheile externe corespunzatoare. Constrangerea FOREIGN KEY desemneaza o coloana sau o combinatie de coloane drept cheie externa si stabileste relatia cu o cheie primara sau o cheie unica din acelasi tabel sau din altul. O cheie externa compusa poate fi definita doar la nivel de tabel.

Cheia externa se defineste in tabelul "copil", iar tabelul care contine coloana referita reprezinta tabelul "parinte". Valoarea unei chei externe trebuie sa fie egala cu o valoare existenta in tabelul "parinte" sau sa fie null. Cheile externe se bazeaza pe valorile datelor si sunt pointer-i logici.

Cheile externe se definesc folosind urmatoarele cuvinte cheie:

FOREIGN KEY este utilizat intr-o constrangere la nivel de tabel pentru a defini coloana din tabelul "copil

REFERENCES identifica tabelul "parinte si coloana corespunzatoare din acest tabel;

ON DELETE CASCADE determina ca, odata cu stergerea unei linii din tabelul "parinte , sa fie sterse si liniile dependente din tabelul "copil

ON DELETE SET NULL determina modificarea automata a valorilor cheii externe la valoarea null, atunci cand se sterge valoarea "parinte

Definitiile si numele constrangerilor definite se pot fi consulta prin interogarea vizualizarilor USER_CONSTRAINTS si ALL_CONSTRAINTS din dictionarul datelor.

In versiunea Oracle8 exista posibilitatea ca o constrangere sa fie amanata (DEFERRABLE). In acest caz, mai multe comenzi SQL pot fi executate fara a se verifica restrictia, aceasta fiind verificata numai la sfarsitul tranzactiei, atunci cand este executata comanda COMMIT. Daca vreuna din comenzile tranzactiei incalca restrictia, atunci intreaga tranzactie este derulata inapoi si este returnata o eroare. Optiunea implicita este NOT DEFERRABLE.

O noutate introdusa in Oracle8 este posibilitatea de a partitiona tabele, adica de a imparti tabelul in mai multe parti independente, fiecare cu parametri de stocare diferiti si cu posibilitatea ca parti diferite ale tabelului sa se gaseasca pe spatii tabel diferite. Fiecare partitie a tabelului va contine inregistrari care au valoarea cheii intr-un interval specificat. Partitionarea este transparenta pentru utilizatori si aplicatii. Daca o parte a tabelului este inaccesibila, celelalte parti pot fi disponibile pentru reactualizare. De asemenea, se poate bloca accesul la o parte a tabelului in timp ce restul inregistrarilor sunt disponibile.

Exemplu

CREATE TABLE carte ( )

PARTITIONED BY RANGE (nrex)

((PARTITION mic VALUES LESS THAN(2)

TABLESPACE.

STORAGE .),

PARTITION mediu VALUES LESS THAN (10)

TABLESPACE.

STORAGE .),

PARTITION mare VALUES LESS THAN (MAXVALUE)

TABLESPACE.

STORAGE .));

Exemplu

Sa se defineasca tabelul opera_part_dom, creand partitii corespunzatoare operelor de arta achizitionate inainte de 1980, intre 1980 si 1989, intre 1990 si 1999, respectiv dupa anul 2000.
CREATE TABLE opera_part_dom (
cod_opera NUMBER,
tip VARCHAR2(15),
titlu VARCHAR2(100),
cod_artist NUMBER,
data_crearii DATE,
data_achizitiei DATE,
valoare NUMBER,
cod_galerie NUMBER,
cod_sala NUMBER,
material VARCHAR2(2000),
stil VARCHAR2(100),
dim1 NUMBER,
dim2 NUMBER,
stare VARCHAR2(50))
PARTITION BY RANGE (data_achizitiei)
(PARTITION opera_inainte_1980 VALUES LESS THAN
(TO_DATE('01-JAN-1980','DD-MON-YYYY')),
PARTITION opera_inainte_1990 VALUES LESS THAN
(TO_DATE('01-JAN-1990','DD-MON-YYYY')),
PARTITION opera_inainte_2000 VALUES LESS THAN
(TO_DATE('01-JAN-2000','DD-MON-YYYY')),
PARTITION opera_dupa_2000 VALUES LESS THAN (MAXVALUE));

Modificarea structurii unui tabel

Comanda care realizeaza modificarea structurii tabelului (la nivel de coloana sau la nivel de tabel), dar nu modificarea continutului acestuia, este ALTER TABLE.

ALTER TABLE realizeaza modificarea structurii unui tabel nepartitionat sau partitionat, a unei partitii sau subpartitii dintr-un tabel. Pentru tabele obiect sau tabele relationale continand coloane obiect, instructiunea poate fi utilizata pentru a converti tabelul la ultima definitie a tipului referit, dupa ce acesta a fost modificat. Comanda nu schimba continutul tabelului.

Comanda ALTER TABLE permite:

adaugarea (ADD) de coloane, chei (primare sau externe), constrangeri intr-un tabel existent;

modificarea (MODIFY) coloanelor unui tabel;

specificarea unei valori implicite pentru o coloana existenta;

activarea si dezactivarea (ENABLE, DISABLE) unor constrangeri;

suprimarea unei coloane;

suprimarea (DROP) cheii primare, a cheii externe sau a unor constrangeri.

Comanda ALTER TABLE are urmatoarea sintaxa simplificata:

ALTER TABLE [<nume_schema>.] <nume_tabel>

[ADD          (<nume_coloana> <tip_date>, <constrangere>) |

  MODIFY       (<nume_coloana_1>,., <nume_coloana_n>) |

  DROP          <clauza_drop>,]

ENABLE | DISABLE <clause>

Pentru a adauga o coloana, o cheie primara, o cheie externa sau o constrangere unui tabel este folosita urmatoarea forma:

ALTER TABLE nume_tabel

ADD  (nume_coloana constrangere,.

nume_coloana constrangere);

Pentru a modifica una sau mai multe coloane existente:

ALTER TABLE nume_tabel

MODIFY (nume_coloana constrangere,.

nume_coloana constrangere);

Pentru a suprima cheia primara sau alte constrangeri sunt utilizate formele:

ALTER TABLE nume_tabel

DROP  PRIMARY KEY;

ALTER TABLE nume_tabel

DROP  CONSTRAINT nume_constrangere;

Pentru a activa (ENABLE) sau dezactiva (DISABLE) constrangeri:

ALTER TABLE nume_tabel

ENABLE nume_constrangere

Observatii

Nu se poate specifica pozitia unei coloane noi in structura tabelului. O coloana noua devine automat ultima in cadrul structurii tabelului.

Modificarea unei coloane presupune schimbarea tipului de date, a dimensiunii sau a valorii implicite a acesteia. O schimbare a valorii implicite afecteaza numai inserarile care succed modificarii.

Dimensiunea unei coloane numerice sau de tip caracter poate fi marita, dar nu poate fi micsorata decat daca acea coloana contine numai valori null sau daca tabelul nu contine nici o linie.

Tipul de date al unei coloane poate fi modificat doar daca valorile coloanei respective sunt null.

Definirea cheii primare sau a cheii externe dupa crearea tabelului.

CREATE TABLE carte

(CODEL char(5),

.);

ALTER TABLE carte

ADD CONSTRAINT cheie_prim PRIMARY KEY (codel);

Suprimarea cheii primare.

ALTER TABLE carte

DROP PRIMARY KEY;

Daca exista o CE care refera o CP si daca se incearca stergerea cheii primare, aceasta stergere nu se poate realiza (tabelele sunt legate prin declaratia de cheie externa). Stergerea este totusi permisa daca in comanda ALTER apare optiunea CASCADE, care determina si stergerea cheilor externe ce refera cheia primara.

ALTER TABLE domeniu

DROP PRIMARY KEY CASCADE;

Suprimarea cheii externe.

ALTER TABLE carte

ADD CONSTRAINT beta

FOREIGN KEY (coded) REFERENCES domeniu

ALTER TABLE carte

DROP CONSTRAINT beta;

Schimbarea cheii primare. Este destul de complicat procesul schimbarii cheii primare fara a afecta modul de proiectare a bazei de date. Schimbarea se face in doua etape: se sterge cheia primara si apoi se recreeaza.

ALTER TABLE carte

ADD  (PRIMARY KEY(codel));

ALTER TABLE carte

DROP PRIMARY KEY;

ALTER TABLE carte

ADD  PRIMARY KEY(titlu, autor));

Adaugarea unei coloane. Aceasta coloana initial va fi null (pentru toate liniile). Nu se poate specifica unde sa apara coloana, ea devenind ultima coloana a tabelului.

ALTER TABLE carte

ADD (rezumat LONG);

Pentru suprimarea unei coloane a tabelului este utilizata urmatoarea forma:

ALTER TABLE nume_tabel

DROP (nume_coloana) [CASCADE CONSTRAINTS];

Optiunea DROP a comenzii ALTER TABLE a fost introdusa in versiunea Oracle8i. Coloana care este suprimata poate sa contina date. O comanda ALTER TABLE permite stergerea unei singure coloane. Dupa o astfel de operatie, in tabel trebuie sa ramana cel putin o coloana. Odata suprimata, o coloana nu poate fi recuperata.

Clauza CASCADE CONSTRAINTS permite suprimarea tuturor constrangerilor de integritate referentiala care se refera la cheile primare sau unice definite asupra coloanelor sterse. De asemenea, prin aceasta clauza se suprima si constrangerile multicoloana definite pe baza coloanelor sterse.

Constrangerile pot fi adaugate (ADD CONSTRAINT), sterse (DROP CONSTRAINT), activate (ENABLE) sau dezactivate (DISABLE), dar nu pot fi modificate.

ALTER TABLE cititor

ADD CONSTRAINT cp_cititor

PRIMARY KEY (codec)

DISABLE;

ALTER TABLE cititor

ENABLE CONSTRAINT cp_cititor;

Prima comanda adauga o constrangere, dar nu-i da viata. Constrangerea exista, dar server-ul nu o verifica. Cand se activeaza o constrangere, sistemul controleaza toate liniile tabelului si insereaza intr-un tabel special toate liniile care nu verifica constrangerea. Tabelul are urmatoarea structura:

(ROW_ID ROWID

(OWNER  VARCHAR2(30),

(TABLE_NAME VARCHAR2(30),

(CONSTRAINT VARCHAR2(30))

Din punct de vedere fizic, comanda ALTER TABLE permite schimbarea parametrilor PCTFREE si PCTUSED si a parametrilor din clauza STORAGE.

Comanda permite alocarea (ALLOCATE EXTENT) si dealocarea (DEALLOCATE UNUSED) manuala a spatiului utilizat de catre un tabel. Alocarea se face prin adaugarea de noi extinderi, iar dealocarea reprezinta eliberarea spatiului nefolosit de tabel (care nu a fost folosit niciodata sau a devenit liber datorita stergerii unor linii).

Alte optiuni ale comenzii ALTER TABLE, care au aparut incepand cu versiunea Oracle8i, sunt SET UNUSED si DROP UNUSED COLUMNS:

ALTER TABLE nume_tabel

SET UNUSED [ ( ] nume_coloana [ ) ];

ALTER TABLE nume_tabel

DROP UNUSED COLUMNS

Optiunea SET UNUSED permite marcarea uneia sau mai multor coloane ca fiind nefolosite, cu scopul de a fi sterse atunci cand necesitatile sistemului impun acest lucru. Coloanele nefolosite sunt tratate ca si cum ar fi fost suprimate, desi datele acestora raman in liniile tabelului. Dupa ce o coloana a fost marcata UNUSED, utilizatorul nu mai are acces la aceasta prin intermediul cererilor. In plus, numele si tipurile de date ale coloanelor nefolosite nu vor fi afisate cu comanda DESCRIBE din SQL*Plus. Utilizatorul poate sa adauge tabelului o noua coloana avand acelasi nume cu cel al unei coloane nefolosite.

DROP UNUSED COLUMNS sterge din tabel toate coloanele marcate ca fiind nefolosite. Acest lucru se poate utiliza pentru eliberarea spatiului de pe disc corespunzator coloanelor nefolosite din tabel. Daca tabelul nu contine nici o coloana nefolosita, instructiunea nu intoarce o eroare si nu are nici un efect.

Atunci cand se elimina o coloana dintr-un tabel folosind optiunea DROP a comenzii ALTER TABLE, vor fi suprimate si coloanele din tabel care sunt marcate cu optiunea SET UNUSED.

Suprimarea unui tabel

Pentru stergerea unui tabel este utilizata comanda DROP TABLE:

DROP TABLE [nume_schema.]nume_tabel
[CASCADE CONSTRAINTS];

Clauza CASCADE CONSTRAINTS permite suprimarea tuturor constrangerilor de integritate referentiala corespunzatoare cheilor primare si unice din tabelul supus stergerii. Daca se omite aceasta clauza si exista constrangeri de integritate referentiala, sistemul returneaza o eroare si nu suprima tabelul.

Suprimarea unui tabel presupune:

suprimarea definitiei sale in dictionarul datelor;

suprimarea indecsilor asociati;

suprimarea privilegiilor conferite in legatura cu tabelul;

recuperarea spatiului ocupat de tabel;

permanentizarea tranzactiilor in asteptare;

invalidarea (dar nu suprimarea) functiilor, procedurilor, vizualizarilor, secventelor, sinonimelor referitoare la tabel.

Odata executata, instructiunea DROP TABLE este ireversibila. Ca si in cazul celorlalte instructiuni ale limbajului de definire a datelor, aceasta comanda nu poate fi anulata (ROLLBACK).

Oracle 10g introduce o noua maniera pentru suprimarea unui tabel. Cand se sterge un tabel, baza de date nu elibereaza imediat spatiul asociat tabelului. Ea redenumeste tabelul si acesta este plasat intr-un recycle bin de unde poate fi eventual recuperat ulterior prin comanda FLASBACK TABLE.

Exemplu

DROP TABLE exemplu;

SELECT .

INSERT.

FLASHBACK TABLE exemplu TO BEFORE DROP;

In Oracle 10g stergerea unui tabel se poate face simultan cu eliberarea spatiului asociat tabelului, daca este utilizata clauza PURGE in comanda DROP TABLE. Nu este posibil un rollback pe o comanda DROP TABLE cu clauza PURGE.

Pentru stergerea intregului continut al unui tabel si eliberarea spatiului de memorie ocupat de acesta, sistemul Oracle ofera instructiunea:

TRUNCATE TABLE nume_tabel

Fiind o instructiune LDD, aceasta nu poate fi anulata ulterior (printr-o operatie ROLLBACK). Ea reprezinta o alternativa a comenzii DELETE din limbajul de prelucrare a datelor. De remarcat ca instructiunea DELETE nu elibereaza spatiul de memorie. Comanda TRUNCATE este mai rapida deoarece nu genereaza informatie ROLLBACK si nu activeaza declansatorii asociati operatiei de stergere. Daca tabelul este "parintele" unei constrangeri de integritate referentiala, el nu poate fi trunchiat. Pentru a putea fi aplicata instructiunea TRUNCATE, constrangerea trebuie sa fie mai intai dezactivata.

In DD, informatiile despre tabele se gasesc in vizualizarea USER_TABLES. Dintre cele mai importante coloane ale acesteia, se remarca:

TABLE_NAME

Numele tabelului

TABLESPACE_NAME

Spatiul tabel in care se afla tabelul

CLUSTER_NAME

Numele cluster-ului din care face parte tabelul

PCT_FREE

Procentul de spatiu pastrat liber in interiorul fiecarui bloc

PCT_USED

Procentul de spatiu ce poate fi utilizat in fiecare bloc

INI_TRANS

Numarul initial de tranzactii concurente in interiorul unui bloc

NITIAL_EXTENT

Dimensiunea spatiului alocat pentru prima extensie

NEXT_EXTENT

Dimensiunea spatiului alocat pentru urmatoarea extensie

MIN_EXTENTS

Numarul minim de extensii ce se aloca la crearea unui tabel

MAX_EXTENTS

Numarul maxim de extensii ce se aloca la crearea unui tabel

PCT_INCREASE

Procentul cu care creste dimensiunea unei extensii

BACKED_UP

Y sau N, dupa cum tabelului i-a fost facuta o copie de siguranta de la ultima modificare

NUM_ROWS

Numarul de inregistrari din tabel

BLOCKS

Numarul de blocuri utilizate de tabel

EMPTY_BLOCKS

Numarul de blocuri ce nu contin date

AVG_SPACE

Spatiul mediu liber din tabel

AVG_ROW_LEN

Lungimea medie, in octeti, a unei linii

TABLE_LOCK

ENABLED (activat) sau DISABLED (dezactivat): este activata sau nu blocarea tabelului

PARTITIONED

YES sau NO, indica daca tabelul este partitionat (sau nu)

TEMPORARY

Y sau N, indica daca tabelul este temporar (sau nu)

NESTED

YES sau NO, indica daca tabelul este imbricat (sau nu)

Exemplu

DESCRIBE USER_TABLES

SELECT TABLE_NAME, NUM_ROWS, NESTED

FROM USER_TABLES;

Exemplu

SELECT 'DROP TABLE' || OBJECT_NAME || ';'

FROM USER_OBJECTS

WHERE OBJECT_TYPE = 'TABLE';

Versiunea Oracle9i introduce urmatoarele functionalitati:

crearea de tabele externe (ale caror date se afla in afara bazei de date);

crearea de fisiere gestionate de sistemul Oracle (Oracle Managed Files);

partitionarea de tip lista sau domeniu-lista a unui tabel.

Sintaxa comenzii CREATE TABLE este urmatoarea:

CREATE [GLOBAL TEMPORARY] TABLE [schema.]nume_tabel

}

[ON COMMIT ROWS]
[proprietati_fizice] [proprietati_tabel];

Tabele temporare

Optiunea GLOBAL TEMPORARY permite crearea unui tabel temporar, al carui scop este de a stoca date specifice unei sesiuni. Aceste date sunt stocate in tabel numai pe durata unei tranzactii sau a intregii sesiuni.

Definitia unui tabel temporar este accesibila tuturor sesiunilor, dar informatiile dintr-un astfel de tabel sunt vizibile numai sesiunii care insereaza linii in acesta.

Precizarea optiunii ON COMMIT determina daca datele din tabelul temporar persista pe durata unei tranzactii sau a unei sesiuni.

Clauza DELETE ROWS se utilizeaza pentru definirea unui tabel temporar specific unei tranzactii, caz in care sistemul trunchiaza tabelul, stergand toate liniile acestuia dupa fiecare operatie de permanentizare (COMMIT).

Clauza PRESERVE ROWS se specifica pentru a defini un tabel temporar specific unei sesiuni, caz in care sistemul trunchiaza tabelul la terminarea sesiunii.

Exemplu

Sa se creeze un tabel temporar achizitii_azi. Sesiunea fiecarui angajat care se ocupa de achizitii va permite stocarea in acest tabel a achizitiilor sale de la data curenta. La sfarsitul sesiunii, aceste date vor fi sterse.

CREATE GLOBAL TEMPORARY TABLE achizitii_azi
ON COMMIT PRESERVE ROWS
AS SELECT *
FROM opera
WHERE data_achizitiei = SYSDATE;

Tabele externe

In cadrul clauzei proprietati_fizice, cuvantul cheie EXTERNAL si optiunea clauza_tabel_extern permit crearea unui tabel extern. Un astfel de tabel este read‑only. Metadatele corespunzatoare lui sunt retinute in dictionarul datelor, iar datele sale sunt stocate in afara bazei, in sistemul de fisiere al server-ului.

Tabelele externe permit interogarea datelor fara incarcarea lor prealabila in baza. Nici o operatie LMD nu este permisa asupra acestora, nici un index nu poate fi creat relativ la aceste tabele. Sunt permise doar interogari utilizand SQL, PL/SQL sau Java.

Tabele organizate pe baza de index
Optiunile INDEX si clauza_tabel_org_index, prezente in cadrul clauzei proprietati_fizice, permit crearea unui tabel organizat pe baza de index. Sistemul Oracle va mentine liniile acestui tabel (atat valorile coloanelor care compun cheia primara, cat si valorile celorlalte coloane) intr-un index construit pe baza cheii primare.

Paralelism

Prin clauza AS se poate specifica o subcerere care determina crearea si popularea unui tabel. Coloanele tabelului vor fi cele precizate in lista SELECT a subcererii. Liniile returnate de subcerere vor fi inserate in tabel la momentul crearii. Crearea unui tabel prin copierea structurii si continutului dintr-un tabel sursa nu pastreaza constrangerile tabelului sursa.

Exemplu

Sa se creeze un tabel care contine codurile, titlurile si valorile corespunzatoare operelor care au fost expuse in galeria avand codul 100.

CREATE TABLE opere_100

AS SELECT cod_opera, titlu, valoare

FROM opera

WHERE cod_galerie = 100;

Prin clauza_paralelism se poate paraleliza operatia de creare a unui tabel. De asemenea, clauza stabileste gradul implicit de paralelism al interogarilor si instructiunilor LMD ce vor fi efectuate asupra tabelului. Gradul de paralelism al unei operatii este egal cu numarul de fire paralele de executie (thread) utilizate pentru realizarea acesteia. Fiecare fir de executie poate utiliza unul sau doua server-e cu executie paralela. Sintaxa clauzei este urmatoarea:


Optiunea NOPARALLEL este implicita si determina executia seriala a operatiei de creare, a cererilor si comenzilor de prelucrare. Pentru indicarea unui anumit grad de paralelism, se precizeaza un numar intreg in clauza PARALLEL. Acest lucru nu este, insa, necesar deoarece sistemul Oracle poate determina gradul optim de paralelism.

Utilizarea paralelismului accelereaza crearea tabelului, iar operatiile de interogare si prelucrare asupra acestuia vor fi mai rapide.

Exemplu

Sa se creeze tabelul opere_100 utilizand un numar optim de server-e cu executie paralela pentru a scana tabelul opera si a introduce linii in tabelul creat.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1073
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved