Sunteți pe pagina 1din 73

FACULTATEA DE INFORMATICA MANAGERIALA CURS BD ORACLE an III Seria A (Versiune site:) PLANIFICARE CURSURI: ORACLE AN III SEM.

. II/2010 Prof. dr. Virgil Chichernea Calendar activitate: 15.02 09.05.2010 - ACTIVITATE DIDACTICA (12 sapt.); 10.05 23.05.2010 - Definitivare lucrare licenta (2 sapt.); 24.05 20.06.2010 - Sesiune de examene (4 saptamani); 21.06 -04.06.2010 - RESTANTE (2 sapt.); 21.06 05.06.2010 - Inscriere la lienta ; 7.07 - 11.07.2010 - EXAMEN DE LICENTA
PLANIFICARE CURSURI- Semestrul II An Univ: 2009-2010 Planificarea cursuri : S.G.B.D. ORACLE-SQL AN III: SEMESTRUL II -2010 Cursul nr. 1. 17.02.10 Prezentarea general a SGDB-urilor i a arhitecturii sistemelor informatice cu baze de date/ baze de date relationale; SGBD ORACLE. Arhitectura funcional i intern a sistemului ORACLE. Sesiuni de lucru i controlul accesului utilizatorilor; Cursul nr. 2. 24.02.10 Utilizarea SQL*PLUS - Editarea comenzilor. Comenzi interactive. Formatarea rezultatelor; Cursul nr.3. 3.03.10 SQL - Limbajul de definire a datelor; Crearea si actualizarea bazei de date prin comenzi SQL; Cursul nr.4. 10.03.10 Limbajul de manipulare a datelor; Limbajul pentru controlul accesului la date; Cursul nr.5. 17.03.10 Interogarea bazei de date i setul de operatori SQL. Subinterogri. Interogri corelate. Utilizarea subinterogrilor pentru crearea si actualizarea tabelelor. Cursul nr.6. 24.03.10

Implementarea operatorilor relaionali n SQL. Operatorii asambliti. Operatorii relaionali (selecia, proiecia, jonciunea, diviziunea). Operatori aritmetici, funcii i grupuri de funcii; Stabilire teme proiect de semestru Cursul nr.7. 31.03.10 Test nr. 1 - test semestrial n plen Cursul nr.8. 7.04.10 Functii agregat SQL. Subtotaluri. Analize multidimensionale. Operatorii CUBE i GROUPING SETS. Soluii OLAP. Ferestre pentru funcii analitice; Obiecte din schema bazei de date. Extensii procedurale ale SQL. Dicionarul bazei de date. Reguli de validare. Tabele virtuale n ORACLE si VFP.

Cursul nr.9. 14.04.10 Realizarea de rapoarte si videoformate in SQL. Crearea viziunilor, secventelor, sinonimelor si grupurilor de tabele sau indecsi (clusteri) Cursul nr.10. 21.04.10 Introducere in PL/SQL. Proceduri, funcii stocate i declanatori n VFP i ORACLE Cursul nr.11. 28.04.10 Test nr. 2 - test semestrial n plen Cursul nr.12. 5.05.10 Dezvoltari de proiecte in ORACLE. Privilegii, roluri, utilizatori, schema unui utilizator, securitatea datelor. Expresii si Functii.

Bibliografie: 1. BAZE DE DATE ORACLE SQL, SQL*Plus, PL/SQL Autori : Prof. Dr. Virgil Chichernea, Lector drd. Gabriel Garais, Asistent univ. Dragos Paul Pop, Editura Universitatii Romano-Americane, Bucuresti 2009. 2. Pliant cu comenzile SQL

CUPRINSUL MANUALULUI CURSULUI UNIVERSITATEA ROMANO-AMERICANA BUCURESTI


Prof. univ. dr. Virgil Chichernea Lect. univ. drd. Gabriel Eugen Garais Asist. univ. Dragos Paul Pop

BAZE DE DATE

ORACLE
- SQL, SQL*Plus, PL/SQL -

Bucuresti 2009

Cuprins Prefa BAZE DE DATE RELATIONALE SI ARHITECTURA FUNCTIONALA A SGBD ORACLE


1.1. Baze de date relaionale (BDR) 1.2. Modelul relaional 1.3. Forme normale 1.4. Arhitectura funcional a SGBD ORACLE

PARTEA I Sectiunea I: LIMBAJUL SQL (Structured Query Language) - ORACLE


2.1. Prezentarea limbajului SQL-ORACE - Tabele - Structura comenzilor n SQL 2.2. Limbajul de definire a datelor (LDD) a) Crearea bazei de date i spaiului alocat tabelelor Crearea bazei de date n SQL : Comanda CREATE DATABASE Crearea spaiului alocat tabelelor b) Crearea obiectelor n baza de date Crearea unei tabele Modificarea structurii ntr-o tabela existent: c) Crearea viziunilor : Comanda CREATE VIEW d) Vizualizarea structurii unei tabele e) tergerea unui obiect din baza de date 2.3. Limbajul de manipulare a datelor Comanda INSERT Comanda DELETE Comanda UPDATE Comanda SELECT 2.4. Limbajul pentru controlul accesului la date (LCD) 2.5. Interogarea bazelor de date. Implementarea operatorilor relaionali Interogri simple 2.5.1 Implementarea operatorilor de selecie i proiecie 2.5.2. Expresii, condiii i operatori Operatori: a) Operatori aritmetici b) Operatori de comparaie: c) Operatori de subliniere d) Operatori logici: AND; OR; NOT;

e) Operatori pentru mulimi: UNION i UNION ALL f) Operatorul INTERSECT g) Operatorul MINUS h) Operatorul BETWEEN i) Operatorul LIKE j) Operatorul IN 2.5.3. Implementarea operatorului JOIN (operator de compunere) a) Echi-jonciunea ( jonctiunea echivalent) b) Non echi- jonciuni c) Jonciuni externe d) Auto-jonciunea (jonciunea tabelei cu ea nssi) 2.5.4. Crearea de scripturi (Macro) 2.5.5. Definirea variabilelor n SQL 2.6. Funcii SQL i funcii agregate SQL 2.6.1. Funcii totalizatoare: a) Funcia COUNT returneaz nr. total de linii care respect clauza WHERE b) Funcia SUM returneaz suma tuturor valorilor dintr-o coloan c) Funcia AVG calculeaz valoarea medie a unei coloane d) Funcia MAX gseste i afieaz valoarea cea mai mare dintr-o coloan e) Funcia MIN returneaz cea mai mic valoare dintr-o coloan f) Funcia VARIANCE Calculeaz i afieaz dispersia valorilor dintr-o coloan g) STDDEV calculeaz i afieaz abaterea (deviaia) standard 2.6.2. Funcii pentru data calendaristic i ora a) Funcia ADD-MOUNTHS adaug un numr de luni la data curent

2.6.3. Funcii matematice a) Funcii aritmetice b) Funcii trigonometrice


c) Funcii logaritmice EXP, LN, LOG d) Funcii le POWER, SIGN, SQRT 2.6.4. Funcii de tratare a irului de caractere 2.6.5. Funcii diverse 2.6.7 Funcii agregate - Clauzele utilizate n comanda SELECT a) Clauza WHERE b) Clauza STARTING WITH c) Clauza ORDER BY d) Clauza GROUP BY e) Clauza HAVING 2.7. Cereri complexe 2.7.1. Cereri complexe de interogare

2.7.2. Subinterogri 2.8. Realizare rapoarte i videoformate(Forms) n SQL 2.8.1. Realizarea rapoartelor n SQL 2.8.2. Realizarea de videoformate (FORMS) n SQL

Sectiunea a II-a: SQL*PLUS (Manual de utilizare).


3.1. Sesiunea de lucru 3.2. Moduri de lucru cu SQL*Plus 3.3. Editarea comenzilor SQL*Plus (exemple) 3.4. Opiunile de lucru. Comanda SET; 3.5. Utilizarea variabilelor utilizator 3.6. Introducerea de comentarii printre comenzile dintr-un fiier 3.7. Afiarea unor informaii: (DESCRIBE: HELP{COMANDS/ CLAUSE}) 3.8. Parametrizarea/abandonarea schimbrilor asupra BD 3.9. Controlul accesului la baza de date: nume utilizator i parola. 3.10. Formatarea rezultatelor i editarea de rapoarte 3.11. Dicionarul datelor componenta a SGBD ORACLE

PARTEA a II-a: LIMBAJUL DE PROGRAMARE PL/SQL Sectiunea I:


4.1. Introducere n limbajul PL/SQL 4.2. Structura unui bloc de baz PL/SQL 4.3. Declararea variabilelor 4.4. Elemente de limbaj 4.1.3 Declaraiile 4.5. Instruciuni PL/SQL 4.6. Gestiunea cursorului n PL/SQL 4.7. Subprograme PL/SQL 4.8. Pachete 4.9. Declanatori (triggeri)
- 4.9.1. Integritatea restriciilor i triggeri - 4.9.2. Integritatea restriciilor - 4.9.3. Exemple de triggeri - 4.9.4. Programarea trigerilor - 4.9.5. Mai multe despre trigeri 4.10. Gestiunea erorilor

4.11. Abordarea orientat obiect n PL/SQL


4.11.1. Programarea n PL/SQL 4.11.2. ncorporarea SQL i Pro*C 4.11.3. Concepte generale 4.11.4. Variabile gazda i variabile de comunicaii 4.11.5. Zona de comunicare

Sectiunea a II-a:

PROBLEME REZOLVATE N SQL I PL/SQL


5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. Prezentarea studiului de caz i a modelului relaional Probleme referitoare la LDD i LMD Interogri monorelaie Interogri utiliznd operatorii relaionali Interogri multi relaie Aplicaii referitoare la vizualizri Aplicaii referitoare la declanatori Subprograme n PL/SQL

PARTEA a III-a: Sectiunea I: Proiecte realizate in SQL si PL/SQL Sectiunea a II-a: PREZENTAREA I UTILIZAREA APLICAIEI SITIRATING
6.1 Obiective 6.2 Modele economico-matematice utilizate 6.3 Manual de utilizare

Sectiunea a III-a:
Pliant SQL Teste de autoevaluare Bibliografie

EXTRAS DIN CUPRINSUL CURSURILOR PREDATE LA : DISCIPLINA : BD-ORACLE AN III SERIA A


Prof. Dr. Virgil Chichernea

Cursul nr. 1 : (extras) Obs : Continutul informational complet se afla in manual. 1.4. Arhitectura general a SGBD-ului ORACLE
Corporaia ORACLE este principalul furnizor de software pentru gestiunea bazelor de date relaionale (SGBDR), software ce lucreaz pe o gam larg de calculatoare conectate la Internet. n fig. nr. 3 sunt prezentate principalele etape evolutive din istoria acestei corporaii, a doua companie de software la nivel mondial.

Fig. 3 Etape semnificative ale evolutiei SGBD-ului ORACLE

1.4.1 Arhitectura funcional i intern

n cele ce urmeaz vom discuta despre componentele SGBD ORACLE: arthitectur, structura logic i fizic a bazei de date, i modul n care comenzile SQL sunt procesate i cum se creaz obiectele bazei de date. Principalele caracteristici ale sistemului ORACLE sunt: - ORACLE este un SGBD relaional, portabil pe o mare varietate de platforme i folosete un numr mare de utilitare care se pot folosi pe toate etapele modelrii, de la specificarea cerinelor pn la exploatarea aplicaiilor dezvoltate. - ORACLE dispune de un limbaj de definire (DDL), un limbaj de manipulare (DML) a datelor i un limbaj de control al datelor (LCD); - Manipularea datelor se face cu ajutorul limbajului SQL i PL/SQL (Procedural Language); - Oracle suport proceduri, funcii i biblioteci (pachete) stocate la nivelul bazei de date. Pachetele pot fi apelate prin programele utilizatorilor sau de ctre sistem ca urmare a realizrii unui anumit eveniment declaator (trigger).; - Oracle asigur: coerena datelor, confidenialitatea datelor, integritatea datelor, salvarea i restaurarea datelor, gestiunea acceselor concurente, portabilitatea datelor i a aplicaiilor dezvoltate, Arhitectura funcional, sub o form simplificat, a SGBD ORACLE este prezentat n fig.4 ARHITECTURA ORACLE INTERFETE DE DEZVOLTARE DEVELOPER DESIGNER PRO*

NUCLEUL ORACLE SQL*PLUS PL/SQL JAVA

BD

INSTRUMENTE DE INTRETINERE ADMINISTRATOR TOOLS NET PRODUCTS

BROWSERE, EDITOARE,

Fig. 5. Arhitectura funcional ORACLE Componentele care formeaz arhitectura ORACLE sunt structurate pe trei niveluri: nucleul, intefeele i instrumentele de ntreinere. Aceste componente sunt dispuse ntr-o configuraie client/server. Componentele de client i de server sunt plasate pe calculatoare diferite ntr-o reea n care: - serverul asigur memorarea i manipularea datelor, precum i administrarea bazei de date; - clientul asigur interfaa cu utilizatorul i lanseaz aplicaia care acceseaz datele din baza de date. 1.4.2. Managementul memoriei i al proceselor Oracle DBMS server se bazeaz pe aa numita arhitectur Multi-Server. Serverul este responsabil cu procesarea tuturor bazelor de date active, adic cu execuia unei comenzi SQL, managementul userului, resurselor i memoriei. Dei exist numai o copie a codului de program pentru SGBD server, fiecare utilizator este conectat la un server logic care i este destinat. Fig. Nr.6 ilustreaz arhitectura SGBD Oracle privind structura memoriei, proceselor i fiierelor.

Utilizator 1

Utilizator 2

Utilizator n

Server Proces PGA

Server Proces PGA System Global Area (SGA)

Server Proces PGA

Buffer Baza de date (Database)

Buffer Redo-log Buffer Arhiva Log

Shared Pool Dicionar Cache Bibliotec Cache Procese de baz PMON SMON

DBWR

LGWR

ARCH

Fiiere date

Fiiere Redo-log

Fiiere Control

Fiiere Arhiv i backup

Figura 6: Arhitectura sistemului Oracle 1.4.3. Structura logica i fizica a bazei de date Baza de date a unei aplicaii realizat n ORACLE conine tabele corelate n care se memoreaz datele aplicaiei. Rndurile unei tabele reprezint Entiti (nregistrri), iar coloanele tabelei reprezint atribute (cmpuri). Un model de date este o structur pentru descrierea i documentarea datelor necesare utilizatorului care pot fi implementate ntr-o baz de date. Un model de date trebuie s fie creat pentru fiecare user. Toate modelele de useri sunt adunate ntr-un model de baz de date. Un view de user este dezvoltat din modelul de baz de date pentru a reprezenta modelul fiecrui user.

Schema bazei de date descrie n totalitate baza de date adic: descrie tabelele, definete relaiile, definete domeniile, definete regulile afacerilor. Elementele unei baze de date ORACLE (vezi fig. nr. 8): - Zonele de memorie: Zona global de sistem (SGA); Zona global de program (PGA); Zona de context (CA). - Procesoarele ORACLE: DataBase Writer; Process Monitor; System Monitor; Proces Check Monitor. (Client; Sever). - Obiectele tip ORACLE: BD; Tabela de baz; Tabela virtual; Clusterul; Indexul; - Tipuri de date cele din standardul SQL; - Fiierele - pentru memorarea datelor din structura fizic a BD ORACLE: o Fiierele de date (tabele de baz, indeci, clusteri, segmente, dicionarul de date); o Fiierele de control o Fiierele jurnal (redo, log); o Alte fiiere;

Fig. nr. 8. Baza de date ORACLE n arhitectura bazei de date se face distincie ntre structura logic i fizic a bazei de date (vezi fig. nr. 9). Structura logic descrie zonele logice de memorie (numite spaii) unde obiectele ca tabelele pot fi memorate. Structura fizic este determinat de fiierele sistemului de operare care constituie baza de date.

Baza de date LOGIC Spatiu tabel FIZIC Fisier de date

Segment Extensie

Bloc ORACLE

Bloc OS

Figure 9: Structura logica i fizica a unei baze de date Urmatoarea schema ilusreaz arhitectura ORACLE a instanei BD i a legturilor ntre structurile logice i fizice .

Fiiere redo-log

Baza de date

Fiiere control

Fiiere Date

Tabele spaiu Tabele Tabele Segment Tabele Tabele

Block

extent

Fig. nr.10 Relaiile dintre structura logic i fizic a bazei de date

Cursul nr. 2 : (extras) Obs : Continutul informational complet se afla in manual.

PARTEA I

Sectiunea a II-a

1.2
SQL*PLUS (Manual de utilizare).
2.1. Sesiunea de lucru 2.2. Moduri de lucru cu SQL*Plus 2.3. Editarea comenzilor SQL*Plus (exemple) 2.4. Opiunile de lucru. Comanda SET; 2.5. Utilizarea variabilelor utilizator 2.6. Introducerea de comentarii printre comenzile dintr-un fiier 2.7. Afiarea unor informaii: (DESCRIBE: HELP{COMANDS/ CLAUSE}) 2.8. Parametrizarea/abandonarea schimbrilor asupra BD 2.9. Controlul accesului la baza de date: nume utilizator i parola. 2.10. Formatarea rezultatelor i editarea de rapoarte 2.11. Dicionarul datelor componenta a SGBD ORACLE

SQL*PLUS - PREZENTARE GENERALA


Obiective: Prezentarea unui manual minimal de utilizare a interfeei SQL*Plus; Controlul accesului la baza de date: nume utilizator i parola; Formatarea rezultatelor i editarea de rapoarte; Accesul la dicionarul datelor ORACLE.

SQL*Plus asigur interfaa interactiv (low-level) dintre utilizator i SGBD-ul ORACLE. SQL*Plus este un program utilitar, cel mai utilizat de SGBD ORACLE, care permite utilizatorilor s defineasc i s manipuleze interactiv obiectele bazei de date i asigur accesul la obiectele (componentele) unei baze de date (tabele, viziuni, clustere etc.). Acest program utilitar se utilizeaz implicit la afiarea rezultatelor interogarilor sau a view-urilor pe ecran. Printre facilitile oferite de ctre SQL*Plus se pot enumera: Este un editor de linii de comanda SQL. ( Se precizeaz c SGBD ORACLE accept i alte editoare de linii de comand ); Ofer numeroase comenzi pentru formatarea rezultatului unei cereri; SQL*Plus asigur asistena on line (help on line). Rezultatul cererii poate fi memorat n fiiere care pot fi printate; Cererile frecvente pot fi salvate ntr-un fiier i pot fi apelate de cte ori este nevoie; Cererile pot fi parametrizate astfel c este posibil s se invoce o cerere salvat i s se precizeze numai parametrii. Dup ce utilizatorul s-a conectat la SQL*Plus, sistemul afieaz promterul SQL> i asteapt comenzile utilizatorului. Utilizatorul poate scrie trei tipuri de comenzi: - Instruciuni SQL pentru definirea i accesarea bazei de date; - Blocuri PL/SQL pentru accesarea bazei de date; - Comenzi SQL*Plus pentru editarea i memorarea comenzilor SQL, a blocurilor PL/SQL, pentru formatarea rezultatelor i pentru setarea opiunilor de lucru.

3.1. Sesiunea de lucru:

Pentru a lucra cu SQL*Plus utilizatorul trebuie s se conecteze la sistemul de operare i s deschid o sesiune de lucru ORACLE conform procedurilor de mai jos. Deschiderea unei sesiuni de lucru: Pentru a deschide o sesiune de lucru utilizatorul SGBD ORACLE poate opta pentru una din procedurile prezentate mai jos: a) Clic pe START All Programs ORACLE Application Development SQL*PLUS 10g . Apare o fereastr pentru conectare i se introduce nume utilizator i parola, [nume baz de date] OK ; Apare prompterul SQL>

b) Click pe START

sau click pe iconul

Se tasteaz nume utilizator, parol, [nume baza de date] OK ; Apare prompterul SQL>

Inchidere sesiune SQL*PLUS: se realizeaz prin una din comenzile: SQL> QUIT; SQL> EXIT; SQL> [CTRL]Z; i apare mesajul : Disconnected from ORACLE.

3.2. Moduri de lucru cu SQL


a) modul direct, n care utilizatorul introduce o comand SQL care se tasteaz dup promterul SQL. Aceast comand este memorat n bufferul SQL i poate fi modificat sau lansat n execuie de mai multe ori, atta timp ct utilizatorul nu a introdus o nou comand sau nu a ters explicit bufferul SQL; O nou comand SQL va terge automat vechea comand din buffer. b) modul program, care const n elaborarea i rularea unui fiier de comenzi ce conine instruciunile unui program surs scris n limbajul SQL. Fiierul este de forma nume.SQL i se obine prin una din urmatoarele proceduri: - cu ajutorul comenzii SQL > EDIT tastare comenzi SQL SAVE nume_fiier [CREATE|REPLACE|APPEND]; - salvarea buffer-ului SQL, care conine un numr de comenzi, cu ajutorul comenzii: GET nume_fiier[.ext] [LIST] [NOLIST]. - utilizarea comenzii INPUT urmat de comenzile fiierului i apoi salvarea coninutului buffer-ului ntr-un fiier.

3.3 Editarea comenzilor SQL*Plus (exemple)


Cele mai recente instruciuni SQL sunt memorate n bufferul SQL, indiferent dac aceste instruciuni au sau nu sintaxa corect. Se poate edita bufferul folosind una din comenzile: l[ist] listeaz toate liniile din bufferul SQL i marcheaz cu _ linia curent din buffer l<number> - listaz linia <number> c[hange]/<old string>/<new string> - inlocuiete secvena irului vechi cu irul nou; a[ppend]<string> - adauga <string> la linia curent; del terge linia curent; r[un] execut coninutul bufferului; get<file> - citete datele din fiierul <file> n buffer; save<file> - scrie bufferul current n <file>; edit invoc (lanseaz) editorul i incarc bufferul curent n editor. Dup iesirea din editor instruciunea SQL modificat este memorat n buffer i poate fi executat cu comanda r; Editorul poate fi definit n shell-ul SQL*Plus prin tastarea comenzii: editor =<name>, unde <name> poate fi un nume de editor. Comenzile SQL sunt memorate n buffer-ul comenzilor SQL i pot fi modificate fr a fi nevoie de retastare. Editarea se poate realiza utiliznd urmtoarele comenzi SQL: L afieaz toat comanda (toate liniile comenzii din buffer-ul SQL); Ln afieaz numai linia n; L* afieaz linia curent[; Lmn afieaz liniile de la m la n; Llast afieaz linia precedent; I inserarea de linii dup linia curent.

2.4.Opiunile de lucru. Setarea se face cu ajutorul comenzii SET


a) Afiarea opiunilor se face cu comanda SHOW 1) S se afieze numrul poziiei liniei n cadrul paginii curente SQL> SHOW LNO; lno 9 ....... b) Evaluarea timpului necesar executrii comenzilor 5) S se creeze o zon de contorizare a timpului necesar executrii diferitelor comenzi, cu numele CONTOR 6) S se indice efectuarea unui salt de trei rnduri la nceputul unei pagini noi. SQL> SET PAGESIZE 7

3.5. Utilizarea variabilelor utilizator. &nume_variabila prin comanda ACCEPT sau comanda DEFINE 1) S se defineasc variabila VAR1 ca fiind coloana MARCA, prin comanda DEFINE i variabila VAR2 ca fiind coloana NUME, prin coloana ACCEPT. SQL> DEFIME VAR1=MARCA; ACCEPT VAR2 NUME SQL> / old 1: selected &VAR1, &VAR2 new 1: SELECTED MARCA, NUME MARCA NUME ---------------------------400 GICA ION 3.6. Introducerea de comentarii printre comenzile dintr-un fiier (REMARK; DOCUMENT; /* */ ) 1) S se introduc un rnd de comentariu n programul de bufer curent SQL> INPUT /* PROGRAM TEST */ SQL> LIST 1 SELECT &VAR1, &VAR2 2 /* PROGRAM TEST */ 3 FROM SALARIATI 4 * WHERE FUNCT= ' DIRECTOR' Obs. Pentru ca dup afiarea unei pagini s se fac pauz, urmnd s se atepte apsarea tastei ENTER , se folosete comanda PAUSE [text]. 3.7. Afiarea unor informaii : ( DESCRIBE: HELP{COMANDS/ CLAUSEE})

Help System SQL*Plus i alte comenzi utile


Pentru a avea acces la help-ul online SQL*Plus se tasteaz help; Pentru a schimba parola se folosete comanda: alter user <user> identified by <new password>; Comanda desc[ribe] <table> listeaz toate coloanele unei tabele mpreun cu tipul datelor i informaii despre valorile null dac au fost alocate; Comanda spool <file> asigur ca toate informaiile de pe display s fie memorate n <file>. Pentru a inhiba aceast comand se utilizeaz: spool off; Comanda copy poate fi utilizat pentru copierea complet a unei tabele. Exemplu: copy from scott/tiger create EMPL using select _ from EMP;

3.8. Parametrizarea/abandonarea schimbrilor asupra BD 1) S se realizeze efectiv actualizrile fcute asupra bazei de date

SQL> COMMIT commit complete b) S se renune la actualizrile fcute SQL> ROLLBACK rolback complete Copierea datelor ntre BD diferite COPY [FROM nume_utilizator / parola@baza_date] [TO nume_utilizator / parola@baza_date] {APPEND | CREATE | INSERT |REPLACE | nume_tabela [ (nume_col, nume_col,..)] USING cerere; 3.9. Controlul accesului la baza de date: nume utilizator i parol. Acordarea drepturilor de acces 1) S se acorde dreptul de conectare la baza de date utilizatorului COMBAZA1; SQL> GRANT CONNECT TO COMBAZA1; Grand succeeded. 2) S se defineasc un acces privilegiat pentru tabela SALARIATI utilizatorului util. SQL> GRANT ALL ON SALARIATI TO UTIL1; Grant succeeded. 3) S se revoce drepturile de acces la baza de date pentru utilizatorul UTIL1. SQL> REVOKE CONNECT FROM UTIL1; Revoke succeeded. 4) S se revoce accesul privilegiat la tabela PRODUSE utilizatorului UTIL2. SQL> REVOKE ALL ON PRODUSE FROM UTIL2; Revoke succeeded. Reinerea n baza de date a comenzilor utilizator [ AUDIT]. 5) S se controleze operaia de introducere a datelor n tabela SALARIATI. SQL> AUDIT INSERT 2 ON SALARIATI BY ACCESS; Audit succeeded.

Partajarea accesului la tabele SQL> LOCK TABLE SALARIATI 2 IN EXCLUSIVE MODE NOWAIT; Table(s) Locked. Observaie. Comanda LOCK TABLE d posibilitatea utilizatorului s mpart n mod egal cu ali utilizatori accesul la una sau mai multe tabele, pstrnd integritatea acestora. 2.10.Formatarea rezultatelor i editarea de rapoarte Raportul este o form de afiare a datelor ntr-un format cerut de beneficiar. Pentru realizarea editrii de rapoarte profesionale SGBD ORACLE pune la dispoziia utilizatorilor un numr de comenzi aa cum se poate vedea n cele ce urmeaz: Tema 1: Executai secvena de comenzi i observai efectul lor : SQL> SET BUFER BAFUTIL I TTITLE ' Stat de salarii' BTITLE 'Terminare raport' COLUMN MARCA FORMAT A5 HEADING 'Marca| Angajat' COLUMN NUME FORMAT A12 HEADING 'Nume| Angajat' COLUMN PREN HEADING 'Prenume| Angajat' COLUMN SALAR FORMAT 9999 HEADING 'Salariu' COLUMN ATEL HEADING 'Atelier' FORMAT A7 BREAK ON REPORT ON ATEL SKIP1 COMPUTE SUM OF SALAR ON ATEL COMPUTE SUM OF SALAR ON REPORT SELECT ATEL, MARCA, NUME, PREN, SALAR FROM PERSONAL ORDER BY ATEL; CLEAR BREAKS CLEAR COLUMNS CLEAR COMPUTES Se apas tasta ENTER 3.11.Dicionarul datelor ORACLE Dicionarul datelor Oracle este cea mai important component a SGBD-ului Oracle. El conine toate informaiile despre structura i obiectele bazei de date cum ar fi tabelele, coloanele, utilizatorii, fiierele de date etc. Datele memorate n dicionarul datelor se numesc metadate. Dei el constituie domeniul administratorul bazei de date, datele dicionarului sunt surse de informaii pentru utilizatori i pentru dezvoltatorii de aplicaii. Dicionarul datelor conine dou nivele : nivelul intern care conine toate tabelele de baz

care sunt utilizate de ctre componentele software SGBD si ele nu sunt accesibile utilizatorilor finali. Nivelul extern furnizeaz numeroaselor vederi informaiile accesate de ctre aceste tabele despre obiectele i structurile la diferite nivele n detaliu. 3.11.1. Tabelele dicionarului datelor La instalarea unei baze de date Oracle ntotdeuna se creaz trei utilizatori standard Oracle: SYS: Acesta este proprietarul tabelelor dicionarului de date i vederilor. Acest utilizator are cele mai mari privilegii n mnuirea obiectelor i structurilor bazei de date Oracle i are dreptul de a crea noi utilizatori. SYSTEM: este proprietarul tabelelor utilizate de diferite utilitare cum ar fi SQL*Forms, SQL*Reports etc. Acest utilizator are mai puine privilegii decat SYS. PUBLIC: Acesta este un utilizator dummy al bazei de date Oracle. Toate privilegiile asignate acestui utilizator sunt automat asignate tuturor utilizatorilor cunoscui ai bazei de date. Tabelele i vederile furnizate de ctre dicionarul datelor conin informaii despre: utilizatorii i privilegiile lor; coloanele tabelelor i tipul de date, restricii de integritate, indexi; statistici despre tablele i indexi utilizati pentru optimizare; Privilegiile acordate obiectelor bazei de date; structurile memorate ale bazei de date. Comanda SQL select * from DICT[IONARY]; 3.11.2. Vederile (Views) din dicionarului datelor Nivelul extern al dicionarului datelor furnizeaz utilizatorilor un acces la datele relevante ale utilizatorilor. Acest nivel asigur numeroase vederi (cca 540) care reprezint date privind tabelele ntr-o manier inteligibil. Aceste vederi (views ) pot fi utilizate n interogrile SQL la fel ca i tabelele normale. Vederile furnizate de dicionarul datelor conine trei grupuri de informaii: USER, ALL i DBA. Grupul nume se construiete cu un prefix acordat vederii. Exista asociate sinonime aa cum se prezint n continuare. USER : nregistrrile din vederea USER conin informaii despre obiectele proprietarului care a lansat interogarea SQL (current user) USER TABLES toate tabelele cu numele lor, numrul de coloane, informaia memorat, informaii statistice etc. (TABS) USER CATALOG tabele, vederi i sinonime (CAT) USER COL COMMENTS commentarii pentru coloane; USER CONSTRAINTS definiia restriciilor pentru tabele; USER INDEXES toate informaiile despre indexi create pentru (IND); USER OBJECTS toate obiectele bazei de date aparinnd utilizatorului (OBJ) ........

Cursul nr. 3 - 9 : (extras) Obs : Continutul informational complet se afla in manual.

PARTEA I

Sectiunea I:

LIMBAJUL SQL (Structured Query Language) - ORACLE


1. 2. 3 4. 5. 6. 7. Prezentarea limbajului SQL-ORACE Limbajul de definire a datelor (LDD) Limbajul de manipulare a datelor Limbajul pentru controlul accesului la date (LCD) Interogarea bazelor de date. Implementarea operatorilor relaionali Interogri simple Funcii SQL i funcii agregate SQL

8. Cereri complexe 9. Realizare rapoarte i videoformate(Forms) n SQL

Nota: Pentru interfata utilizator cu platforma ORACLE recomandam utilizarea SQL*Plus. Manualul minimal de utilizare a SQL*Plus se afla in sectiunea a II-a.

FUNDAMENTELE PROGRAMRII N LIMBAJUL SQL - ORACLE Obiective: Prezentarea i modul de lucru cu limbajului SQL; Interogarea bazelor de date i implementarea operatorilor relaionali: Funcii SQL i funcii agregate SQL; Cereri complexe care au ca suport mai multe tabele ; Realizare rapoarte i videoformate(Forms) n SQL.

2.1. Prezentarea limbajului SQL-ORACLE Limbajul SQL (Structured Query Language) este un limbaj standard care poate fi utilizat pentru a defini, interoga, actualiza, i gestiona o baz de date relaional. SQL utilizeaz urmtorii termeni: tabel, linii, coloane, sau termeni echivaleni, relaii, nregistrrii/tupluri, atribute. n acest manual se va folosi: linii/randuri/nregistrri/tupluri i coloane/atribute. O tabel poate avea maxim 254 coloane care pot avea acelai tip de date sau tipuri diferite de date i n care se pot memora domenii de valori. Domeniile posibile sunt: date alfanumerice (iruri), numere i date formatate. SGBD ORACLE ofer urmtoarele tipuri de date: - char (n): date tip caracter n lungime fix (ir), de lungime n caractere. Mrimea maxim pentru n este 255 bytes. Spaiul fizic ocupat este egal cu n. Dac lungimea real a irului este mai mic dect lungimea declarat atunci se completeaz automat irul cu spaii n partea dreapt pan la completarea celor n caractere declarate.

2.2. Limbajul de definire a datelor (LDD) Limbajul de Definire a Datelor (LDD) permite definirea bazei de date (BD) i a obiectelor care compun baza de date. Prin definirea unui obiect al bazei de date n SGBD ORACLE se nelege crearea, modificarea i suprimarea obiectului i pentru realizarea acestui obiectiv, SGBD ORACLE pune la dispoziia utilizatorilor un set de instruciuni/comenzi SQL (CREATE; ALTER; DESCRIBE; DROP), care permit crearea, vizualizarea structurii tabelelor, modificarea i distrugerea obiectelor bazei de date. Schema bazei de date conine o serie de structuri logice de date care aparin unui utilizator al BD i care poart numele acestuia. Un utilizator poate avea o singur schem care va conine numele schemei (adic numele utilizatorului), descrierea tabelelor, vizualizrilor i privilegiilor asociate. Comanda de definire a schemei BD are sintaxa: CREATE SCHEMA AUTHORIZATION nume-schem {comanda CREATE TABLE | comanda CREATE VIEW | comanda GRANT} Tipuri de date n SGBD- ORACLE: SGBD SGBD ORACLE permite memorarea i prelucrarea urmtoarelor tipuri de date:

numerice : NUMBER; FLOAT; DECIMAL; INTEGER; iruri de caractere (alfa-numerice): CHAR; VARCHAR2; LONG; date calendaristice: DATE; Binary Large Object(BLOB).

Fig. 1 Ecran de vizualizare a structurii unei tabele a bazei de date. 2.2.1. Definirea de obiecte n SGBD ORACLE Definirea tabelelor Tabela este acea structur a bazei de date n care se memoreaz datele bazei de date relaionale. Definirea tabelelor include operaiile de creare de tabele noi (comanda CREATE), vizualizarea structurii tabelei (comanda DESCRIBE), modificarea structurii tabelelor existente (comanda ALTER), i tergerea la cererea utilizatorilor a tabelelor (comanda DROP). Crearea unei tabele: Sintaxa generala a comenzii de creare a unei tabele este: CREATE TABLE nume_tabela (nume_coloana1 tip (marime) restricie, nume_coloana 2 tip (marime) restricie, ..., nume_coloana n tip (marime) restricie,....)

Indicarea restriciilor(constrngerilor) la nivel de coloan:


Pentru a indica o restricie la nivel de coloan cnd se creeaz tabela, se introduce restricia pe aceeai linie cu definiia coloanei. Restriciile (constrngerile) acceptate sunt : UNIQUE Foreaz unicitatea pe coloan; NOT NULL Nu accept valori null; PRIMARY KEY Definete coloana ca fiind cheie primar REFERENCES tabela (coloana1, coloana2,...) Definete coloana ca fiind o cheie strina; ON DELETE CASCADE Foreaz tergerea nregistrrilor cnd printele cheilor strine este ters. Poate fi folosit doar cu clauza REFERENCES; DEFAULT Ofer o valoare implicit pentru coloan; CHECK conditie Verific condiia nainte de a accepta data;

Indicarea constrngeri la nivel de tabel:


Cheile primare i cheile externe se pot defini fie la nivel de cmp, fie la nivel de tabel. Dac cheia primar sau cheia extern este compus, trebuie definit la nivel de tabel prin clauzele: PRIMARY KEY (nume_coloana, nume_coloana,...) FOREIGN KEY nume_coloana REFERENCES nume_ tabela (coloana) CHECK (nume_coloana condiie) sau (nume_coloana N (SET OF VALUES)) Pentru a specifica restriciile la nivel de tabel, restriciile se introduc dup ultima definiie a coloanei. Sintaxa general de creare a structurii unei tabele n SQL este de forma: CREATE TABLE <nume_tabela> ( <nume_coloana_1> <tip data > [not null] [unique] [<constrangeri coloana>], ......... ( <nume_coloana_ n> <tip data > [not null] [unique] [<constrangeri coloana>], [<restricii nume_tabela>]);

Verificarea tabelelor create: nainte de crearea unei tabele este necesar s stim: . care sunt atributele unei nregistrri care urmeaz s fie memorate; . care sunt tipurile de date asociate coloanelor; . se va folosi varchar2 sau char; . din ce coloane se construiete cheia primar;

. ce coloane permit (nu permit) valori nule; . ce coloane au (nu au) valori duplicate; . care sunt valorile implicite pentru coloanele care permit memorarea valorii null. Comanda DESCRIBE: Pentru a vizualiza structura unei tabele se utilizeaz comanda DESCRIBE, care are ca efect listarea structurii unei tabele cu toate componentele ei (nume tabel, nume i tip coloane, cheie primar, etc.) i are sintaxa: DESCRIBE < NUME_TABELA>; Exemplu: DESCRIBE PERSONAL; Modificarea structurii unei tabele (Comanda ALTER TABLE). Comanda ALTER TABLE realizeaz modificarea structurii unei tabele, dar nu modific coninutul ei. Aceast comand ( ALTER TABLE) permite: - adugarea (ADD) unei coloane ntr-o tabel existent; - modificarea (MODIFY) coloanelor unei tabele; - specificarea constrngerilor la nivel coloan; - specificarea unei valori implicite pentru o coloan existent; - activarea i dezactivarea (ENABLE/ DISABLE) unor constrngeri; - schimbarea sau tergerea (DROP) cheii primare, a cheii externe; Comanda ALTER TABLE are una din urmatoarele forme: ALTER TABLE nume-tabel ADD (nume-coloan1, ..., nume coloanN); ALTER TABLE nume-tabel MODIFY (nume-coloana1, ..., nume coloanN); Observaie. Putem folosim ALTER TABLE pentru a aduga sau renuna la restriciile definite ntr-o tabel. Constrngerile sunt nregistrate n dicionarul datelor i sunt de forma: nume-coloan numele unei coloane unde este aplicat restricia; NULL or NOT NULL activeaz sau anuleaz dreptul unei coloane de a avea valori nule; UNIQUE fiecare rnd trebuie s aib o valoare distinct pentru coloan; fiecare coloan trebuie s fie declarat NOT NULL, coloana nu are voie s fie PRIMARY KEY PRIMARY KEY specific coloana ca fiind cheie primar; FOREIGN KEY column, column... REFERENCES table column, column... specific coloana ca i cheie strin a coloanei tabelei; CHECK condition seteaz o condiie, coloana trebuie s satisfac aceast condiie pentru a exista n tabel. ntr-o coloan restricia CHECK se poate referi doar la coloana de care restricia aparine. ntr-o tabel, clauza CHECK restricie, se poate referi la coloane multiple.

Restricia FOREIGN KEY/REFERENCES: - respinge INSERT sau UPDATE dac nu exist o valoare corespondent n cheia primar a tabelei; respinge DELETE dac invalideaz restriciile REFERENCES; trebuie s fac referire la o coloan cheie primar sau unic n tabela cheii primare; se va referi la cheia primar a tabelei dac nici o coloan sau grup de coloane nu este specific t n restricie; trebuie s fac referire la o tabel, nu o viziune; nu restricioneaz modul in care celelalte restricii se pot referi la aceeai tabel; necesit coloana cheie primar i coloana restricionat s aib aceleai tipuri de date; poate referi aceeai tabel numit n CREATE TABLE. Cu ajutorul acestei comenzi se pot aduga atribute, sau terge atribute din structura unei tabele. Cnd un atribut este adugat, valorile pentru aceasta sunt NULL, dac data nu este o valoare default specificat n definirea coloanei. Definirea vizualizrilor (Comanda CREATE VIEW...): O vizualizare (view) este o tabel logic relativ la datele coninute n una sau mai multe tabele sau vizualizri. Vizualizarea este definit pornind de la o cerere de interogare de date i fiind o tabel virtual nu solicit o alocare de memorie pentru date. Ea este definit n dicionarul datelor i are caracteristicile unei tabele. Sintaxa general de creare a unei vizualizri este urmtoarea: CREATE VIEW <nume _view > [(lista coloane)] AS <SELECT clause>; Unele comentarii pe tabele Adugarea de comentarii la definiii Pentru aplicaiile care includ numeroase tabele, este util s se adauge comenatrii la definirea tabelelor ori comentarii pentru coloane. Un comentariu poate fi creat prin comanda: COMMENT ON TABLE <nume- tabela> IS <text>; Un comentariu pe o coloana poate fi creat prin comanda: COMMENT ON COLUMN <tabela>.<coloana> IS <text>; Comentariile pe tabele i coloane sunt memorate n dictionarul datelor. Ele pot fi accesate utiliznd vederi din dicionarul datelor prin comenzile USER TAB COMMENTS i USER COL COMMENTS . Observaii: 1. Tabelele se creaz fr date i se populeaza cu date cu ajutorul comenzii INSERT. Dup crearea unei tabele, putem aduga noi coloane, partiii i

restricii de integritate cu ajutorul clauzeii ADD a comenzii ALTER TABLE. Se poate schimba definirea unei coloane existente sau a unei partiii cu ajutorul clauzei MODIFY a comenzii ALTER TABLE. 2. Privilegiile sistemului ORACLE sunt grupate n doua categorii:
- Privilegii de sistem privilegii privind accesul la baza de date i la definitia obiectelor sale. Comanda pentru acordarea privilegiilor de sistem are sintaxa:

GRANT {privilegiu_sistem |role} [,{privilegiu_sistem | role }] TO {utilizator | role | PUBLIC} {,utilizator | role | PUBLIC} [WITH ADMIN OPTION]. 2.3. Limbajul de manipulare a datelor Dup crearea unei tabele se pot efectua operaii de inserare, tergere sau modificare a nregistrrii n aceast tabel. Prin manipularea datelor coninute n baza de date se nelege efectuarea operaiilor de actualizare, modificare i consultare a coninutului bazei de date. SQL ofer patru comenzi care permit actualizarea nregistrrilor, modificarea datelor i consultarea coninutului bazei de date, dupa cum urmeaza: Comanda INSERT ofer posibilitatea adugrii de noi nregistrri ntr-o tabel; Comanda UPDATE asigur modificarea uneia sau mai multor valori dintr-o nregistrare; Comanda DELETE se utilizeaz pentru tergerea unor nregistrri dintr-o tabel; Comanda SELECT permite interogarea obiectelor create cu ajutorul LDD; Cererile Limbajului de Manipulare a Datelor (LMD) pot fi formulate direct prin interfaa SQL*Plus sau pot fi utilizate n utilitarele sistemului SGBD ORACLE. Ele pot fi ncapsulate ntr-un program PL/SQL sau ntr-un program scris n limbajul gazd. n funcie de momentul n care utilizatorul dorete realizarea actualizrilor asupra BD se poate folosi una din comenzile: SET AUTOCOMMIT ON - actualizrile se fac imediat; SET AUTOCOMMIT OFF - schimbrile sunt pstrate ntr-un buffer pn la execuia uneia din comenzile: COMMIT - care permanentizeaz schimbrile efectuate; ROLLBACK determin renunarea la schimbrile realizate. 2.3.1. Adugarea datelor n SQL ( Comenzi INSERT): Instruciunile INSERT se folosesc n operaia de introducere date n baza de date., i sunt de forma: INSERT VALUES, INSERT ..SELECT. Sintaxa general a acestor instruciuni are forma: INSERT INTO nume-tabela (col1, col2, .) VALUES (val1, val2, );

2.3.2. Comanda UPDATE Instruciunea UPDATE este folosit pentru modificarea valorilor din nregistrrile existente. Sintaxa general a acestei comenzi este: UPDATE nume-tabel SET nume-col1 = Val1 [, col2 = Val2,] WHERE conditie-de-cautare; Instruciunea UPDATE verific mai nti condiia de cutare i pentru toate nregistrrile care verific condiia, valoarea corespunztoare este actualizat. 2.3.2.Instruciunea DROP TABLE nume-tabela; Permite tergerea complet a unei tabele dintr-o baz de date, inclusiv indeci ataai. DROP TABLE Facturi-noi; DROP DATABASE nume-baza de date;

2.3.3. Comanda DELETE tergerea (suprimarea) nregistrrilor dintr-o tabel (dar fr a elibera spaiul) se realizeaz cu ajutorul comenzii DELETE, care are urmatoarea sintaxa: DELETE FROM nume-tabel [alias] [WHERE condiie]; 2.3.5. Comanda SELECT Interogarea bazelor de date: I. Interogri simple interogarea datelor coninute ntr-o singur tabel Pentru regsirea informaiilor memorate n baza de date SGBD ORACLE se utilizeaz limbajul de interogare SQL. n cele ce urmeaz ne vom concentra pe interogri simple urmnd ca s se reia discuia mai tarziu pentru interogarile complexe. n SQL o interogare are urmtoarea form (unde componentele din parantezele [ ] sunt opionale, iar Comanda se incheie prin ;). SELECT [distinct] <column(s)>FROM <TABLE>[ WHERE <condition> ] [ order by <column(s) [asc|desc]> ]; a) Selectarea coloanelor Pentru a fi selectate coloanele dintr-o tabela ele sunt specific te prin cheia de selecie. Aceast operaie se mai numete i proiecie. De exemplu, interogarea SELECT Loc, Cod_Dep FROM DEPART; b) Selectarea nregistrrilor

Pn acum am vzut cum se selecteaz atributele (coloanele) unei tabele. Pentru a selecta numai anumite nregistrri care satisfac anumite condiii, aceste condiii se specific prin clauze care se refer la nregistrri. n clauzele de selecie pot aprea operatori de comparaie, operatori logici, sau chiar subinterogari i clauze Examplu: S se listeze funcia i salariile numai salariailor pentru care codul ef proiect (CodSP) este 7698 or 7566 i castig mai mult de 1500: SELECT Funcia, Salar FROM PERSONAL WHERE (CodSP = 7698 or CodSP = 7566) AND Salar > 1500;

c) Accesarea tabelelor altor utilizatori. Presupunem c un utilizator are privilegiile de acces la tabelele altui utilizator. El poate referi aceste tabele n cererile sale. Fie <user> un utilizator SGBD ORACLE i <nume_tabela> o tabela a acestui utilizator. Aceast tabel poate fi accesat de ali utilizatori (privilegiai) cu ajutorul comenzii: SELECT * FROM <user>.<nume_tabela>; Se recomand s se foloseasac un sinonim n loc de <user>.<nume_tabela>. n SGBD ORACLE-SQL un sinonim poate fi creat prin comanda: CREATE SYNONYM <nume> for <user>.<nume_tabela> ; FROM. Sinonimele pot fi

Este posibil s se utilizeze numai <nume> n clauza deasemenea create i pentru tabelele proprii.

d) Operaii i mulimea rezultatelor Uneori este util o combinaie a rezultatelor a dou sau mai multor cereri ntr-un singur rezultat. SQL pune la dispozitie trei seturi de operatori care au acelasi sablon: <interogare 1> <set operator> <interogare 2> Setul de operatori este urmatorul: union [all] - returneaz o tabel care conine toate rndurile care apar fie n rezultatul cererii <interogare 1> fie n cele ale cererii <interogare 2>. Duplicrile de nregistrri sunt automat eliminate, n afara cazului n care se utilizeaz clauza all; intersect returneaz toate nregistrrile care apar n ambele cererii (<interogare 1> i <interogare 2>; minus returneaz toate nregistrrile care apar n rezultatul <interogare 1> dar nu se afla n rezultatul cererii <interogare 2>; e) Operatii asupra sirurilor Pentru a compara coninutul unui atribut cu un sir, trebuie ca irul s fie scris ntre apostroafe.

Exemplu : WHERE LOCATION = DALLAS. mpreun cu operatorii mai pot fi utilizate i dou caractere speciale: % i _ (caracter de subliniere). De exemplu, dac dorim s extragem toate nregistrrile din tabela DEPART care conin dou caractere C n numele departamentului, condiia va fi : WHERE CodDept LIKE %C%C%. Semnul % precizeaz irul care este cutat, chiar dac irul este gol. n contrast semnul _ semnific nlocuirea unui singur caracter. De exemplu condiia : WHERE CodDept LIKE %C_C% arat c cererea se refer numai la un singur caracter care poate s apar ntre cei doi C. Asupra irurilor mai sunt disponibile urmtoarele operaii: upper(<sir>) transform toate lierele din ir n litere mari; lower(<sir>) transform toate lierele din ir n litere mici; initcap(<sir>) transform prima litera din ir ( <sir>) n litera mare. length(<sir>) returneaz lungimea irului; substr(<sir>, n [, m]) extrage m caractere din ir ncepnd cu poziia n; Dac nu se sepcific m se consider sfritul irului Exemplu: substr(DATABASE SYSTEMS, 10, 7) returneaz irul SYSTEMS. f) Funcii agregate Funciile agregate sunt funciile statistice: COUNT, MIN, MAX etc. Ele pot fi utilizate numai asupra valorilor unei coloane. Exemplu: Cte tupluri sunt memorate n tabela PERSONAL? SELECT COUNT(*) FROM PERSONAL; Exeamplu: Cte funcii diferite sunt memorate n tabela PERSONAL? SELECT COUNT(DISTINCT Funcia) FROM PERSONAL; Exemplu : listai salariul minim i maxim: SELECT MIN(Salar), MAX(Salar) FROM PERSONAL; Exemplu: Calculai diferena dintre salriul minim i salariu maxim: SELECT MAX(Salar) - MIN(Salar) FROM PERSONAL; Funcia SUM se aplic numai asupra datelor de tip numeric. Exemplu:: Calculai suma salariilor din departamentul 30: SELECT SUM(Salar) FROM PERSONAL WHERE CodDept = 30;

Funcia AVG calculeaz valoarea medie pentru o coloan de tip numeric: Obs: Funciile AVG, MIN i MAX ignor nregistrrile care au valoare nul, dar funcia COUNT le consider (numr). Procesul de cutare i obinere a datelor i informaiilor dintr-o baz de date se numete interogarea bazei de date. n limbajul SQL formularea unei interogri nseaman redactarea unei fraze SELECT n care se apeleaz un numr de clauze prin care se exprim solicitarea de date dorit. Ne reamintim sintaxa general a unei comenzi SELECT i precizarea c ntr-o Comanda SELECT sunt obligatorii clauzele SELECT, FROM i nume_tabel: SELECT [ALL|DISTINCT] {* | lista de SELECTAT} FROM lista tabele [WHERE condiie] [GROUP BYlista expresii [HAVING condiie]] [ORDER BY {expresie |poziie} [ASC|DECS] [,{expresie|poziie} [ASC |DESC] ]]; g) Grupri n paragraful anterior am vazut cum funciile agregate pot fi utilizate pentru a calcula o valoare pentru o anumit coloan. Deseori se cere gruparea nregistrrilor care au aceleai proprieti i apoi s aplicm funciile agregate pentru o coloan aparinnd unui grup anume. Pentru aceasta, SQL pune la dispoziie clauza: <GROUP BY COLUMN(S)>. Aceast clauz apare dup clauza WHERE i trebuie s se refere la coloanele tabelelor listate n cluaza FROM i are sintaxa: SELECT <column(s)> FROM <table(s)> WHERE <conditi> GROUP BY<grup coloane)> [HAVING <grup condiii>]; Prin acest procedeu se regasesc i se grupeaz acele nregistrri care au aceai valoare pentru <grup coloane>. Agregarea specificat n clauza SELECT este aplicat separat fiecrui grup. Este important ca numai acele coloane care apar n clauza group column(s) pot fi listate far ca funcia de agregare n clauza SELECT. h) Implementarea operatorilor de selecie i proiecie n general o interogare a bazei de date poate fi scris sub forma: SELECT cmp1, cmp2,, ..., cmpn FROM Fis1, Fis2,..., Fism WHERE condiie; n urma execuiei acestei comenzi se obine un rezultat sub forma unei liste afiat pe display, sau a unei tabele, sau a unei tabele temporare. Dac se dorete eliminarea nregistrrilor identice din rezultatul interogrii atunci se utilizeaz n fraza SELECT opiunea DISTINCT i comada de selecie n acest caz devine:

SELECT DISTINC cmp1, cmp2,, ..., campn FROM Fis1, Fis2,..., Fism WHERE condiie; Analiznd efectele clauzelor din Comanda SELECT, remarcm faptul c interogarea corespunde: - unei selecii de nregistrari din tabelele suport ale interogrii, nregistrri care satisfac condiiile de selecie exprimate prin clauza WHERE; - unei proiecii, adic reinerea n rezultatul interogarii numai a cmpurilor specific te n lista de cmpuri ale comenzii SELECT; - unui produs cartezian format din mulimea nregistrrilor coninute n tabelele menionate n clauza FROM (FROM Fis1, Fis2, ..., Fisn); Pentru a redacta ntr-un proiect operaiile de selecie i proiecie folosite n cadrul interogrilor se folosesc notaiile: R1 SELECIE (FURNIZORI, DenF = Furnizor x SA) R2 PROIECIE (R1, Judet) Precizri privind utilizarea operatorilor de selecie i proiecie: - Utilizarea instruciunilor SELECT cu clauza FROM pentru: o Selectarea i listarea integral a unei tabele o Selectarea i listarea numai a anumitor coloane dintr-o tabel o Selectarea i listarea numai anumite linii dintr-o tabel Expresii: O expresie este format din variabile, constante i operatori. Exemplu . Fie baza de date PERSONAL (Nume, Prenume, Data-n, Adresa, Salar,.). In comanda urmatoare se exemplifica conceptul de expresie. SELECT (Prenume + +Nume) WHERE Nume = STAN FROM PERSONAL; Condiii: Condiiile fac posibile interogrile selective, adic permit returnarea numai a acelei submulimi de nregistrri care satisfac condiia specificat. n mod frecvent condiiile sunt exprimate prin clauza WHERE a comenzii SELECT i apar sub forma: WHERE < condiie de cutare> Exemplu: Precizai efectul comenzilor: SQL> SELECT * FROM PERSONAL; (Efect ?) SQL> SELECT * FROM PERSONAL WHERE Nume=Stan; Operatori: Operatori aritmetici: +;

(Efect ?)

-; /; *; modulo(%);

(returneaz restul mpririi)

Exemplu : 5%2=1 sau 6%2=0 n multe cazuri pentru a da o form mai profesional (o form elegant i eficient) a cererilor se utilizeaz conceptul de alias. Spre exemplu s urmrim folosirea n sintaxa unei instruciunii a unui nume-coloan alias. SQL > SELECT Nume, Pre-cost, (Pre-cost*1.25) Pre-vanzare FROM PRODUSE; (Atenie ! Caracterul spaiu dintre atribut i aliasul su este obligatorie) Operatori de comparaie: n algebra relaiilor se pot utiliza operatorii de comparaie. Valori obinute prin evaluarea acestui operator sunt: TRUE; FALSE; UNKNOWN Exemplu. Fie tabela PRODUSE(Nume, Pre-unitar, Pre-vnzare,.), care conine o nregistrare n care Pre-unitar este NULL. Care este semnificaia comenzilor: SQL>SELECT * FROM PRODUSE; SQL> SELECT *FROM PRODUSE WHERE Pre-unitar IS NULL; SQL> SELECT * FROM PRODUSE WHERE Pre-unitar <10000; SQL > SELECT * FROM PRODUSE WHERE Nume LIKE %TABLA; Comanda de mai sus are ca efect listarea tuturor nregistrilor care au n coloana Nume o expresie care conine irul de caractere TABLA; De remarcat urmtoarele detalii:. 1. TABLA% - listeaz toate nregistrarile care n coloana Nume ncepe cu TABLA; 2. LIKE face difereniere ntre literele mari i literele mici.). Operatori de subliniere: Fie tabela : STUDENI (Nume, Iniiala, Prenume, Telefon,.). Precizai semnificaiile comenzilor: 1) SQL> SELECT * FROM STUDENI; 2) SQL >SELECT * FROM STUDENI WHERE Iniiala LIKE C_; 3) SQL> SELECT * FROM STUDENI WHERE Telefon 555_6_6; 4) SQL> SELECT * FROM STUDENI WHERE Telefon 555_6%; Operatori logici: AND; OR; NOT; Exemplu: Fie tabela PERSONAL (Nume, Marca, Vechime, Zile-concediu). Care este semnificaia instruciunii: SQL> SELECT Nume, Vechime, Zile-concediu FROM SALARIATI WHERE Nume LIKE B%ANDZile-concediu >12; Operatori pentru mulimi: UNION i UNION ALL Operatorul UNION implementeaz operaia de reuniune a dou tabele care sunt compatibile. Operatorul UNION ALL realizeaz de asemenea reuniunea a dou tabele,

dar fr eliminarea dublurilor. UNION combin dou sau mai multe tabele. Pentru a realiza operaiunea de UNION, tabelele implicate trebuie s fie compatibile (acelai numr de coloane i coloanele corespondente din acelai domeniu). UNION este precum adunarea (TABELA1+TABELA2) UNION returneaz rezultatele a dou interogri, mai puin nregistrrile duplicate. Sintaxa general a operatorului are una din formele: 1. SQL> SELECT Nume FROM FIS1 UNION SELECT Nume FROM FIS2; Efectul acestei comenzi const n returnarea valorilor cmpului Nume dinstincte din cele dou tabele. 2. SQL > SELECT Nume FROM FIS1 UNION ALL SELECT Nume FROM FIS2;

Aceast comand are ca efect returnarea tuturor valorilor cmpului Nume dinstincte din cele dou liste, fara a elimina duplicatele. Observatii: 1.Prin definiie, rndurile duplicate sunt nlturate din reuniune. 2.Dac opiunea ALL este. inclus, rndurile duplicat sunt pstrate Tema. Care este efectul comenzii de mai jos: SELECT CodTranz,, DenP, Val, DataScadent FROM CONTRACTE WHERE DataScadent < SYSDATE UNION SELECT CodTranz,, DenP, Val, DataScadent FROM CONTRACTE WHERE Val > 10000; Operatorul INTERSECT returneaz numai liniile gsite de ambele interogri: INTERSECIA combin dou tabele i pstreaz doar tabelele comune. Putem considera o propoziie logic de tip AND (s se extrag toate nregistrrile din prima tabel care sunt comune cu nregistrrile din a dou tabele). Operatorul INTERSECT realizeaz intersecia a dou tabele compatibile. Sintaxa comenzii este: SQL> SELECT *FROM FIS1 INTERSECT SELECT * FROM FIS2; Comanda are ca rezultat listarea liniilor comune din tabele FIS1 i FIS2. Exemplu: S se listeze produsele care au o valoare n stoc mai mic de 100 i au fost contractate de cel puin 8 clieni: SELECT CodP, DenP, FROM PRODUSE WHERE Cant < 1000

INTERSECT SELECT CodP, DenP, FROM CONTRACTE GROUP BYCodP HAVING COUNT (*) > 8; Operatorul MINUS returneaz nregistrrile din prima interogare care nu fac parte din a doua interogare. Operatorul MINUS implementeaz operaia de diferen din algebra relaional. Acest operator returneaz doar rndurile ce se afl n prima tabel dar nu i n a doua. O putem considera o INTERSECIE cu propoziia NOT. Considerm aceast operator ca opusul operatorului INTERSECT. Sintaxa comenzii este: SQL> SELECT * FROM FIS1 MINUS SELECT * FROM FIS2; Exemplu : . S se afieze codurile produselor care nu au fost contractate. SELECT CodP FROM PRODUSE MINUS SELECT DISTINCT CodP FROM CONTRACTE; Operatorul BETWEEN Operatorul BETWEEN se utilizeaz pentru definirea intervalelor de valori. Exemplu : S se afieze facturile emise n perioada 1.08.2009 pn n 15.09. 2009. SELECT * FROM FACTURI WHERE DataFact BETWEEN TO_DATE (01/08/09, DD/MM/YY) AND TO_DATE (15/09.09. DD/MM/YY); Acelai rezultat se poate obine i prin comanda echivalent cu cea anterioar: SELECT * FROM FACTURI WHERE DataFact BETWEEN {01/08/09}AND{15/09.09}; Operatorul LIKE: Operatorul LIKE permite compararea unui atribut (expresii) cu un literal utiliznd o masc cu ajutorul semnelor %, _. Exemplu: . Care din lista firmelor din tabela Clieni sunt firme de tip SRL? SELECT * FROM CLIENI WHERE DenCl LIKE %SRL; Operatorul IN: Operatorul IN permite cutarea unei valori ntr-o list.

Exemplu:. Care sunt localitile din judeele Braov i Sibiu SELECT * FROM LOCALITATI WHERE Jud IN (BV, SB); Implementarea operatorului JOIN (operator de compunere): Analiznd cu atenie efectele operatorului produs cartezian observm c obinem o fuziune necondiionat a dou tabele. Dac dorim s extragem din dou tabele numai nregistrrile care care au o proprietate comun atunci folosim operatorul de jonciune. n esen jonciunea este echivalent unui produs cartezian urmat de o selecie. Un operator join reprezint o legatur ntre dou tabele, care au cel puin o coloan comun. Operatorul join permite crearea unei tabele temporare care conine liniile care satisfac condiia de join. Atunci cnd se utilizeaz operatorul join se recomand ca tabela care are linii mai puine s fie a doua n operaia de compunere. Pentru ca durata de execuie a operatorului s fie mai mic atunci indexm aceast tabel dup coloana precizat n compunere. Pentru a manipula datele ntre mai multe tabele se folosete operaia de Jonciune. Operaiile de jonciune lipesc tabelele. Exist urmtoarele tipuri de jonciuni: Jonciuni externe; Jonciuni stnga; Jonciuni dreapta; Echi-jonciunea; Non-echi-jonciunea; Autojonciunea Prin clauza JOIN se poate specifica calea de acces la date. Daca numele atributelor sunt duplicate n cele dou tabele legate, pentru fiecare atribut trebuie s se specifice tabela care l conine. a) Echi-jonciunea (jonciunea echivalent) Tem: a) S se listeze nregistrrile din tabela COMPONENTE care au nregistrri echivalente n tabela COMENZI b) S se listeze toate comenzile care se refer la BICICLETE CARPAI c) S se calculeze suma ncasat din vnzarea biciletelor CARPAI; d) S se genereze factura pe clieni. Non echi- jonctiuni Exemplu: SQL > SELECT O.Nume, O.Cod-C, P.Cod-C, O.Cantitate*P.Pre TOTAL, P.Descriere FROM COMENZI O, COMPONENTE P WHERE O.Cod-Cl >P.Cod-Cl; Jonciuni externe Nu mai combin toate liniile unui tabel cu ale altui tabel i filtreaz numai cele dorite. Exemple: a) SELECT P.Cod_c, P.Denumire, P.Pre O.Nume, O.Cod-C FROM COMPONENTE P

JOIN COMENZI O ON COMENZI.Cod_c =54; Analiz: Rezultatul este format din toate liniile din tabela COMPONENTE mbinate cu liniile specificate din tabela COMENZI n care Cod_c=54; Auto-jonciunea (jonciunea tabelei cu ea insasi) Se utilizez pentru a elimina nregistrrile duble. SELECT F.Cod-C, F. Denumire S. Cod-C, S. Denumire FROM COMPONENTE F, COMPONENTE S WHERE F. Cod-C = S. Cod-C AND F. Denumire < > S. Denumire;

Crearea de scripturi (Macro):


Un script este un set de comenzi SQL salvate ca i un fiier. Scripturile sunt utilizate pentru a stoca interogri sau alte comenzi ce sunt folosite n mod des. Pentru a crea un script este utilizat orice editor de text sau procesor word. Dac este utilizat un procesor word, scriptul se salveaz n mod TEXT dar extensia trebuie s fie SQL. Pentru a crea un un fiier script de la prompterul SQL se introduce comanda EDIT <nume_fiier> unde nume_fiier este numele fiierlui script. Aceasta va porni editorul. Se introduc comenzile SQL necesare ca i cum ar fi introduse n SQL. Se salveaz fiierul cu extensia SQL. Pentru a rula un script se foloseste START < nume_fiier > ca i comanda SQL. Se introduce numele fiierului. Dac fiierul are extensie SQL, nu este necesar ca aceasta s fie scris. Definirea variabilelor n SQL: Pentru a defini o variabil se folosete o comanda care are construcia de forma: ACCEPT variabil PROMPT mesaj. Partea ACCEPT a comenzii permite introducerea unei valori pentru variabil. Partea PROMPT este afiat pe ecran ca i prompt pentru valoarea variabilei. Funcii SQL i funcii agregate SQL: SQL accept urmatoarele tipuri de funcii: funcii totalizatoare, funcii pentru data calendaristic i ora, funcii matematice, funcii de tratare a irului de caractere, funcii diverse, funcii de agregare. Funcii totalizatoare: Fie baza de date: PERSONAL (Marca, Nume, Loc_Munca, Nr_Copii, Salar, Telefon,.) Funcia COUNT returneaz numrul total de linii care respect clauza WHERE Exemple: S se listeze numrul de salariaii care au salariul mai mare dect 600: a) SQL> SELECT COUNT (*) FROM PERSONAL

WHERE SALAR > 600; Rezultat: Ieire: COUNT (*) 4 Funcia SUM returneaz suma tuturor valorilor dintr-o coloan: Exemple: a) S se calculeze salariul total al angajailor: SQL > SELECT SUM (SALAR) TOTAL-SALAR FROM PERSONAL; Se obine rezultatul: TOTAL-SALAR .. 15027 Observaii: Se pot utiliza mai multe operaii de sumare n aceeai comand: Funcia AVG calculeaz valoarea medie a unei coloane: Exemplu: SQL > SELECT AVG (SALAR) SALAR-MEDIU FROM PERSONAL; Rezultat - ieire: SALAR-MEDIU .. 480 Funcia MAX gsete i afieaz valoarea cea mai mare dintr-o coloan: Exemplu: SQL > SELECT MAX (SALAR) TOTAL-SALAR FROM PERSONAL; Rezultat- ieire: MAX(SALAR) .. 850 Observatie: Funcia MAX nu opereaz ntr-o clauza WHERE: Funcia MIN returneaz cea mai mic valoare dintr-o coloan: Exemplu:

SQL > SELECT MIN (SALAR), MAX(Nr-Copii) FROM PERSONAL; Rezultat - ieire: MIN(SALAR) .. 290

MAX(Nr-Copii) 4

Funcia VARIANCE calculeaz i afieaz dispersia valorilor dintr-o coloan: Exemplu: SQL > SELECT VARIANCE (SALAR) FROM PERSONAL; Rezultat- ieire: VARIANCE (SALAR) .. 622.5 Observaie: Funcia VARIANCE se aplic numai valorilor numerice. Funcia STDDEV calculeaz i afieaz abaterea (deviaia) standard: Exemplu: SQL > SELECT STDDEV(SALAR) FROM PERSONAL; Rezultat:-ieire: STDDEV(SALAR) .. 350 Funcii pentru data calendaristic i ora: Fie baza de date: PROIECTE (Nume, Data-Start, Data-Finala, ) a) Funcia ADD-MOUNTHS adaug un numr de luni la data curent; Funcia LAST-DAY afieaz ultima zi a lunii specific te; Funcia MONTHS-BETWEEN afieaz numrul de luni dintre luna X i luna Y; Funcia SYSDATE afieaz ora i data calendaristic a sistemului; Tema : 1. S se adauge 2 luni la data final a proiectului: SQL > SELECT Nume Data-Start, Data_finala Sfarsit ADD-MOUNTHS (Data-Finala,2) FROM PROIECTE;

2. S se afieaze stadiul n care se afl activitile din proiect la data curent (stadiul lucrrilor). SQL > SELECT * FROM PROIECTE WHERE DATA-START > SYSDATE; Funcii matematice: Fie baza de date: NUMERE (A,B), unde A i B sunt numere reale. a) Funcii aritmetice ABS afieaz valoarea absolut din argument Exemplu: SQL > SELECT ABS(A) VAL-ABSOLUTA FROM NUMERE; CEIL - afieaz cel mai mare numr ntreg mai mare sau egal cu argumentul FLOOR - afieaz cel mai mic numr ntreg mai mic sau egal cu argumentul Exemplu: SQL > SELECT B, CEIL(B) FROM NUMERE; b) Funcii trigonometrice : COS, SIN, SINH, TAN, TANH gradele trebuiesc convertite n radiani. Exemplu: SQL > SELECT A, COS(A*0.0174) FROM NUMERE; c) Funcii logaritmice: EXP, LN, LOG Exemplu: SQL > SELECT A, EXP(A) FROM NUMERE; d) Funciile: POWER, SIGN, SQRT Exemplu: SQL > SELECT A, B, POWER(A, B) FROM NUMERE; Funcii de tratare a irului de caractere: a) Funcia CHR (COD) returneaz caracterul echivalent numeric folosit n argumentul funciei; Exemplu: SQL > SELECT COD, CHR(COD)

FROM CARACTERE; Vezi tabela ASCII: COD 67 68 87 CHR(COD) C D W

b) Funcia CONCAT - Concateneaz (lipete) dou iruri Exemplu: SQL > SELECT COCAT (PRENUME, NUME) NUMELE FROM CARACTERE; i) Funcia INITCAP Aceast funcie formateaz irul de caractere dintr-un cuvnt i are ca efect: scrie prima litera din cuvant litera mare i celelalte litere mici. Exemplu: SQL > SELECT PRENUME , INITCAP(PRENUME) FROM CARACTERE; Sir caractere initial ION VICTOR ANDREI Sir caractere final Ion Victor ANDrei

j) Funciile: LOWER i UPPER Aceste funcii au urmtorul efect: formateaz un cuvnt, transforma toate literele din sir n litere mici i respectiv, toate literele din ir n litere mari. e) Funcia REPLACE (arg1, arg2, arg3), unde: arg1 este irul care trebuie cutat, arg2 este cheia de cutare i arg3 este irul de nlocuire. Funcia REPLACE are ca efect inlocuirea sirului cautat cu sirul propus pentru inlocuire. Observaie: Dac al treilea argument lipsete sau este NULL, toate secvenele identice cu cheia de cutare din irul respectiv sunt eliminate. Exemplu: SQL > SELECT NUME REPLACE (NUME, ST) INLOCUIRE FROM CARACTERE; NUME IONESCU CONSTANTIN Funcii diverse: NLOCUIRE IONESCU CONANTIN

USER - returneaz informaii despre sistem (adic numele curent al bazei de date) Exemplu: SQL > SELECT USER FROM CONVERSIE; Funcii de agregare: (Clauzele utilizate n Comanda SELECT) Clauze SQL: WHERE, STARTING WITH, ORDER BY, GROUP BY, HAVING Sintaxa general a instruciunii SELECT este: SELECT [DISTINCT | ALL] {* | Veder..} FROM Tabela [WHERE cANDitie] [GROUP BYexpresie. [HAVING conditie]] [{UNION | UNION ALL}] [ORDER By {expresie}]; a) Clauza WHERE ofer posibilitatea de exprimare a unui filtru de selecie. SGBD ORACLE suport toi operatorii de comparaie (<, =, >, <=, =>), alturi de operatorii logici AND, OR i NOT. Dac este folosit NOT, comparaia ar trebui nchis n paranteze. Clauza STARTING WITH: 1). SQL > SELECT NUME, SUMA, OBS FROM BONURI WHERE NUME STARTING WITH (Ca); Clauza ORDER BY: Pentru a ordona tupluri dup un atribut specificat, trebuie folosit clauza ORDER BY. Tuplurile pot fi ordonate ascendent sau descendent. n mod implicit, ordonarea este ascendent. Pentru a obine o ordonare descendent, este necesar includerea atributului DESC dup numele cmpului n clauza ORDER BY. Urmtoarele instruciuni selcteaz toate atributele i sorteaz dup numele angajatului n secven ascendent. Clauza GROUP BY- permite sumarea unui cmp dup un anumit criteriu: Este folosit de regul cu funcii precum COUNT, AVG, SUM. Returneaz exact un rnd pentru fiecare valoare unic a coloanei utilizate n clauza GROUP BY. Cnd este utilizat, orice atribut folosit trebuie specificat i n propozitia SELECT sau clauza DISTINCT. Funcia este aplicat grupului. 1). SQL > SELECT Departm, AVG(Salar) FROM PERSONAL GROUP BYDepartm;

2). SQL > SELECT Funcia, SUM(Salar) FROM PERSONAL GROUP BYFuncia; 3). SQL > SELECT NUME, SUM(SUMA) FROM BONURI GROUP BYNUME; Clauza HAVING: Clauza HAVING este de asemenea acceptat. Trebuie utilizat cu o clauz de grup i testeaz rezultatele unei funcii de grup. Rndurile sunt raportate doar dac trec condiia n clauza HAVING. Exemple: 1). SQL > SELECT Funcia, COUNT (*) FROM PERSONAL WHERE Sal > 3000 GROUP BYFuncia HAVING COUNT(*) > 10; Atentie! Clauza WHERE nu opereaz cu funcii totalizatoare. 2). SQL > SELECT SECTIE, AVG(SALAR) FROM SALARII GROUP BYSECTIE HAVING AVG(SALAR) < 3800000; Exerciii cu funcii de grup: 1. S se afieze numrul produselor distincte contractate. Rezolvare: SQL > SELECT COUNT (DISTINCT CodP, DenP) FROM CONTRACTE; II. Cereri complexe interogari care au ca suport datele din mai multe tabele: n paragrafele anterioare s-au tratat numai cererile care se refer la o singur tabel. De aceea condiiile din clauza WHERE erau simple comparaii. O facilitate major a bazelor de date relaionale const n combinarea nregistrrilor memorate n diferite tabele pentru a obine informaii mai multe i mai complete. n SQL comanda SELECT este utilizat pentru formularea cererilor din mai multe tabele sub forma: SELECT [distinct] [<alias 1>.]<coloaqna i>, . . . , [<alias j>.]<coloana j> FROM <TABLE 1> [<alias a1>], . . . , <TABLE n> [<alias an>] [WHERE <condition>];

Specificarea alias-urilor tabelelor n clauza FROM este necesar pentru referirea coloanelor care au acelai nume din diferite tabele. De exemplu CodP apare i n tabela PERSONAL i n tabela DEPART. Dac dorim s ne referim la aceste coloane n clauzele WHERE sau n comanda SELECT, un alias al tabelei trebuie specificat i pus n faa numelui coloanei. Se poate utilize i numele tabelei, dar uneori acest nume este prea mare i conduce la o formulare prea lung a cererii. n acest sens vom exemplifica prin prezentarea unor cazuri concrete: Funcii de grup: De multe ori pentru a obine rezultatul unei interogri trebuie s apelam la funciile de grup. Sintaxa general n astfel de cazuri este: SELECT [domeniu] [funcie-agregata(nume-camp) AS alias [lista-selectie] FROM nume-tabela1, nume-tabela2,. GROUP BYcamp-de-agregare [HAVING criteriu-de grupare] [ORDER BY campuri-criteriu {ASC/DESC]]; Exemplu: S se listeze clienii ri platnici care au acumulat o valoare a facturilor neachitate > 20 milioane; SELECT den-client, SUM([Val-neachitata]) AS Total FROM Creante GROUP BYden-client HAVING SUM (Val-neachitate) > 20000000; Relatii de tip Joining: Comparaiile n clauza WHERE sunt utilizate pentru a combina rndurile din tabelele listate n clauza FROM. Exemplu: n tabela PERSONAL numai numrul departamentului este memorat i nu denumirea lui. Dac dorim s regsim numrul i numele departamentului unde lucreaz salariaii vom scrie comanda: SELECT Nume, P.CodDept, D.Nume FROM PERSONAL P, DEPART D WHERE E.P.CodP = D.CodP AND Funcia = Analist; Subinterogri: a) Construirea unei subinterogri: O subinterogare permite s se transmit setul de rezultate al unei interogri la o alt interogare. Fie baza de date formata din tabelele COMPONENTE i COMENZI care au urmatoarea structur: COMPONENTE (Cod_c, Denumire, Pret) COMENZI (Data-C0m, Nume-Cl, Cod-C, Cantitate, Achitat)

Se cere s se extrag din baza de date i s se listeze cmpurile Data-Com, Cod_c, Denumire, Cantitate, Achitat, pentru toate nregistrrile care se refer la BICICLETA CARPATI. SELECT O.Data-Com, O.Cod-C, P. Denumire, O. Cantitate, O. Achitat FROM COMENZI O, COMPONENTE P WHERE O.Cod-C = P.Cod-C AND O.C0d-C = (SELECT Cod-C FROM COMPONENTE WHERE Denumire = Biciclete carpati); Observaie: Pentru a evita erorile din subinterogri trebuie s ne asigurm de unicitatea valorilor memorate n cmpul de cutare. b) Folosirea funciilor totalizatoare n subinterogri: Tem: S se gseasc valoarea medie a unei comenzi: SELECT AVG (O.Cantitate *P.Pret) FROM COMENZI o, COMPONENTE P WHERE O.Cod-C = P.Cod-C; c) Imbricarea subinterogrilor:

Tem: Avem baza de date de mai sus. S se listeze comenzile mai mari dect valoarea medie. SELECT ALL C.Nume, C.Adresa, C.Judet, C. Cod-Postal FROM CLIENTI C WHERE C.Nume IN (SELECT O.NUME FROM COMENZI O, COMPONENTE P WHERE O.Cod-C = P.Cod-C AND O.Cantitate *P.Pret > (SELECT AVG (O.Cantitate *P.Pret) FROM COMENZI O, COMPONENTE P WHERE O.Cod-C = P.Cod-C)); EXEMPLU - TEST: n baza de date a firmei SOFT se memoreaz atributele: Cod_Proiect(N3), Den_Proiect(C30), ID-APrg (N), Nume-APrg(C20), Prenume-APrg(C20), Limbaj-Prg(C15), Data-Angaj(D8), Funcia(C10), Salar(N6), Tip_Proiect(C20), Cod-Etapa(C2), Den_Etapa(C18), Nr-Ore-Etapa(N4), Val-Etapa(N6), Nr-Ore-Proiect(N8), Val-Proiect(N8), Val-Ore-Etapa(N6), Nr_Contract(N4), Cod_Cl(N4), Nume_Client(C25), Cont_Cl(C12), Data-Contract(D8), Termen_predare(D8), Val-Contract(N8). Se cere:

1. Creai i scriei relaiile bazei de date utiliznd metoda prescurtat; Aducei relaiile acestei baze de date n FN3; 2. Trasai diagrama entitate-asociere. 3. Baza de date SOFT este utilizat pentru aplicaii multi-user realizate n SQL. Se cere: 1. S se creeze tabela SALARIATI; 2. S se adauge n tabela SALARIATI nregistrrile de mai jos i s se listeze aceast tabel, sortat dup cmpul Cod_Proiect;

ID-APrg Nume-APrg Prenume-APrg Data -_Angaj Cod- Proiect Limbaj Salar


(C3) (C20) (C20) (D8) (N3) (C15) (N6)

305 101 174 304


578 321

Ionescu Adrian Java 4000 Popescu C++ 2500


Nanu Popa Oana Ion

7/15/98 11/20/04
101 304 VB C++ 2000 3500

Maria
8/26/05 2/25/01

3. S se anuleze tranzacia anterioar i s se elimine fiierul index realizat; 4. S se adauge cmpul Achitat n tabela CONTRACTE i s se memoreze valoarea DA pentru toate nregistrrile din tabel; 5. S se calculeze valoarea medie a CONTRACTELOR i s se listeze toate CONTRACTELE care au valori mai mari dect valoarea medie; 6. S se calculeze valoarea total a tuturor CONTRACTELOR; 7. S se numere cte CONTRACTE au avut valori mai mari dect valoarea medie; 8. Eliminai dublurile din tabela CONTRACTE. 2.4. Limbajul pentru controlul accesului la date (LCD) O tranzacie este o unitate logic de lucru, o secven de comenzi, care trebuie s se execute ca un ntreg pentru a menine consistena bazei de date. De exemplu, un transfer bancar ntre conturile A i B implic att scderea sumei transferate din contul A ct i adugarea acestei sume n contul B. Dac din anumite motive, una din comenzile tranzaciei cade, toate schimbrile generate de comenzile tranzaciei vor fi anulate. O tranzacie const din: - o singur instruciune LDD; - o singur instruciune LCD; - instruciuni LMD care fac schimbri consistente n baza de date.

O tranzacie ncepe dup o comanda COMMIT, dup o comanda ROLLBACK, dup conectarea iniial la SGBD ORACLE sau cnd este executat prima instruciune SQL. O tranzacie se termin dac sistemul cade sau utilizatorul se deconecteaz, dac se dau comenzile COMMIT sau ROLLBACK sau dac se execut comenzi LDD sau LCD. Dup ce se termin o tranzacie, prima instruciune SQL executabil va genera automat nceputul unei noi tranzacii. O comanda COMMIT apare automat cnd se execut o comanda LDD< sau LCD , sau dup o ieire normal din SQL*Plus. O comanda ROLLBACK apare automat dup o ieire anormal din SQL*Plus sau o cdere de sistem. Dac n SQL*Plus se d comanda SET AUTOCOMMIT ON atunci toate modificrile dup comenzile INSERT, UPDATE, DELETE vor fi definitive. Comanda COMMIT este similar operaiei de salvare a unui fiier n MS WORD. Execuia unei comenzi COMMIT implic: - Toate modificrile (INSERT, DELETE, UPDATE) sunt definitive. Comanda se refer numai la schimbrile fcute de ctre utilizatorul care d comanda. - Toate punctele de salvare vor fi terse; - Starea anterioar a datelor este definitiv pierdut; - Toi utilizatorii pot vizualiza rezultatele; - Blocrile asupra nregistrrilor afectate sunt eliberate. Comanda ROLLBACK anuleaz tranzacia n curs i toate modificrile de date fcute dup ultima comand COMMIT. Pentru tranzacii care implic execuia mai multor comenzi SQL sunt necesare puncte de salvare (savepoint). Un punct de salvare poate fi asociat unei comenzi ROLLBACK prin comanda: ROLLBACK [TO nume_punct_salvare]; Punctul de salvare se definete n secvena de comenzi SQL sub forma: SAVEPOINT nume_punct_salvare; Consistena la citire (READ CONSISTENCY). SGBD ORACLE, ca SGBD multiuser, furnizeaz READ CONSISTENCY la nivel de instruciune SQL, adic o singur comand SQL nu poate da rezultate care sunt contradictorii sau inconsistente. READ CONSISTENCY asigur c fiecare utilizator vede datele aa cum existau ele la ultimul COMMIT, nainte s nceap o operaie LMD. Dac asupra bazei se execut o comanda LMD, serverul SGBD ORACLE face o copie a datelor nainte de modificre i o depune n segmentul ROLLBACK. 2.5. Realizarea rapoartelor i videoformatelor (FORMS) 1. Realizarea rapoartelor n SQL

Coninutul unei tabele poate fi listat cu ajutorul comenzii: SELECT * FROM <nume- tabela>;

Rezultatul executrii comenzii SELECT apare ca o list n care numele atributelor tabelei sunt titlurile coloanei i fiecare rnd al listei reprezint o nregistrare. Aceast list poate fi modifict folosind cteva opiuni ce stabilesc variabile de sistem sau modific variabile de sistem existente. O variabil de sistem este o simpl variabil ce este definit pentru sesiunea SQL. Aceasta poate conine doar o valoare i o formatare la un moment dat.

Setarea paginii i mrimii liniei:


Mrimea paginii este setat cu SET PAGESIZE n, unde n este numrul de linii per pagin. Urmtoarea comand va seta pagina la 20 de linii: SQL>SET PAGESIZE 20 Mrimea liniei este setat folosind SET LINESIZE n, unde n este numrul de caractere permise pe o linie. Urmtoarea comand va seta mrimea liniei la 100 caractere: SQL>SET LINESIZE 100 Sunt multe opiuni pentru comanda SET. n HELP-ul sistemului putem examina opiunile comenzii SET. S urmrim acum sintaxa i semnificaia principalelor comenzi utilizate n realizarea rapoartelor n SQL. Editarea titlului tabelului: Pentru a afia o linie de titlu n partea superioar a fiecrei pagini a unui raport se utilizeaz Comanda TTITLE, care are sintaxa: TTITLE pozitie text pozitie text ...... unde: Poziia poate fi: Left, Right, Center, Justified, COL n,ANDSKIP n; Left, Right,ANDCenter sunt poziii relative fa de marginea stng i dreapt; Text poate fi orice ir de caractere ce poate fi folosit ca i titlu. COL n unde n este poziia numrului unei coloane, primul caracter al titlului n coloana n a liniei. Skip n unde n este un integer ce spune SGBD ORACLE cte linii s sar dup printarea unui element. Exemplu. Care este semnificaia comenzii? SQL>TTITLE CENTER LISTA STUDENTI SKIP 2 LEFT AN UNIV. 2008-2009

BTITLE
Complementar lui TTITLE este Comanda BTITLE. Aceast Comanda are aceeai opiune i formatare ca i TTITLE, dar printeaz titlul la sfritul fiecrei pagini.

Editarea capului de tabel: Textul HEADING definete titlul unei coloane. Dac nu este folosit clauza HEADING, titlul default va fi column sau o expresie. Dac textul aferent unei coloane conine spaii sau caractere de punctuaie, acestea trebuie incluse ntre sau .

Spaierea corpului tabelului i linii de sumar:


Cnd este folosit clauza ORDER BY n Comanda SQL> SELECT, rndurile cu aceeai valoare n coloanele ordonate sunt afiate mpreun n output. Acest output poate fi mai util creat folosing comenzile BREAK i COMPUTE aparinnd SQL*Plus pentru a crea subseturi de nregistrri i pentru a aduga spaii sau linii de sumar dup fiecare subset. De exemplu, urmtoarea interogare, fr comenzile BREAK sau COMPUTE: SELECT DEPT, NUME, SAL FROM salariati WHERE SAL < 2500 ORDER BY DEPT; produce urmtorul rezultat neformat: DEPT -----10 10 20 20 30 30 30 30 30 NUME -----SAL ----IONESCU POPESCU 1300 ANCA ALEXA IANCU GEORGESCU VLAD ALEXE MARTIN

2450 800 1100 1600 950 1500 1250 1250

Pentru a face acest raport mai util, vom folosi Comanda BREAK pentru a stabili DEPT ca i coloan break. Prin BREAK poi suprima valori duplicate n DEPT i plasa linii goale sau ncepe o pagin nou ntre departamente. Poi folosi BREAK mpreun cu COMPUTE pentru a calcula liniile de sumar ce conin salariul total pentru fiecare departament i pentru toate departamentele. Suprimarea valorilor duplicate n coloanele BREAK. Comanda BREAK suprim valorile duplicate din default n coloan sau expresia numit. Pentru a suprima valorile duplicate ntr-o coloan specificat ntr-o clauz ORDER BY, se folosete cea mai simpl form a comenzii BREAK.

BREAK ON break column Not: De fiecare dat cnd este specific o coloan sau o expresie ntr-o Comanda BREAK, se folosete clauza ORDER BY pentru a specifica aceeai coloan sau expresie. Dac nu se procedeaz astfel, break-ul poate aparea aleator. Pentru a suprima afiarea departamentelor duplicate n interograre, vom introduce: SQL> BREAK ON DEPT SQL> SELECT DEPT,NUME, SAL 2 FROM salariati 3 WHERE SAL < 2500 4 ORDER BY DEPT; SQL*Pus afieaz urmtorul output: DEPT -----10 20 30 NUME -----SAL ----IONESCU POPESCU 1300 ANCA ALEXA 1100 IANCU GEORGESCU 950 VLAD 1500 ALEXE 1250 MARTIN

2450 800 1600

1250

Inserarea spaiului cnd se schimb valoarea unei coloane break:


Linii blank pot fi inserate sau trecute la o nou pagin de fiecare dat cnd valoarea se schimb n coloana break. Pentru a insera n linii goale, se folosete urmtoarea form a comenzii BREAK: BREAK ON break_column SKIP n Pentru a sri la o nou pagin, se folosete urmtoarea form a comenzii: BREAK ON break_column SKIP PAGE Exemplu: Pentru a plasa o linie goal ntre departamente, se folosete Comanda: SQL> BREAK ON DEPT SKIP 1 Rulnd acum Comanda: SQL> SELECT DEPT, NUME, SAL 2 ORDER BY DEPT; SQL*Plus afieaz urmtorul rezultat: DEPT NUME SAL --------------10 IONESCU

FROM salariati WHERE SAL < 2500

2450

20 30

POPESCU 1300 ANCA ALEXA 1100 IANCU GEORGESCU 950 VLAD 1500 ALEXE 1250 MARTIN

800 1600

1250

Dac dorim s inserm linii goale sau pagini goale dup fiecare rnd folosim urmtoarea Comanda pentru a srii n linii: BREAK ON ROW SKIP n Folosim urmtoarea Comanda pentru a sri un numr definit de linii ce formeaz o pagin: BREAK ON ROW SKIP PAGE Not: SKIP PAGE sare doar numrul de linii definite s fie o pagin. E posibil ca acestea s nu conin o pagin ntreag.

Tehnica folosirii spaiilor multiple


S presupunem c avem mai mult de o coloan n clauza ORDER BY i dorim s inserm un spaiu cnd valoarea fiecrei coloane se schimb. Fiecare Comanda BREAK inserat nlocuiete pe cea anterioar. Dac dorim s schimbm diferite tehnici de spaiere ntr-un raport dup ce valoarea se schimb trebuie specificate coloane multiple i aciuni ntr-o singur comanda BREAK. Exemplu: Avem dou coloane de tip BREAK ntr-o cerere: 1 SELECT DEPT, FUNCTIE, NUME, SAL FROM salariati WHERE SAL < 2500 2 ORDER BY DEPT, FUNCTIE; Acum, pentru a sri 3 linii cnd valoarea DEPT se schimb i o linie cnd valoarea FUNCTIE se schimb, se utilizeaz comanda: SQL> BREAK ON DEPT SKIP 3 ON FUNCTIE SKIP 1 ; Rulnd din nou cererea de mai sus rezult: DEPT ------10 FUNCTIA -------------Programator Sef proiect Programator NUME -------IONESCU POPESCU ANCA ALEXA IANCU SAL -----300 2450 800 1100 950

20

30

Programator

Analisti

GEORGESCU VLAD ALEXE MARTIN

1600 1500 1250 1250

Afiarea i tergerea definiiilor BREAK


Se poate lista actualul break prin folosirea comenzii BREAK fr nicio clauz. BREAK Se poate anula actualul break prin Comanda CLEAR cu clauza BREAK CLEAR BREAKS Comanda CLEAR BREAKS se poate plasa la nceputul fiecrui fiier de comand pentru a ne asigura de faptul c anterioarele comenzi BREAK nu vor afecta interogarea ce o rulm n fiierul dat.

Inserarea liniilor de sumar cnd valoarea unei coloane break se schimb.


Dac rndurile unui raport sunt organizate n subseturi cu Comanda BREAK, se pot realiza diverse inserri n rndurile fiecrui subset. Acest lucru se poate realiza cu funcii ale SQL*Plus. Se pot folosi BREAK i COMPUTE n urmtoarea form: BREAK ON break_column COMPUTE funcion OF column, column, column ... ON break_column Pot fi incluse multiple break-uri de coloan i aciuni precum srirea unor linii n comanda BREAK, atta timp ct coloana numit dup ON n comanda COMPUTE apare de asemenea i n comanda BREAK dup ON. Pentru a include coloane multiple de tip break impreun cu comanda COMPUTE, se utilizeaz comenzile n urmtoarea form: BREAK ON break_column_1 SKIP PAGE ON break_column_2 SKIP 1 COMPUTE funcion OF column column column ... ON break_column_2 Comanda COMPUTE nu are efect dac nu corespunde comenzii BREAK. Se poate realiza COMPUTE la numrul coloanei sau n cazuri certe la toate tipurile de coloane. Urmtoarele tabele afieaz funciile de calcul i efectele acestora. Funcia Efect SUM suma valorilor din coloan MIN minimul valorilor din coloan MAX maximul valorilor din coloan AVG medium valorilor din coloan STD deviaia stANDard a valorilor din coloan VAR variaia valorilor din coloan COUNT numrul valorilor not null din coloan NUM numrul de rnduri din coloan Funcia specificat n comanda COMPUTE se aplic tuturor coloanelor introduse dup OFF i nainte de ON. Valorile cumulate (nsumate) vor fi scrise pe o linie separat cnd

valoarea coloanei de tip break se schimb. Etichetele pentru valorile adunate apar n prima coloan. Dac folosim COMPUTE pe prima coloan, ar trebui creat o coloan fictiv pentru etichete folosind comanda COLUMN. Altfel eticheta nu va fi afiat. Toate funciile COMPUTE n afar de SUM ignor valorile null. Pentru a aduna totalul SAL pe departament, nti listm definiia curent BREAK ON: SQL> BREAK ON DEPT SKIP 2 ON FUNCTIE SKIP 1; Apoi introducem urmtoarea Comanda COMPUTE i rulm interogarea: SQL> COMPUTE SUM( SAL) DEPT SELECT DEPT, FUNCTIE, NUME, SAL 2 FROM salariati WHERE SAL < 2500 ORDER BY DEPT, FUNCTIE; SQL*Plus afieaz urmtorul output: DEPT FUNCTIA -------------------10 Programator Sef proiect ******** sum 20 ********

NUME -------IONESCU POPESCU ********

SAL -----300 2450

****** 3750 800 1100 ******* 1900 950 1600 1500 1250 1250

Programator

ANCA ALEXA ********

******** sum 30

********

Programator Analist

IANCU GEORGESCU VLAD ALEXE MARTIN ******** ****** 6550

******* Sum

********

Editarea liniilor de sumar la sfritul raportului: Se pot calcula i afia linii de sumar bazate pe valorile unei coloane folosind BREAK i COMPUTE n urmtoarele forme: BREAK ON REPORT COMPUTE funcion OF column, column, column... ON REPORT Pentru a calcula i afia totalul salariilor pentru toi agenii de vnzrii, nti introducem urmtorul BREAK i COMPUTE: SQL> BREAK ON REPORT; SQL> COMPUTE SUM OF SAL ON REPORT;

Apoi introducem i rulm o nou interogare SQL> SELECT NUME, SAL FROM salarii WHERE Funcia = 'Analist'; SQL*Plus afieaz rezultatele: NUME --------GEORGESCU VLAD ALEXE MARTIN ******** sum SAL -----1600 1500 1250 1250 -----5600

Efectuarea calculelor: COMPUTE


Pot fi anulate toate definiiile de tip COMPUTE prin introducerea comenzii CLEAR cu clauza COMPUTE. Pentru a anula definiiile COMPUTE i BREAK , se utilizeaz comenzile: SQL> CLEAR BREAKS SQL> CLEAR COMPUTES Este indicat s plasm comenzile CLEAR BREAKS i CLEAR COMPUTE la nceputul fiecrui fiier de comenzi pentru a ne asigura de faptul c anterioarele comenzi COMPUTE i BREAK nu afecteaz fiierul curent. Tema nr.1: Executai secvena de comenzi i observai efectul lor: SQL> SET BUFFER BAFUTIL I TTITLE ' Stat de salarii' BTITLE 'Terminare raport' COLUMN MARCA FORMAT A5 HEADING 'Marca| Angajat' COLUMN NUME FORMAT A12 HEADING 'Nume| Angajat' COLUMN PREN HEADING 'Prenume| Angajat' COLUMN SALAR FORMAT 9999 HEADING 'Salariu' COLUMN ATEL HEADING 'Atelier' FORMAT A7 BREAK ON REPORT ON ATEL SKIP1 COMPUTE SUM OF SALAR ON ATEL COMPUTE SUM OF SALAR ON REPORT SELECT ATEL, MARCA, NUME, PREN, SALAR

FROM PERSONAL ORDER BY ATEL; CLEAR BREAKS CLEAR COLUMNS CLEAR COMPUTES Se pasa tasta ENTER SAVE PROG1 (Pentru a salva bufferul ntr-un fier cu numele PROG1) START PROG1 (Pentru a rula programul)

2.5.2. Utilizarea video formatelor n SQL (SQL FORMS) Vederi (Views): In SGBD ORACLE comanda SQL pentru crearea unei tabele virtuale (vedere/view) este de forma: create [or replace] view <view-name> [(<column(s)>)] as <SELECT-statement> [with check option [constraint <name>]]; Opional se poate folosi clauza replace dac exista deja numele coloanei coloanelor n vedere. Daca <column(s)> nu sunt specificate n definiia view, coloanele vor avea aceleai nume cu cele listate n comanda SELECT. Exemplu:: Urmtoarea vedere conine numele, funcia i salariu annual al salariaiilor care lucreaz n departamentul 20: Create view DEPT20 as SELECT ENAME, JOB, SAL_12 ANNUAL SALARY FROM EMP WHERE DEPTNO = 20; n instruciunea SELECT aliasul coloanei ANNUAL SALARY este specificat pentru expresia SAL_12 i acest alias este dat prin view. O alternativ la aceast formulare poate fi: CREATE VIEW DEPT20 (ENAME, JOB, ANNUAL SALARY) as SELECT ENAME, JOB, SAL _ 12 FROM EMP WHERE DEPTNO = 20; O vedere poate fi utilizat n acelai mod ca o tabel, adic, rndurile pot fi regsite dintro vedere, sau aceste rnduri pot fi modificate. O vedere este evaluat din nou de fiecare dat cnd este accesat. n SGBD ORACLE SQL nu sunt permise operaiile de inserare, actualizare sau tergere dac se utilizeaz la definirea vederi urmtorii constructori: Joins Funcii de agregare ca: sum, min, max etc. Operatorii (in, any, all)sau exists n subinterogari; clauzele group sau distinct .

O vedere poate fi tears prin Comanda <view-name>. Structura platformei SGBD ORACLE DEVELOPER : Pentru dezvoltarea de aplicaii informaice platforma SGBD ORACLE DEVELOPER pune la dispoziie urmtoarele utilitare: - FORMS DEVELOPER sau SQL*FORMS; - PROJECT BULIDER; - REPORTS DEVELOPER sau SQL*REPORTS; - GRAPHICS BUILDER sau SQL*GRAPHICS; - PROCEDURE BUILDER (creare aplicaii client-server cu PL/SQL); - TRANSLATION BUILDER (integrare de aplicaii construite n diferite medii de programare specifice platformei SGBD ORACLE); - SCHEMA BUILDER (actualizarea i redefinirea structurii BD); - QUERY BUILDER (interogare obiecte BD). 1. Prezentarea FORMS DEVELOPER sau SQL*FORMS: Structura utilitarului: - Form Builder (creare VF); - Form Compiler (creare fiiere executabile); - Form Runtime (rulare VF). Form Builder: Conine 8 submeniuri prin care se pot proiecta i dezvolta aplicaii cu BD: ORACLE Forms Builder Nume aplicatie

File

Edit

View

Navigator

Program

Tools

Windows

Help

Modulele unui VF create astfel, pot fi salvate att n fiiere ct i n BD curent, sub forma urmtoarelor tipuri de fiiere: Tip modul FORM Tip extensie modul .FMB .FMX .FMT .MMB .MMX .MMT .PLL .PLX Tip format fiier Binar Executabil Text Binar Executabil Text Binar Executabil

MENU

PL/SQL LIBRARY

.PLD

Text

Cu FORMS BUILDER se pot defini i rula patru tipuri distincte de VF, i anume: Single Block Form; Master/Detail Form; Single block Form cu cmpuri de cutare; Master/Dtail Form cu cmpuri de cutare.

SGBD ORACLE ofer metode mai elegante i eficiente pentru introducerea de date, vizualizarea sau modificarea datelor din una sau mai multe tabele, prin utilizarea VIDEO FORMATELOR (SQL FORMS). Prin SQL FORMS se pot vizualiza datele pe ecran sau se pot introduce date de la tastatur. Elementele unui FORMS sunt: - Pagina (Ecranul unul sau mai multe); - Blocul (O pagin are unul sau mai multe blocuri. Fiecare bloc are un nume. ntr-un bloc se afieaz sau se introduc date numai dintr-o tabel); - Zona (Un bloc e format din una sau mai multe zone. O zon poate fi format dintr-un text, sau dintr-o coloan (spaiu de afiare/introducere de valori coloan) sau text + coloan. Deci, ZONA: Structura unui VF: Blocul; Elemente; CANVAS (suprafaa n care sunt aezate listele de valori, grafice, vizualizate elemente, etc.); Fereastra; Frame; Uniti de program; Trigger; Alte obiecte. A) Operaii asupra SQL FORMS: a) Definirea structurii SQL- FORMS; Compilarea SQL-FORMS (IAG- utilitar de complilare a videoformatului); Execuia SQL-FORMS (RUN FORMS). text; coloan; text + coloan.

b)

Modificarea structurii SQL- FORMS; Recompilarea structurii; Execuia SQL- FORMS.

- Definirea structurii SQL- FORMS se face cu utilitarul SQL- FORMS; Pentru a rula acest utilitar kernelul trebuie s fie ncrcat n memorie. - Se tasteaz: SQL> SQLFORMS; Pentru a accepta numele i parola se apas tasta END. - Modul de lucru este de tip asistat; - Exist la dispoziie un sistem de meniuri; - n modul de lucru asistat se utilizeaz taste sau combinaii de taste, fiecare din acestea avnd o anumit semnificaie, adic lanseaz o anumit operaie; - Prin tastarea lui F8 se obine semnificaia tastelor din SQL- FORMS. B) Semnificaia tastelor funcionale n SQLFORMS: Tab - parcurgerea opiunilor nainte (sau ENTER); Sgeat sus - parcurgerea opiunilor de sus n jos; Sgeat jos - parcurgerea opiunilor de jos n sus; SHIFT +TAB - parcurgerea opiunilor napoi. Acionarea unei opiuni se face tastnd tasta F1. Meniu END

F1

Meniu 1

F1

Meniu 2

Crearea unui videoformat:

Urmarea execuiei comenzii:


SQL> SQLFORMS; apare n ecranul principal, denumit OBJECT NAVIGATOR, o fereastr care poate fi structurat n ase seciuni: FORMS; MENUS;

PL/SQL LIBRARIES (Bibliotecile PL/SQL); OBJECT LIBRARIES (Biblioteca de obiecte); BUIT-IN PACKAGE (Lista pachetelor PL/SQL); DATABASE OBJECT (Obiectele bazei de date).

Modificarea VF a) Introducerea de noi blocuri; b) tergerea de blocuri; c) Modificare bloc: 1. introducere texte noi, 2. corectare texte, 3. modificare loc/zone, 4. tergere zone, 5. introducere de noi zone, 6. trasare de linii sau chenare. d) n CHOOSE BLOCK se d un nume i se alege opiunea DEFAULT; e) Se face cu DROP (din CHOOSE BLOCK); Observaie: ntr-un VF care are mai multe blocuri, pentru a sri de la un bloc la altul se utilizeaz PgUp i PgDn. Oricare din operaiile de la C) se fac numai n cadrul unui bloc, chiar dac pe ecran sunt afiate mai multe blocuri. c1 - tastez ce doresc n locul unde vreau s nceap textul. c2 - intru pe text i corectez. Tasta DEL terge caracterul indicat de cursor.

Cursul nr. 10-12 : (extras) Obs : Continutul informational complet se afla in manual.

PARTEA a II-a

Sectiunea I

LIMBAJUL DE PROGRAMARE PL/SQL


1. Introducere n limbajul PL/SQL 2. Structura unui bloc de baz PL/SQL 3. Declararea variabilelor 4. Elemente de limbaj 5. Instruciuni PL/SQL 6. Gestiunea cursorului n PL/SQL 7. Subprograme PL/SQL 8. Pachete 9. Declanatori (triggeri)
10.Gestiunea erorilor

11. Abordarea orientat obiect n PL/SQL

4.1 INTRODUCERE N LIMBAJUL PL/SQL


n rezumat, obiectivele majore ale lui PL/SQL sunt: creterea expresivitii limbajului SQL; prelucrarea rezultatului unei cereri n mod orientat pe nregistrare; optimizarea combinaiilor de instruciuni SQL; dezvoltarea de programe modulare de aplicaii modulare cu BD; reutilizarea codului program i reducerea costului de ntreinere i de schimbare a aplicaiilor. Denumirea PL/SQL provine de la Procedural Language extensie a limbajului SQL. Limbajul PL/SQL ofer un mediu robust de programare care permite programarea procedural cu tehnici de programare orientat pe obiect, cum ar fi ncapsularea, ascunderea informaiei i rescrierea funciilor. PL/SQL este o extensie procedural a limbajului SQL. PL/SQL este un limbaj de acces la datele stocate n baze de date relaionale ( BDR), care permite gruparea unei

mulimi de comenzi ntr-un bloc unic de tratare a datelor. PL/SQL include instruciuni SQL pentru manipularea datelor i instruciuni pentru gestionarea lor. Elemente din SQL acceptate de PL/SQL sunt: - instruciuni pentru manipularea datelor : INSERT, SELECT, UPDATE , DELETE; - instruciuni pentru prelucrarea tranzaciei (secvena SQL care este tratat ca o unitate) COMMIT, ROLLBACK, SAVE-POINT. - Funciile : toate funciile SQL care sunt utilizate n instruciunile specifice SQL. - Predicatele SQL (condiiile din clauza WHERE , toi operatorii BETWEEN, IN, IS, NULL, LIKE). PL/SQL are un numr de instruciuni proprii: BEGIN, END, DECLARE, atribuire, DECLARE. CURSOR, OPEN, FETCH, CLOSE, EXCEPTION, RAISE, EXCEPTION_INIT, IFTHEN..ELSE, LOOP, GO TO , NULL, EXIT. n SQL exist comenzi care nu pot fi utilizate direct n PL/SQL, dar pot fi utilizate indirect prin intermediul pachetelor (package): CREATE, ALTER, DROP, GRANT, REVOKE. Comenzile de definire a datelor CREATE TABLE nu sunt permise n PL/SQL deoarece codul PL/SQL este compilat i nu poate s se refere la obiecte care nu exist n momentul compilrii. In fig. 1 se prezint o imagine sugestiv privind definirea limbajului PL/SQL.

Fig. 1. Structura limbajului PL/SQL Faciliti PL/SQL: PL/SQL ofer construcii procedurale cum ar fi variabile, constante i tipuri. Limbajul ofer construcii selective i iterative construciilor SQL. Avantajele majore ale folosirii PL/SQL sunt: - integrarea comenzilor de baz SQL; - definirea i gestiunea blocurilor de instruciuni; - gestiunea variabilelor i a constantelor; - gestiunea cursoarelor explicite i implicite; - definirea subprogramelor; - definirea pachetelor; - utilizarea structurilor de control fundamentale; - detectarea i gestiunea erorilor de execuie i a situaiilor excepionale. PL/SQL este necesar pentru a construi aplicaii cu baze de date care includ programarea logic, construcii secveniale i construcii SQL. Folosind limbajul PL/SQL se pot construi aplicaii care pot fi actualizate n timp. PL/SQL mbin puterea de

manipulare a datelor oferit de SQL , cu puterea de prelucrare a datelor oferit de limbajele procedurale.

4.2 Structura unui bloc de baz PL/SQL Construcia de baz n PL/SQL este blocul. PL/SQL este un limbaj structurat pe blocuri. Un bloc este o unitate de program care are un nume i care poate fi imbricat (adic un bloc poate conine mai multe blocuri). Blocurile conin proceduri, funcii sau pachete care au un nume. Un bloc are o seciune de declaraii (seciune opional), o parte care conine instruciuni PL/SQL i o parte opional de tratare a erorilor. Structura unui bloc este urmtoarea ( coninutul din parantezele [] este opional): [<Block header>] [declare <Constants> <Variables> <Cursors> <User defined exceptions>] begin <PL/SQL statements> [exception <Exception handling>] end; n partea de nceput a blocului (header) se specific dac blocul este o procedur, o funcie sau un pachet. Dac nu se specific headerul atunci blocul se numete bloc anonim PL/SQL. Fiecare bloc PL/SQL conine instruciuni PL/SQL. Aceste blocuri pot fi imbricate la fel ca i blocurile din limbajele convenionale de programare. Scopul variabilelor declarate este analog cu scopul variabilelor din limbajele de programare C sau Pascal. Un bloc const dintr-o mulime de construcii SQL i/sau PL/SQL.Un bloc PL/SQL const din 3 seciuni: Declaraii (opional): aceast seciune ncepe cu cuvntul cheie DECLARE i se ncheie cnd ncepe seciunea cu cod executabil; Cod executabil (obligatoriu): aceast seciune ncepe cu cuvntul cheie BEGIN i se sfrete cu END. Dup cuvntul cheie END trebuie pus semnul de punctuaie punct i virgul; Tratarea excepiilor (opional): seciunea de tratare a excepiei este inclus n partea de cod executabil i ncepe cu cuvntul cheie EXCEPTION. Seciune Descriere Declaraii Conine declaraii de variabile, constante, cursoare i excepii (DECLARE) definite de user care sunt referite n seciunile de cod executabil i excepie. Execuie Conine construcii SQL care caut date n baza de date i (BEGIN...END) construcii PL/SQL pentru a manipula datele din bloc. Excepie Specific ce aciuni trebuie efectuate cnd sunt ntlnite erori sau (EXCEPTION) condiii anormale n seciunea de cod executabil.

Un bloc de programe PL/SQL poate conine un numr de instruciuni SQL combinat cu: - instruciuni de atribuire; - instruciuni alternative (IF); - instruciuni repetitive (FOR, WHILE) specifice PL/SQL. Programul PL/SQL conine mai multe blocuri care pot fi separate sau coninute unul intr-altul. Exist 3 tipuri de blocuri: Blocuri anonime: acestea sunt blocuri PL/SQL care sunt definite n cadrul unei aplicaii i nu au nume; Proceduri: acestea sunt blocuri PL/SQL care au un nume, au parametri de intrare, dar nu au parametri de ieire explicii; Funcii: acestea sunt blocuri PL/SQL care au un nume, au parametri de intrare i tot timpul returneaz o valoare. Exemple de blocuri scrise n PL/SQL: 1. Sintaxa blocurilor anonime: [DECLARE Declarate variabile] BEGIN Cod program [EXCEPTION Cod tratare erori] END; 2. Sintaxa pentru definirea unei funcii: FUNCTION nume [(lista_argumente)] RETURN tip_data {IS,AS} Declarare variabile BEGIN Cod program [EXCEPTION Cod tratare erori] END; 3. Blocuri imbricate: -- blocuri imbricate DECLARE error_flag BOOLEAN :=false; BEGIN DBMS_OUTPUT.PUT_LINE ('NUMARAM DE LA 100 LA 1000.'); DECLARE HUNDREDS_COUNTER NUMBER (1,-2); BEGIN HUNDREDS_COUNTER := 100; LOOP DBMS_OUTPUT.PUT_LINE (HUNDREDS_COUNTER);

HUNDREDS_COUNTER := HUNDREDS_COUNTER + 100; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('ACEASTA ESTE VALOAREA MAXIMA GASITA'); END; IF error_flag THEN DBMS_OUTPUT.PUT_LINE ('NU POT NUMARA ASA MULT'); ELSE DBMS_OUTPUT.PUT_LINE ('DONE'); END IF; END; / 3. Sintaxa pentru declararea unei proceduri: PROCEDURE nume [(list_argumente)] {IS,AS} BEGIN Cod program [EXCEPTION cod tratare erori] END; Exemplu de bloc procedur: PROCEDURE alfa (a1 IN OUT NUMBER, a2 IN OUT NUMBER ) IS temp_a NUMBER; BEGIN temp_a := a1; a1 := a2; a2 := temp_a; END; Un bloc de programe PL/SQL poate conine un numr de instruciuni SQL combinat cu: instruciuni de atribuire; instruciuni alternative (IF); instruciuni repetitive (FOR, WHILE) specifice PL/SQL. 4.3 Declararea variabilelor Limbajul PL/SQL lucreaz cu un numr de tipuri de date care pot fi grupate n: date de tip scalar, date de tip obiect, nregistrri i pointeri. O variabil de tip scalar este o variabil care nu se obine din combinarea altor variabile. Acest tip de dat se folosete pentru a construi tipuri de date complexe cum ar fi nregistrrile i tablourile (arrays). PL/SQL lucreaz cu urmtoarele tipuri de date: Tip dat VARCHAR2 CHAR NUMBER BINARY_INTEGER Semnificaie Variabil, sir caractere cu lungime variabil Variabil, sir caractere cu lungime fix Numr, cu lungime fix Valori ntregi

DATE BOOLEAN

Date calendaristice Valori TRUE/FALSE

Variabilele pot avea orice tip de dat SQL, cum ar fi CHAR, DATE, sau NUMBER, sau un tip de dat PL/SQL cum ar fi BOOLEAN sau PLS_INTEGER. Dup fiecare declaraie se pune punct i virgul. Constantele, variabilele, cursorii i excepiile utilizate n blocul PL/SQL trebuie s fie declarate n seciunea de declarare a blocului. Clauza COSTANT arat c o valoare alocat la o variabil nu poate fi schimbat (variabila devine constant). 4.4 Instruciuni PL/SQL Instruciunile PL/SQL controleaz fluxul execuiei unui program PL/SQL. n cadrul limbajului PL/SQL distingem urmtoarele tipuri de instruciuni: instruciuni de atribuire (:=). Instruciuni iterative: LOOP, WHILE, FOR. Instruciuni condiionale : IF; Instruciuni de salt : GO TO , EXIT. Instruciunea vid : NULL. Operatorul atribuire n PL/SQL este := iar n SQL este =. Exemplu: DECLARE data1 DATE; BEGIN data1 := TO_DATE(29-DEC-2009,DD-MON-YYYY); END; / Fluxul secvenial de execuie a comenzilor unui program PL/SQL poate fi modificat cu ajutorul structurilor de comenzi de control: IF, LOOP, FOR, WHILE, GOTO, EXIT. Sintaxa comenzii IF IF condiie THEN Instruciuni; [ELSIF conditie THEN Instruciuni ;] [ELSE instruciuni;] END IF; Exemplu: IF (A>=100) THEN IF ! (B=10) THEN DBMS_OUTPUT.PUT_LINE (B nu este egal cu 10); ELSIF B<> 11 THEN DBMS_OUTPUT.PUT_LINE (B nu este egal cu 11);

ELSE DBMS_OUTPUT.PUT_LINE (B diferit de 10, 11); END IF; END IF; n cadrul unui program scris n limbajul PL/SQL se pot distinge mai multe structuri de control: 1. Instruciunea IF are 3 forme: IF-THEN, IF-THEN-ELSE i IF-THEN-ELSIF. a. Sintaxa pentru instruciunea IF-THEN: IF <condiii> THEN <instruciuni> END IF; Exemplu: DECLARE sales NUMBER(8,2) := 12100; quota NUMBER(8,2) := 10000; bonus NUMBER(6,2); emp_id NUMBER(6) := 120; BEGIN IF sales > (quota + 200) THEN bonus := (sales - quota)/4; ELSE bonus := 50; END IF; UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id; END; b. Sintaxa pentru instruciunea IF...THEN...ELSE IF <condiii> THEN <instruciuni care se execut dac condiii = TRUE> ELSE <instruciuni care se execut dac condiii = FALSE> END IF; Sintaxa pentru instruciunea IF ... ELSIF

c.

IF <condiii1> THEN <instruciuni care se execut dac condiii1= TRUE> ELSIF <condiii2 > THEN <instruciuni care se execut dac condiii2= TRUE>

ELSIF <condiii3 > THEN <instruciuni care se execut dac condiii3= TRUE> ..... ELSE <instruciuni care se execut dac condiii = FALSE> END IF; 2. Instruciunea CASE Pentru a nuana salturile n secvena de program n funcie de valoarea condiiei se folosete instruciunea CASE, care are sintaxa: CASE variabil WHEN A THEN Instruciuni WHEN B THEN Instruciuni WHEN C THEN Instruciuni ..... ENDCASE; 3. Instruciunea GO TO Instruciunea GO TO asigur saltul necondiionat la instruciunea cu eticheta indicat. Scopul acestei instruciuni este de a asigura saltul (ieirea) dintr-un subloc, dintr-un ciclu, dintr-o instruciune IF. Sintaxa acestei instruciuni este: GO TO etichet; Exemplu: DECLARE I POSITIVE:=1; Max_loop CONSTANT POSITIV :=100; BEGIN I := 1; LOOP I :=i+1; EXIT WHEN I > max_loop; GOTO mai_mult; END IF; END LOOP; << mai_mult>> I :=1;

END; 4. Instruciunea vid: NULL Aceast instruciune se utilizeaz pentru a marca n instruciunea de tip IF... THEN... ELSE c nu se execut nici o aciune pentru o clauz ELSE particular. IF (a=b) THEN NULL ELSE DBMS_OUTPUT.PUT_LINE (a<>b); END IF; IF (a=0) THEN GOTO sfarsit .. <<sfrit>> NULL; END; 5. Instruciunea iterativ WHILE...LOOP Aceast instruciune evalueaz o condiie nainte de a executa o secvena de comenzi. Dac condiia nu este indeplinit atunci nu execut secvena de comenzi. Instruciunea iterativ WHILE ... FOR evalueaz condiia dup executarea sevenei de comenzi (adic secvena de comenzi se execut cel puin odat). Sintaxa instruciuni WHILE... Loop este: WHILE <condiie> LOOP <instruciuni> END LOOP; Exemplu: DECLARE Contor NUMBER := 0; BEGIN WHILE contor >= 10 LOP DBMS_OUTPUT.PUT_LINE (Valoare contor este || contor); END LOOP; END; / 6. Instruciunea de ciclare WHILE . . .LOOP Instruciunea WHILE . . . LOOP se execut pn atta timp ct condiia este adevrat. Sintaxa acestei instruciuni este: WHILE condiie LOOP secvena de comenzi END LOOP; Aceast form a instruciunii este echivalent cu:

LOOP sequence_of_statements EXIT WHEN boolean_expression; END LOOP; Folosirea instruciunii FOR-LOOP Bucla FOR itereaz peste un anumit interval de ntregi. Numrul de iteraii este cunoscut nainte de intrarea n bucl. Operatorul (..) servete ca operator de domeniu. Domeniul este calculat cnd se intr prima dat n bucl i nu mai este niciodat reevaluat. 7. Instruciunea WHILE ... FOR (ciclare cu pas) Exemplu: DECLARE A_a INTEGER; BEGIN SELECT COUNT(*) INTO A_a from imprumut; FOR i IN 1..a_a LOOP END LOOP; END;

8.Instruciunea EXIT Aceast instruciune foreaz ieirea dintr-o bucl. Sintaxa acestor instruciuni este: EXIT Exemplu: DECLARE I POSITIVE:=1; Max_loop CONSTANT POSITIVE :=100; BEGIN LOOP I :=i+1; EXIT WHEN I > max_loop; END LOOP; END; Comanda EXIT trebuie plasat n afara buclei. 9. Instruciunea EXIT ... WHEN

Instruciunea EXIT ...WHEN determin ieirea din bucl n urma unei condiii. Sintaxa acestei comenzi este: EXIT [nume_etichet] WHEN condiie;

Exemplu: IF count > 100 THEN EXIT; ENDIF; sau EXIT WHEN count > 100; Cele 2 construcii de mai sus sunt echivalente, dar EXIT ...WHEN este mai uor de neles. Tem: Dai 2 exemple de programe n PL/SQL care folosesc structurile de control LOOP, folosind obiectele din baza de date creat de voi !

4.6

Gestiunea cursorului n PL/SQL

Cursorul este o zon de memorie, n care se scriu 0 sau n rnduri dintr-o tabel, printr-o cerere SELECT. Cursorul determin o baz de date s se comporte ca baza de date de tip ISAM (acces indexat secvenial). Pentru a utiliza mecanismul cursorului trebuie s se parcurg urmatoarele etape: 1. Declarare cursor etapa de definire a instruciunii SELECT care va fi utilizat i eventualele opiuni privind cursoarele; 2. Deschidere cursor etapa n care se ncarc efectiv datele, folosind instruciunea SELECT definit anterior; 3. Regsirea rndurilor (nregistrrilor) individuale conform necesitilor; 4. nchidere cursor. Etapa: Crearea cursoarelor: S urmrim crearea cursorului ClientCursor care va conine toi clienii fr adresa de email. DECLARE CURSOR ClintCursor IS SELECT * FROM Clienti WHERE email_client IS NULL; Etapa: Utilizarea cursoarelor OPEN CURSOR ClintCursor; Cnd aceast instruciune este prelucrat, interogarea este executat i datele regsite sunt stocate n vederea operaiilor ulterioare de navigare i derulare. Datele din cursor sunt accesibile prin instruciunea FETCH.

Exist dou tipuri de cursoare: - implicite care sunt generate de serverul ORACLE cnd n partea executabil a unui bloc PL/SQL apare o instruciune SQL; - explicite declarate i definite de ctre utilizator atunci cnd o cerere SELECT ntoarce ca rezultat mai mult dect o linie (nregistrare). Cursorul se deschide pentru acces (OPEN) i este accesat secvenial prin (FETCH). Definirea cursorului se face n partea declarativ a blocului, prin instruciunea CURSOR, iar execuia prin instruciunile care manipuleaz cursorul: OPEN, FETCH, CLOSE. Prin cursor se pot obine informaii despre execuia instruciunilor: INSERT, UPDATE, DELETE, SELECT. Utilizarea cursoarelor implicite: atributele acestor cursoare ofer informaii despre executarea ultimei comenzi. Exemplu: Excepiile (erorile) ce pot s apar la execuia comenzii SELECT pot fi sesizate cu ajutorul atributelor: % ROWCOUNT returneaz numrul de linii afectate de ultima instruciune SQL; %FOUND atributul are valoarea TRUE dac ultima comand SQL afecteaz una sau mai multe linii; %NOTFOUND - atributul are valoarea TRUE dac ultim comand SQL nu afecteaz nici o linie. poate fi formulat ca un trigger de nregi