Sunteți pe pagina 1din 10

CREAREA VIZUALIZARILOR

Obiective:
Dupa parcurgerea acestei lectii, ar trebui sa puteti face urmatoarele :
* Sa descrieti o vizualizare (imagine)
* Sa creati o vizualizare
* Sa extrageti date dintr-o vizualizare
* Sa schimbati structura unei vizualizari
* Sa inserati, sa actualizati si sa stergeti date dintr-o
vizualizare
* Sa stergeti o imagine
Scopul lectiei
In aceasta lectie, veti invata sa creati si sa utilizati o imagine. Deasemenea
veti invata sa interogati dictionarul de date pentru a obtine informatii despre
vizualizari.
Obiecte baza de date
Obiect
Tabel
Vizualizare
Secventa
Index
Synonym

Descriere
Unitate de memorare; compus din linii si coloane
Reprezentari logice ale datelor din unul sau mai multe tabele
Genereaza valorile cheii primare
Imbunatateste performantele unor interogari
Un alt nume pentru interogari
Ce este o imagine?
Tabelul EMP

EMPNO
7839
7782
7934
7900
7521

ENAME
KING
CLARK
MILLER
JAMES
WARD

JOB
PRESIDENT
MANAGER
CLERK
CLERK
SALESMAN

SAL

COMM

950
1250

0
500

Se pot face reprezentari logice sau combinatii de date prin crearea vizualizarilor din
tabele. O imagine este un tabel virtual bazat pe un alt tabel sau pe o alta imagine. O
imagine nu contine date proprii dar este ca o fereastra prin intermediul careia datele
din tabele pot fi vizualizate sau schimbate. Tabelele pe baza carora sunt create

vizualizarile se numesc 'tabele de baza'. O imagine este stocata doar ca o secventa


SELECT in dictionarul de date.
De ce utilizam vizualizari ?
* Pentru a limita accesul la baza de date
* Pentru a face interogarile complexe mai usoare
* Pentru a permite independenta datei
* Pentru a prezenta diferite imagini ale aceleeasi date
Avantajul utilizarii vizualizarilor
* ingradirea accesului la baza de date deoarece selectand dintr-o imagine
putem afisa o parte restransa din baza de date.
* Permite utilizatorilor sa faca interogari simple pentru a extrage informatii
din interogari compexe. De exemplu vizualizarile permit utilizatorilor sa ceara
informatii din mai multe tabele fara a executa 'Joinul'(a uni).
* Furnizeaza independenta datelor pentru utilizatori ad-hoc si aplicatii
program. O singura imagine poate fi utilizata pentru a obtine date din mai multe
tabele.
* Furnizeaza grupurilor de utilizatori accesul la date in conformitate cu
anumite criterii.
Imagini simple si imagini complexe
Caracteristici
Vizualizari simple
Vizualizari complexe
Numarul de tabele
Unu
Unu sau mai multe
Contine functii
Nu
Da
Contine grupuri de date
Nu
Da
Operatii DML
Da
Nu sunt permise
Imaginile se clasifica in doua grupe : simple si complexe. Diferenta de baza intre
cele doua grupe este data de operatiile DML (inserare, actualizare si stergere).
O imagine simpla este o imagine care :
- Furnizeaza date dintr-o singura tabela
- Nu contine functii sau grupuri de date
- Permite operatii DML
O imagine complexa este o imagine care :
- Furnizeaza date din mai multe tabele
- Contine functii sau grupuri de date
- Nu permite intotdeauna operatii DML
Comanda CREATE VIEW

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW


nume-view [(alias[, aliast...)]
AS
subinterogare
[WITH CHECK OPTION [CONSTRAINT nume- constr]]
[WITH READ ONLY]
*Subinterogarea poate contine o secventa SELECT complexa
*Subinterogarea nu poate contine clauza ORDER BY
Se poate crea o vizualizare prin introducerea unei comenzi CREATE VIEW.
in sintaxa :
OR REPLACE - recreeaza imaginea daca aceasta exista deja
FORCE - creaza imaginea indiferent daca exista sau nu tabelul de baza
NOFORCE - creaza imaginea numai daca exista tabelul de baza.Optiunea exista
implicit
nume-view - este numele imaginii
alias - specifica numele date coloanelor din imagine si trebuie sa corespunda
elementelor din lista selectata
subinterogare -este o secventa SELECT. Alias-urile pot fi utilizate in secventa
SELECT
WITH CHECK OPTION - specifica faptul ca doar liniile accesibile imaginii
pot fi inserate sau actualizate
nume-constr - este numele dat constringerii
WITH READ ONLY - asigura ca nici o operatie DML nu se poate
executa pe vizualizare.
* Pentru a crea o vizualizare numita EMPVU10 care contine detalii ale angajatilor
din departamentul 10, se introduce:
CREATE VIEW
empvu10
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno=10;
* Pentru a afisa structura unei vizualizari poate fi folosita comanda SQL
DESCRIBE.
DESCRIBE empvu10

Plus

Exemplul anterior creat contine numarul angajatului, numele si functia sa pentru toti
angajatii din departamentul 10.
Descrierea structurii imaginii este urmatoarea :
Name

Null?

Type

EMPNO
ENAME
JOB

NOT NULL

NUMBER (4)
VARCHAR2 (10)
VARCHAR2 ( 9)

Indrumari pentru crearea unei vizualizari


*Subinterogarea care defineste o vizualizare poate contine o secventa
SELECT complexa , inclusiv reuniuni (joins), grupuri si subinterogari.
*Subinterogarea care defineste o vizualizare nu poate contine clauza
ORDER BY. Aceasta clauza este specificata atunci cand extragi date din
vizualizare.
*Daca nu se specifica un nume pentru constrangere cand se utilizeaza
clauza CHECK OPTION, sistemul va da un nume implicit in format SYS_Cn.
*Poate fi utilizata optiunea OR REPLACE pentru a altera vizualizarea fara
a o sterge si recreea sau redand privilegiile obiectului, date anterior.

Crearea vizualizarii utilizand alias-uri pentru coloane in subinterogare


CREATE VIEW
salvu30
AS SELECT empno EMPLOYEE_NUMBER, ename NAME, sal SALARY
FROM
emp
WHERE
deptno=30;
Exemplul anterior creaza o vizualizare care contine numarul angajatului cu
alias-ul EMPLOYEE_NUMBER, numele sau cu alias-ul NAME si salariul cu aliasul SALARY pentru salariatii din departamentul 30.
Alternativ, pot fi controlate numele coloanelor prin includerea alias-urilor in
clauza CREATE VIEW.

Extragerea datelor din vizualizare


SELECT *
FROM
salvu30;
EMPLOYEE_NUMBER

NAME
7698 BLAKE
7654 MARTIN
7499 ALLEN

SALARY
2850
1250
1600

7844 TURNER
7900 JAMES
7521 WARD

1500
950
1250

Datele pot fi extrase din vizualizari la fel ca si din tabele. Deasemenea poate fi afisat
intregul continut al vizualizarii sau numai liniile si coloanele specificate.
Interogarea unei vizualizari
SQL *Plus
SELECT *
From empvu;

---------->

USER_VIEWS
EMPVU10
SELECT
empno,ename,job
FROM emp
WHERE
deptno=10;

7839 KING
PRESIDENT
7782 CLARK MANAGER
7934 MILLER CLERK

<---------EMP

Vizualizari in Dictionarul de date


Odata creata vizualizarea, se poate interoga un dictionar de tabele numit
USER_VIEWS pentru a vedea numele si structura vizualizarii. Textul secventei
SELECT care constituie vizualizarea este memorat intr-o coloana LONG.
Accesul la datele vizualizarii
Cand accesati date utilizand o imagine, Serverul Oracle face urmatoarele operatii:
1. Recupereaza definitia vizualizarii din dictionarul de tabele
USER_VIEWS.
2. Cauta privilegiile de acces pentru tabelul de baza.
3. Converteste interogarea vizualizarii intr-o operatie echivalenta asupra tabelului
(tabelelor) asociate. Cu alte cuvinte, datele sunt recuperate din, sau actualizate in
tabelul (tabelele) de baza.

Modificarea unei vizualizari


*Modificati vizualizarea EMPVU10 utilizand clauza CREATE OR
REPLACE VIEW. Adaugati un alias pentru fiecare coloana.
CREATE OR REPLACE VIEW
empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job

FROM
emp
WHERE
deptno=10;
* Alias-urile coloanelor in clauza CREATE VIEW sunt listate in aceeasi
ordine ca si coloanele din subinterogare.
Optiunea OR REPLACE permite crearea unei vizualizari chiar daca mai exista una
cu acelasi nume, astfel ilocuindu-se vechea versiune cu cea noua. Asta inseamna ca
imaginea poate fi alterata (schimbata) fara stergerea, recrearea si redarea
privilegiilor obiectului.
Observatie: Cand dati nume alternative coloanelor (alias-uri) in clauza CREATE
VIEW, amintitiva ca alias-urile sunt listate in aceeasi ordine ca si coloanele din
subinterogare.
Crearea unei imagini complexe
Creati o vizualizare complexa care sa contina un grup de functii pentru a afisa
valorile din doua tabele.
CREATE VIEW

dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)
FROM
emp e, dept d
WHERE
e.deptno=d.deptno
GROUP BY
d.dname;
Exemplul anterior creaza o imagine complexa care contine numele
departamentului, salarul minim, salarul maxim si salarul mediu pentru fiecare
departament. De retinut ca alias-urile au fost specificate pentru vizualizare. Acest
lucru este o necesitate daca vreo coloana a imaginii este derivata dintr-o functie sau
expresie.
Structura vizualizarii poate fi vazuta cu ajutorul comenzii SQL* Plus DESCRIBE.
Continutul imaginii poate fi afisat cu o secventa SELECT.
SELECT *
FROM dept_sum_vu;
NAME
ACCOUNTING
RESEARCH
SALES

MINSAL

MAXSAL
1300
800
950

5000
3000
2850

AVGSAL
2916.6667
2175
1566.6667

Reguli pentru indeplinirea operatiilor DML intr-o imagine


*Se pot face operatii DML pe o vizualizare simpla
*Nu se poate sterge o linie daca imaginea contine :
- Grup de functii
- Clauza GROUP BY
- Cuvantul cheie DISTINCT
Operatiile DML trebuie sa urmeze niste reguli sigure.
*Nu se pot modifica date intr-o vizualizare daca aceasta contine:
- Orice conditie mentionata anterior
- Coloane definite prin expresii - de exemplu, SALARY*12
- Pseudocoloane ROWNUM
*Nu pot fi adaugate date daca :
- Vizualizarea contine oricare din conditiile mentionate mai sus
- Exista coloane NOT NULL in tabelul de baza care n-au fost selectate in imagine.
Toate valorile cerute trebuie sa fie prezente in vizualizare. Amintiti-va ca adaugati
valori direct in tabel.

Utilizarea clauzei WITH CHECK OPTION


* Se poate asigura faptul ca operatiile DML se fac numai pe vizualizare
utilizand clauza WITH CHECK OPTION
CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM
emp
WHERE
deptno=20
WITH CHECK OPTION CONSTRAINT

empvu20_ck;

*Orice incercare de a schimba numarul departamentului pentru orice linie


din vizualizare va esua deoarece nu respecta constrangerea WITH CHECK
OPTION.
Exista posibilitatea de a executa verificari de integritate referentiale asupra
datelor din imagini. Deasemenea se pot forta constrangerile la nivelul bazei de date.
Vizualizarea poate fi utilizata pentru a proteja integritatea datei, dar utilizarea este
foarte limitata.

Clauza WITH CHECK OPTION specifica faptul ca INSERT si UPDATES


executate prin intermediul imaginii nu permit crearea de linii noi pe care imaginea
nu le poate selecta, si de aceea permite constrangerile de integritate si verificarile
validarilor de date sa fie fortate asupra datelor ce vor fi inserate sau actualizate.
Daca exista vreo incercare de executare a operatiilor DML pe linii care nu au fost
selectate, va aparea o eroare, cu numele constrangerii daca acesta a fost specificat.
UPDATE
SET
WHERE

empvu20
deptno=10
empno=7788;

Dupa lansarea acestei secvente pe ecran va apare :


update empvu20
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
Observatie: Nici o linie nu este actualizata pentru ca daca numarul departamentului
ar deveni '10', imaginea nu ar mai putea contine acel angajat. De aceea, avand
clauza WITH CHECK OPTION, vizualizarea poate contine doar angajatii din
departamentul 20 si nu permite ca numarul departamentului pentru acei angajati sa
fie schimbat in vizualizare.

Interzicerea operatiilor DML


*Trebuie sa va asigurati ca operatiile DML nu vor altera datele adaugand
clauza WITH READ ONLY.
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno=10
WITH READ ONLY;
*Orice incercare de a executa operatii DML pe oricare din linii in imagine
va da in Oracle o eroare ORA-01752.
Exemplul descris modifica imaginea EMPVU10 pentru a impiedica orice
operatie DML.
Orice incercare de stergere a unei linii va da o eroare.
DELETE FROM

empvu10

WHERE
employee_number=7782;
Pe ecran va apare:
DELETE FROM empvu10
*
ERROR at line 1:
ORA_01752: Cannot delete from view without exactly one key-preserved table
Stergerea unei vizualizari
O vizualizare poate fi stearsa fara a pierde datele deoarece imaginea are la baza un
tabel asociat.
DROP VIEW view;
In sintaxa view semnifica numele vizualizarii.
Ex : DROP VIEW empvu10;
Utilizati comanda DROP VIEW pentru a sterge o imagine. Aceasta comanda
elimina definitia imaginii din baza de date. Datele nu sunt afectate deoarece sunt
stocate in tabelele de unde a derivat fiecare imagine. Imaginile sau alte aplicatii
bazate pe o imagine stearsa devin invalide. Doar creatorul imaginii sau un user cu
privilegiul DROP ANY VIEW poate sterge o vizualizare.

Exercitii practice
*Crearea unei imagini simple
*Crearea unei imagini complexe
*Crearea unei imagini cu verificarea constangerii
*Incercarea de modificare a datei intr-o vizualizare
*Afisarea definitiilor de vizualizari
*{tergerea imaginilor
In acest capitol de exercitii veti crea imagini simple si complexe si veti
incerca sa executati operatii DML pe vizualizari.
1. Creati o vizualizare EMP_VU care sa contina numarul angajatului, numele sau si
numarul departamentului avand asociat tabelul EMP. Schimbati denumirea pentru
numele angajatului cu EMPLOYEE.
2. Afisati continutul vizualizarii EMP_VU.

3. Selectati view_name si text (numele vizualizarii si textul) din dictionarul


USER_VIEWS.
4. Folosind imaginea EMP_VU introduceti o secventa
angajatilor si numerele departamentelor.

pentru a afisa numele

5. Creati o vizualizare DEPT20 care sa contina numarul angajatului, numele sau si


numarul departamentului pentru toti angajatii din departamentul 20. Etichetati
coloanele imaginii astfel : EMPLOYEE_ID,EMPLOYEE si DEPARTMENT_ID.
Nu permiteti ca unui angajat sa i se poata schimba numarul departamentului in
vizualizare.
6. Afisati structura si continutul imaginii DEPT20.
7. Incercati sa schimbati numarul departamentului pentru Smith.
8. Creati o imagine numita SALARY_VU care sa contina numele angajatului,
numele departamentului, salariul si gradul salariului pentru toti angajatii. Etichetati
coloanele astfel: Employee, Department, Salary respectiv Grade.

10

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