Sunteți pe pagina 1din 4

BAZE DE DATE SEMINAR 11

___________________________________________________________________________
GESTIUNEA ALTOR OBIECTE ALE BAZEI DE DATE
TABELE VIRTUALE
Tabele virtuale
- Stocheaza interogri si permite reutilizarea acestora
- Protejeaza informaiile de natura confidentiala
- Protejeaza BD la actualizare
- Tabele virtuale materializate stocheaza si inregistrarile
CREATE [OR REPLACE] VIEW nume_view AS SELECT...
Exemple:
1. Sa realizeze o tabela virtuala cu toti angajatii din departamentul 50. Actualizm
salariul.
CREATE OR REPLACE VIEW v_angajati_50
AS SELECT * FROM angajati
WHERE id_departament=50;
SELECT * FROM v_angajati_50;
UPDATE v_angajati_50
SET salariul = salariul + 100;
2. Stocarea unei interogri care s permit adugarea unor condiii ulterioare
SELECT * FROM v_angajati_50 WHERE EXTRACT(MONTH FROM data_angajare) = 7;
3. Actualizarea tabelelor virtuale
CREATE OR REPLACE VIEW v_rand_comenzi
AS SELECT nr_comanda, pret, pret*cantitate valoare FROM rand_comenzi;
UPDATE v_rand_comenzi
SET valoare = valoare+100;
4. Opiunea WITH READ ONLY
CREATE OR REPLACE VIEW v_rand_comenzi
AS SELECT nr_comanda, pret, pret*cantitate valoare FROM rand_comenzi
WITH READ ONLY;
5. Sa se stearga tabela virtual v_rand_comenzi
DROP VIEW v_rand_comenzi;
6. Vizualizarea informatiilor despre tabelele virtuale:
SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
INDECSI
-

Permit accesul rapid la date prin sortarea logica a nregistrrilor.


Se creaz automat la introducerea unei restricii de cheie primar sau de unicitate sau
manual de ctre utilizator.
1

BAZE DE DATE SEMINAR 11

___________________________________________________________________________

Exemple:
1. Sa se creeze un index pe tabela angajati pe coloana prenume:
SELECT * FROM angajati WHERE prenume = 'Kevin';
Cost 3
CREATE INDEX idx _nume ON angajati(prenume);
SELECT * FROM angajati WHERE prenume = 'Kevin';
Cost 2
SELECT * FROM angajati WHERE UPPER(prenume) = 'KEVIN';
CREATE INDEX idx_upper_prenume ON angajati(UPPER(prenume));
2. Vizualizarea indecilor unui anumit utilizator:
SELECT * FROM USER_INDEXES;
3. Sa se stearga indexul creat anterior:
DROP INDEX idx_prenume;
SECVENTE
-

Sunt utilizate pentru asigurarea unicitatii cheilor primare sau a valorilor pentru care s-a
impus o restrictie de tip UNIQUE.
Pot fi utilizate pentru mai multe tabele.
Pentru fiecare secventa se va preciza valoarea de inceput, pasul de incrementare si
valoarea maxima generata.

Exemple:
1. Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela Comenzi.
CREATE SEQUENCE seq_nrcomanda
START WITH 500 INCREMENT BY 10
MAXVALUE 1000 NOCYCLE;
INSERT INTO comenzi VALUES (seq_nrcomanda.NEXTVAL, TO_DATE('oct 12,05', 'mon
dd,yy'), 'direct', '104', '1', NULL);
2. Sa se afiseze valoarea curenta a secventei:
SELECT seq_nrcomanda.CURRVAL FROM DUAL;

3. S se modifice pasul de incrementare i valoarea maxim pentru secvena anterioar:


ALTER SEQUENCE seq_nrcomanda INCREMENT BY 100;
ALTER SEQUENCE seq_nrcomanda MAXVALUE 2000;

BAZE DE DATE SEMINAR 11

___________________________________________________________________________
INSERT INTO comenzi VALUES (seq_nrcomanda.NEXTVAL, TO_DATE('oct 12,05', 'mon
dd,yy'), 'direct', '104', '1', NULL);
4. S se vizualizeze informaiile depre secvenele utilizatorilor:
SELECT * FROM USER_SEQUENCES;
5. S se stearg secvena seq_nrcomanda:
DROP SEQUENCE seq_nrcomanda;
SINONIME
-

Sunt nume alternative utilizate pentru referirea obiectelor unei baze de date.
Pot fi sinonime publice (accesibile tuturor utilizatorilor) sau private.
Sinonimele publice pot fi create numai de administratorul bazei de date.

Exemple:
1. Sa se creeze un sinonim pentru tabela rnd_comenzi:
CREATE SYNONYM rc FOR RAND_COMENZI;
2. Vizualizarea sinonimelor se realizeaza astfel:
SELECT * FROM USER_SYNONYMS;
3. Sa se stearga sinonimul creat anterior:
DROP SYNONYM rc;
PARTITII
CREATE TABLE tabela_p(data DATE, cont VARCHAR2(50), divizia VARCHAR2(50))
PARTITION BY RANGE(data)
(PARTITION P1 VALUES LESS THAN (TO_DATE('01.04.2007','DD.MM.YYYY')),
PARTITION P2 VALUES LESS THAN (TO_DATE('01.09.2007','DD.MM.YYYY')));
INSERT INTO tabela_p SELECT data, cont, divizia FROM tabela_m;
SELECT * FROM tabela_p WHERE DATA <TO_DATE('01.02.2007','DD.MM.YYYY');
SELECT * FROM tabela_p partition (p1) WHERE DATA
<TO_DATE('01.02.2007','DD.MM.YYYY');
Cost 17
SELECT * FROM tabela_m WHERE DATA <TO_DATE('01.02.2007','DD.MM.YYYY');
Cost 99

BAZE DE DATE SEMINAR 11

___________________________________________________________________________
CLUSTERE
Sa se realizeze un cluster pentru campul nr_comanda si sa se adauge la acest cluster 2 tabele:
comenzi2 si rand_comenzi2 cu aceeasi structura cu tabelele din aplicatie.
CREATE CLUSTER cls_nrcomanda (nr_comanda NUMBER(12));
CREATE INDEX idx_nrcomanda ON CLUSTER cls_nrcomanda;
CREATE TABLE comenzi2
CLUSTER cls_nrcomanda (nr_comanda)
AS SELECT * FROM comenzi;
CREATE TABLE rand_comenzi2
CLUSTER cls_nrcomanda (nr_comanda)
AS SELECT * FROM rand_comenzi;
Vizualizarea informatiilor despre clustere:
SELECT * FROM USER_CLUSTERS;

S-ar putea să vă placă și