Documente Academic
Documente Profesional
Documente Cultură
. 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
BAZE DE DATE
ORACLE
- SQL, SQL*Plus, PL/SQL -
Bucuresti 2009
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.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:
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
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.
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*
BD
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
Shared Pool Dicionar Cache Bibliotec Cache Procese de baz PMON SMON
DBWR
LGWR
ARCH
Fiiere date
Fiiere Redo-log
Fiiere Control
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.
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
Block
extent
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 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.
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
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.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})
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) ........
PARTEA I
Sectiunea I:
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,....)
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(%);
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;
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)
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;
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.
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 .
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
1250
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.
20
30
Programator
Analisti
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 ********
****** 3750 800 1100 ******* 1900 950 1600 1500 1250 1250
Programator
******** sum 30
********
Programator Analist
******* 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
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)
- 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
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
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
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
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