Sunteți pe pagina 1din 4

BAZE DE DATE – SEMINAR 11

___________________________________________________________________________

GESTIUNEA ALTOR OBIECTE ALE BAZEI DE DATE

TABELE VIRTUALE
Tabele virtuale
- Stocheaza interogări si permite reutilizarea acestora
- Protejeaza informaţiile 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. Actualizăm
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 interogări care să permită adăugarea unor condiţii 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. Opţiunea 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 înregistrărilor.


- Se crează automat la introducerea unei restricţii de cheie primară sau de unicitate sau
manual de către 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 indecşilor 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 secvenţa anterioară:

ALTER SEQUENCE seq_nrcomanda INCREMENT BY 100;


ALTER SEQUENCE seq_nrcomanda MAXVALUE 2000;

2
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 informaţiile depre secvenţele utilizatorilor:

SELECT * FROM USER_SEQUENCES;

5. Să se steargă secvenţa 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 rând_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

3
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