CATEGORII DOCUMENTE |
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
FROM carte
WHERE coded = 'I';
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.
(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.
(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.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_tabelClauza 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]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_aziTabele 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 indexParalelism
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 |
Vizualizari: 1152
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved