Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
VIZUALIZARI
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 in mod relevant dictionarul de date pentru a obtine informatii despre vizualizari. In aceasta lectie termenul vizualizare este sinonim cu imagine.
Obiecte ale bazei de date
Obiect |
Descriere |
Tabel |
Unitate de memorare; compus din linii si coloane |
Vizualizare |
Reprezentare logica a datelor din unul sau mai multe tabele |
Secventa |
Genereaza valorile pentru cheia primara |
Index |
Imbunatateste performantele interogarii |
Synonym |
Un alt nume pentru interogare |
Ce este o imagine?
Tabelul EMP
EMPNO |
ENAME |
JOB |
SAL |
COMM |
KING |
PRESIDENT | |||
|
MANAGER | |||
MILLER |
CLERK | |||
JAMES |
CLERK | |||
WARD |
SALESMAN |
Se pot face reprezentari logice ale unor date sau combinatii de date prin crearea vizualizarilor (imagini) din tabele. O imagine este un tabel logic bazat pe un alt tabel (sau mai multe tabele) sau dintr-o alta imagine. O imagine nu contine date proprii; 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'. Vizualizarea 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 datelor
* Pentru a prezenta diferite imagini ale aceleasi date
Avantajul utilizarii vizualizarilor
* Ingradirea accesului la baza de date ; selectind valori 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 cunoaste instructiunea 'Join' .
* 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.
Vizualizari 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 |
Vizualizarile 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 vizualizare simpla este o imagine care :
- Furnizeaza date dintr-o singura tabela
- Nu contine functii sau grupuri de date
- Permite operatii DML
O vizualizare complexa este o imagine care :
- Furnizeaza date din mai multe tabele
- Contine functii sau grupuri de date
- Nu permite 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 nu se poate executa pe vizualizare nici o
operatie DML
Exemplu : Pentru a crea o vizualizare numita EMPVU10 care sa contina 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*Plus DESCRIBE.
DESCRIBE empvu10
Exemplul anterior contine numarul angajatului, numele si functia pentru toti angajatii din departamentul 10. Descrierea structurii imaginii este urmatoarea :
Name Null? Type |
EMPNO NOT NULL NUMBER (4) |
ENAME VARCHAR2 (10) JOB 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 se extrag date din vizualizare.
* Daca nu se specifica un nume pentru constrangere la utilizarea clauzei CHECK OPTION, sistemul va da un nume implicit de forma SYS_Cn.
* Optiunea OR REPLACE poate fi utilizata pentru a altera o vizualizare existenta, fara a o sterge, prin recreerea vizualizarii sau pentru a reda privilegiile obiectului, date anterior.
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 alias-ul SALARY pentru salariatii din departamentul 30.
Alternativ, pot fi controlate numele coloanelor prin includerea alias-urilor in clauza CREATE VIEW.
SELECT * FROM salvu30;
EMPLOYEE_NUMBER |
NAME |
SALARY |
BLAKE | ||
MARTIN | ||
ALLEN | ||
TURNER | ||
JAMES | ||
WARD |
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
SELECT * FROM USER_VIEWS
Exemplu: SELECT * FROM EMPVU
SELECT empno,ename,job
FROM emp
WHERE deptno=10;
7839 KING PRESIDENT
7782
7934 MILLER CLERK
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 de tip LONG.
Cand accesati date dintr-o vizualizare, Serverul Oracle face urmatoarele operatii:
1. Citeste definitia vizualizarii in 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 citite sau actualizate din 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 scrise in aceeasi ordine ca si coloanele din subinterogare.
Optiunea OR REPLACE permite crearea unei vizualizari chiar daca mai exista una cu acelasi nume, inlocuindu-se astfel vechea versiune cu cea noua. Acest lucru inseamna ca vizualizarea poate fi alterata (schimbata) fara stergerea celei anterioare, prin recreerea dupa noile cerintere si redarea privilegiilor obiectului.
Observatie: Cand dati nume alternative coloanelor (alias-uri) in clauza CREATE VIEW, amintiti-va ca alias-urile trebuiesc scrise in aceeasi ordine ca si coloanele din subinterogare.
Crearea unei imagini complexe
Creati o vizualizare complexa care sa contina functii de grup, 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 vizualizare complexa, care contine numele departamentului, salariul minim, salariul maxim si salariul mediu pentru fiecare departament. De retinut ca pentru vizualizare au fost specificate alias-uri de coloane. Acest lucru este strict necesar daca o coloana a vizualizarii este derivata dintr-o functie sau expresie.
Structura vizualizarii poate fi vazuta cu ajutorul comenzii SQL* Plus DESCRIBE. Continutul vizualizarii poate fi afisat cu o secventa SELECT.
SELECT * FROM dept_sum_vu;
NAME |
MINSAL |
MAXSAL |
AVGSAL |
ACCOUNTING | |||
RESEARCH | |||
SALES |
Reguli pentru indeplinirea operatiilor DML intr-o vizualizare
* Se pot face operatii DML pe o vizualizare simpla
* Nu se pot sterge linii dintr-o vizualizare daca aceasta contine :
- Functii de grup
- Clauza GROUP BY
- Cuvantul cheie DISTINCT
Reguli referitoare la operatiile DML pentru vizualizari :
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
Folosirea clauzei WITH CHECK OPTION intr-o vizualizarea, ne asigura asupra faptul ca operatiile DML se fac numai pe vizualizare .
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 vizualizari. 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 operatiile de INSERT si UPDATE executate prin intermediul imaginii nu permit crearea de linii noi, pe care vizualizarea nu le poate selecta. De aceea, constrangerile de integritate si verificarile asupra validitatii datelor sunt permise si chiar sunt 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 empvu20 SET deptnoa10 WHERE 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', vizualizarea 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 liniile vizualizarii va da un mesaj de 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 vizualizarii din baza de date. Datele nu sunt afectate deoarece sunt stocate in tabelele de unde a derivat fiecare vizualizare. Vizualizarile sau alte aplicatii bazate pe o vizualizare stearsa devin invalide. Doar creatorul vizualizarii sau un user cu privilegiul DROP ANY VIEW poate sterge o vizualizare.
Exercitii practice
* Crearea unei vizualizari simple
* Crearea unei vizualizari complexe
* Crearea unei vizualizari cu verificarea constangerii
* Incercarea de modificare a datelor dintr-o vizualizare
* Afisarea definitiilor de vizualizari
* Stergerea vizualizarilor
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 vizualizarea EMP_VU, introduceti o secventa pentru a afisa numele angajatilor si numerele departamentelor.
5. Creati o vizualizare DEPT20 care sa contina numarul angajatului, numele sau si numarul departamentului pentru toti angajatii din departamentul 20. Etichetati coloanele vizualizarii 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 vizualizarii DEPT20.
7. Incercati sa schimbati numarul departamentului pentru Smith.
8. Creati o vizualizare 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.
Copyright © 2024 - Toate drepturile rezervate