Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice CUPRINS CAPITOLUL 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.1 2.2 2.3 2.4 2.5 2.6 2.7 SISTEME DE GESTIUNE A BAZELOR DE DATE ...........

1-5

Arhitectura sistemelor de gestiune a bazelor de date ......................... 1-5 Obiectivele şi func iile unui sistem de gestiune a bazelor de date ...... 1-6 Evolu ia şi clasificarea sistemelor de gestiune a bazelor de date ....... 1-8 Conceptul de baz de date rela ional .............................................. 1-11 Terminologie specific bazelor de date rela ionale ........................... 1-14 Sisteme de gestiune a bazelor de date rela ionale în Oracle............ 1-16 Sisteme de gestiune a bazelor de date rela ionale în FoxPro........... 1-18 CONCEPTE ŞI ELEMENTE DE BAZA ÎN FOXPRO. ..... 2-22 Descrierea mediului integrat.............................................................. 2-25 Tipuri de date în FoxPro, operatori, func ii ........................................ 2-26 Func ii pentru conversii între tipuri de date ....................................... 2-34 Zone de lucru..................................................................................... 2-35 Construirea bazelor de date rela ionale. Componente...................... 2-36 Comenzi pentru vizualizarea şi modificarea datelor din tabele ......... 2-40 Exerci ii .............................................................................................. 2-44

CAPITOLUL 2

CAPITOLUL 3 INDEXAREA ŞI RELA IONAREA TABELELOR, INTEGRITATEA REFEREN IAL . ............................................................... 3-46 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 Indexarea tabelelor............................................................................ 3-46 Rela ionarea tabelelor ....................................................................... 3-50 Integritatea referen ial ...................................................................... 3-53 Func ii. Variabile de memorie. Macrosubstitu ia ............................... 3-54 Crearea şi modificarea programelor.................................................. 3-57 Programare structurat . Proceduri. ................................................... 3-58 Comenzi de intrare/ieşire................................................................... 3-60 Controlul fluxului ................................................................................ 3-65 Comenzi SQL .................................................................................... 3-67 Depanarea programelor .................................................................... 3-69 Instrumente WIZARD ........................................................................ 3-71 Exerci ii .............................................................................................. 3-74

CAPITOLUL 4 PROGRAMAREA ORIENTATA PE OBIECT-CLASE ŞI OBIECTE ÎN VISUAL FOX PRO.................................................................... 4-78 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Crearea claselor ................................................................................ 4-81 Crearea formularelor ......................................................................... 4-85 Utilizarea controalelor predefinite...................................................... 4-87 Generatorul de rapoarte .................................................................... 4-99 Constructorul de meniuri ................................................................. 4-105 Constructorul de proiecte ................................................................ 4-108 Exerci ii: ........................................................................................... 4-110 1-1

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice CAPITOLUL 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 LIMBAJUL SQL IMPLEMENTAT ÎN ORACLE............. 5-111

Solu ia complet Oracle .................................................................. 5-111 Comenzi SQL*Plus pentru fişiere.................................................... 5-114 Instruc iuni SQL ............................................................................... 5-115 Sintaxa de baz a instruc iunilor SQL ............................................. 5-116 Crearea şi gestionarea tabelelor ..................................................... 5-118 Comanda CREATE TABLE ............................................................. 5-120 Tabele din baza de date Oracle ...................................................... 5-121 Interogarea dic ionarului de date..................................................... 5-122 Tipuri de date................................................................................... 5-123 Comanda ALTER TABLE ................................................................ 5-127 Ştergerea unei tabele ...................................................................... 5-131 Modificarea numelui unui obiect...................................................... 5-132 Trunchierea unei tabele................................................................... 5-132 Includerea constrângerilor ............................................................... 5-133 Constrângerea NOT NULL .............................................................. 5-136 Constrângerea UNIQUE KEY ......................................................... 5-137 Constrângerea PRIMARY KEY ....................................................... 5-139 Constrângerea FOREIGN KEY ....................................................... 5-139 Constrângerea CHECK ................................................................... 5-141 Ad ugarea unei constrângeri .......................................................... 5-142 Ştergerea unei constrângeri ............................................................ 5-143 Dezactivarea constrângerilor........................................................... 5-143 Activarea constrângerilor................................................................. 5-144 Exerci ii ............................................................................................ 5-147

CAPITOLUL 6 EXPRESII ARITMETICE. OPERATORI. RESTRIC IONAREA ŞI SORTAREA DATELOR....................................... 6-149 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 7.1 7.2 7.3 7.4 1-2 Expresii aritmetice ........................................................................... 6-149 Definirea alias-urilor pentru coloane................................................ 6-153 Operatorul de concatenare.............................................................. 6-154 Afişarea structurii unei tabele .......................................................... 6-157 Restric ionarea şi sortarea datelor .................................................. 6-158 Clauza WHERE ............................................................................... 6-159 Operatori de compara ie.................................................................. 6-161 Operatori logici ................................................................................ 6-165 Clauza ORDER BY.......................................................................... 6-169 Exerci ii ............................................................................................ 6-172 FUNC II DE UN SINGUR RÂND .................................. 7-174 Func ii de un singur rând ................................................................. 7-175 Func ii pentru caractere................................................................... 7-177 Func ii pentru valori numerice ......................................................... 7-181 Utilizarea datelor calendaristice ...................................................... 7-183

CAPITOLUL 7

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7.5 7.6 7.7 7.8 7.9 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 9.14 9.15 9.16 9.17 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 Func ii pentru date calendaristice.................................................... 7-184 Func ii pentru conversia tipului de date........................................... 7-187 Func ii diverse ................................................................................. 7-196 Imbricarea func iilor ......................................................................... 7-203 Exerci ii ............................................................................................ 7-204 AFIŞAREA DATELOR DIN TABELE MULTIPLE......... 8-205 Definirea JOIN-urilor........................................................................ 8-206 Produsul Cartezian .......................................................................... 8-206 Echi-join ........................................................................................... 8-208 Non-echi-join ................................................................................... 8-212 Outer-join ......................................................................................... 8-214 Self – Join ........................................................................................ 8-216 Definirea join-urilor folosind sintaxa SQL 1999 ............................... 8-218 Exerci ii ............................................................................................ 8-226 FOLOSIREA FUNC IILOR DE GRUP.......................... 9-231 Ce sunt func iile de GRUP ? ........................................................... 9-231 Folosirea func iilor AVG, SUM, MIN, MAX ...................................... 9-232 Folosirea func iei COUNT................................................................ 9-233 Func iile de grup şi valorile Null....................................................... 9-234 Crearea grupurilor de date .............................................................. 9-235 Gruparea datelor dup mai multe coloane ...................................... 9-238 Interog ri ilegale în folosirea func iilor de grup................................ 9-240 Excluderea rezultatelor ob inute folosind clauza Group.................. 9-242 Imbricarea func iilor de grup ............................................................ 9-244 GROUP BY cu operatorii ROLLUP şi CUBE................................... 9-244 Operatorul ROLLUP ........................................................................ 9-245 Operatorul CUBE............................................................................. 9-247 Func ia GROUPING ........................................................................ 9-249 GROUPING SETS........................................................................... 9-250 Composite Columns ........................................................................ 9-254 Concatenated Groupings................................................................. 9-257 Exerci ii ............................................................................................ 9-259 SUBINTEROGARI ....................................................... 10-265 Folosirea unei subinterog ri pentru a rezolva o problema ............ 10-265 Tipuri de subinterog ri................................................................... 10-267 Subinterogari single-row................................................................ 10-268 Utilizarea func iilor de grup într-o subinterogare ........................... 10-269 Erori ce pot apare la folosirea subinterog rilor.............................. 10-270 Subinterogari multiple-row............................................................. 10-272 Utilizarea operatorului ANY în subinterogarile multiple-row.......... 10-273 Utilizarea operatorului ALL în subinterog rile multiple-row........... 10-273 Returnarea valorilor nule în rezultatul subinterog rii..................... 10-274 1-3

CAPITOLUL 8

CAPITOLUL 9

CAPITOLUL 10

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10.10 10.11 10.12 10.13 10.14 10.15 10.16 10.17 10.18 10.19 10.20 Subinterogari de coloane multiple ................................................. 10-275 Compararea coloanelor (pereche şi nepereche)........................... 10-275 Folosirea unei subinterog ri în clauza FROM ............................... 10-276 Expresii scalare returnate de subinterog ri................................... 10-277 Subinterog ri corelate ................................................................... 10-279 Folosirea operatorului EXISTS...................................................... 10-282 Folosirea operatorului NOT EXISTS ............................................. 10-284 Clauza WITH ................................................................................. 10-284 Interog ri ierahice.......................................................................... 10-286 Parcurgerea arborelui – punctul de start ....................................... 10-288 Exerci ii ......................................................................................... 10-295 INSTRUC IUNI PENTRU MANIPULAREA DATELOR.... 11-

CAPITOLUL 11 302 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9

Introducerea datelor-comanda INSERT ........................................ 11-303 Modificarea datelor - comanda UPDATE ...................................... 11-308 Ştergerea datelor - comanda DELETE.......................................... 11-311 Instruc iunea MERGE.................................................................... 11-314 Tranzac ii ....................................................................................... 11-316 Consisten a la citire ....................................................................... 11-321 Correlated UPDATE ...................................................................... 11-323 Correlated DELETE....................................................................... 11-324 Exerci ii .......................................................................................... 11-333 ANEXA 1...................................................................... 12-337

CAPITOLUL 12

STRUCTURA TABELELOR FOLOSITE ÎN CARTE ŞI DATELE STANDARD CON INUTE DE ACESTEA ...................................................................... 12-337 BIBLIOGRAFIE 12-343

1-4

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 1 Sisteme de gestiune a bazelor de date Sistemele de Gestiune a Bazelor de Date (SGBD) reprezint componenta software a unui sistem de baze de date care asigur independen a, rela iile logice între date şi o redundan minim a acestora. Ele trebuie s permit dezvoltarea rapid şi la un cost avantajos a programelor de aplica ii pentru exploatarea datelor dintr-o structur complex , precum şi accesul rapid la date şi asigurarea securit ii lor. Altfel spus, SGBD-ul este un ansamblu de programe care permite utilizatorilor s interac ioneze cu o baz de date, conceput de regul pentru volume mari de date, a c ror gestiune impune nu numai o riguroas structurare dar şi o accesare şi prelucrare ra ional . 1.1 Arhitectura sistemelor de gestiune a bazelor de date

Datorit dezvolt rii tot mai accentuate a IT-ului (Information Technology) în majoritatea domeniilor de activitate şi datorit extensiei sferei problemelor rezolvate cu ajutorul tehnicii de calcul, a ap rut ca o necesitate specializarea pachetelor de programe în func ie de domeniile abordate: matematic , tehnic , economie, proiectare, comunica ie etc. Sistemele de Gestiune a Bazelor de Date sunt sisteme informatice software specializate în stocarea şi prelucrarea unui volum mare de date. Sunt implicate dou concepte: “baza de date” şi “gestiune”. Prin “baza de date” se în elege: datele de prelucrat şi modul de organizare a acestora pe suportul fizic de memorare şi prin “gestiune” totalitatea opera iilor ce se vor aplica asupra datelor. Dintre avantajele organiz rii informa iilor în baza de date fa de fişierele clasice (de tip ASCII, binare, etc.) putem aminti redundan a minim a informa iilor, accesul mai uşor la date şi posibilitatea abord rii domeniului implementat din punct de vedere sistemic (ca un sistem unitar). Pia a SGBD-urilor este dominat înc de SGBD-urile rela ionale şi distribuite, deşi se observ o dezvoltare a SGBD-urilor orientate obiect. Lucr rile practice de baze de date din aceast carte vor cuprinde prezentarea SGBD-ului FoxPro şi Oracle. Teoria şi practica SGBD-urilor ofer diferite arhitecturi diferen iate în func ie de componentele, limbajele utilizate şi posibilit ile de prelucrare a datelor, existând totuşi preocup ri de standardizare a acestora. În general, în arhitectura unui SGBD intr cel pu in 5 clase de module: • Programele de gestiune a bazelor de date. Aceast clas de module realizeaz accesul fizic la date ca urmare a unei comenzi primite printr-un program de aplica ii sau interactiv de la tastatur ; Limbajul de definire a datelor (LDD). Este componenta care permite 1-5

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice traducerea (compilarea sau interpretarea, dup caz) şi descrierea naturii datelor şi a leg turilor logice dintre ele, fie la nivel global (sub forma schemei conceptuale), fie la nivelul specific fiec rei aplica ii (sub forma schemei externe sau sub-schemei). Aceste defini ii se memoreaz într-un fişier special numit Dicţionarul de date. Limbajul de manipulare a datelor (LMD). Aceast component permite gestionarea şi actualizarea datelor dintr-o baz (scrierea unor noi date, modificarea valorii unor date, ştergerea unor date perimate sau eronate). Comenzile acestui limbaj depind de SGBDul utilizat (cu limbaj gazd sau SGBD autonome). În SGBD-urile cu limbaj gazd enun urile trebuie incluse într-un program scris cu un limbaj gazd : PL/1, ASSEMBLER, C etc. În SGBD-urile autonome se dispune de un limbaj la care se ataşeaz un limbaj de interogare. Utilitarele de întreţinere a bazei de date. Un SGBD trebuie s ofere o gam variat de programe utilitare care s permit gestionarea de c tre operator a bazei de date. Utilitarele variaz de la un sistem la altul şi depind de complexitatea SGBD-ului. Acestea pot efectua urm toarele opera ii: crearea versiunii ini iale a bazei de date şi înc rcarea acesteia folosindu-se fie o copie creat anterior, fie date neorganizate; crearea şi actualizarea jurnalelor tranzac iilor realizate asupra bazelor de date: reorganizarea bazei de date pentru recuperarea spa iului nefolosit; reorganizarea structurii fizice şi logice dup fiecare tranzac ie; restructurarea bazei de date dup un incident logic sau fizic, cu refacerea st rii anterioare; diverse statistici ce permit cunoaşterea activit ii şi utiliz rii bazei de date; actualizarea schemei şi sub-schemei f r rescrierea şi compilarea lor; detectarea “sp rg torilor” regulilor de integritate definite, f r a fi necesar intrarea în baza de date; realizarea unei copii permanente a bazei de date în scopuri de securitate. Componentele de control ale programelor de aplicaţii. Acestea constituie mijloace de prevenire şi corectare a anumitor erori ce pot s apar în condi ii de exploatare “multi-utilizator”.

1.2

Obiectivele şi funcţiile unui sistem de gestiune a bazelor de date

Succesul unui SGBD este sus inut prin realizarea urm toarelor obiective: • asigurarea independenţei datelor. Independen a datelor poate fi definit drept “imunitatea” programelor de aplica ii la schimbarea structurii de memorare şi /sau a strategiei de acces. Independen a

1-6

• • • • • Plecând de la aceste obiective. Defini iile se stocheaz într-un ansamblu de tabele. accesul simplu şi multicriterial al utilizatorilor la date.. cu o cantitate cât mai mic de date. 1-7 . rezult c orice SGBD trebuie s îndeplineasc urm toarele func ii: de descriere. f r rescrierea programelor de aplica ii. existen a unor limbaje performante de interogare etc. asigurarea securităţii datelor prin intermediul unor canale corespunz toare şi definirea unor restric ii de autorizare la accesarea datelor. asigurarea unei redundanţe minime şi controlate a datelor prin definirea unui element de structur . asigurarea unor facilităţi sporite de utilizare a datelor prin: folosirea datelor de c tre mai mul i utilizatori în diverse aplica ii. Independenţa logică ofer posibilitatea ad ug rii de noi articole sau extinderea structurii globale f r a necesita rescrierea programelor. Independenţa fizică asigur modificarea datelor şi a tehnicilor fizice de memorare. de manipulare. Func ia de descriere permite definirea structurii bazei cu ajutorul limbajului special de descriere a datelor.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice datelor trebuie urm rit atât la nivel fizic cât şi la nivel logic. stabilind criterii de validare a acestora. precum şi a unor proceduri de refacere a bazei de date dup incidente. evitându-se în acelaşi timp ambiguitatea. metode de acces şi de asigurare a confiden ialit ii şi integrit ii lor. adic asigurarea accesului mai multor utilizatori la aceleaşi date pe baza unor criterii de prioritate şi dezvoltarea unor aplica ii f r a se modifica structura bazei de date. de utilizare. Toate aceste elemente se reg sesc în ceea ce se numeşte schema bazei de date. f r a fi necesar cunoaşterea structurii întregii baze de date. asigurarea integrităţii datelor prin existen a unor proceduri de validare sau a unor protocoale de control concurent. memorate în dic ionarul de date. asigurarea partajării datelor.

ad ugarea de noi înregistr ri. Raportul ANSI/SPARC 1975 prezint trei categorii de utilizatori (roluri umane) ce definesc schemele dintr-o arhitectur de sistem bazat pe SGBD: . Evoluţia şi clasificarea sistemelor de gestiune a bazelor de date 1. Aceast schem furnizeaz o viziune pe termen lung şi este baza pentru declara iile de securitate-integritate şi standardizare impuse celorlalte tipuri de utilizatori. memorare. şi cu evolu ia metodelor şi tehnicilor de organizare a datelor. pe de alt parte. de arhitecturile client-server.3 Perfec ionarea SGBD-urilor a avut loc în paralel cu evolu ia echipamentelor de culegere.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ia de manipulare asigur prin intermediul limbajului special derularea urm toarelor activit i: înc rcarea bazei de date. transmitere şi prelucrare a datelor. ştergerea unor înregistr ri.administratorul bazei de date care are responsabilitatea definirii schemei interne a bazei de date şi a între inerii acesteia. pe de o parte. editarea total sau par ial a unor înregistr ri. administratorul aplica iilor care are rolul de a dezvolta schemele externe (sub-schemele) pentru aplica iile utilizator. . Dintre acestea prezent m în continuare doar câteva astfel de grup ri. În acelaşi raport sunt prezentate trei categorii de administratori: administratorul structurii organiza ionale care asigur gestionarea global a aplica iilor curente şi identificarea celor viitoare. În felul acesta se creeaz un mediu favorabil utilizatorului care la ora actual beneficiaz de prelucrarea în timp real. servicii Internet etc. c utarea logic sau fizic a înregistr rilor etc. Literatura şi practica de specialitate ofer o mare diversitate de sisteme 1-8 . Func ia de utilizare permite comunicarea între utilizatori şi baza de date prin intermediul unor interfe e avantajoase utilizatorilor. ordonarea înregistr rilor.programatorii de aplicaţii şi utilizatorii finali care comunic cu SGBD-ul prin intermediul limbajului de manipulare sau a limbajului de interogare. .persoana sau grupul de persoane care defineşte schema conceptuală a bazei de date. administratorul de date care opereaz la nivelul schemei de date precizând necesarul şi disponibilitatea datelor. În cadrul realiz rii acestei func ii interac ioneaz diverşi utilizatori. literatura de specialitate oferind mai multe clasific ri sau grup ri.

Modelul func ional devine opera ional prin intermediul SGBD-urilor func ionale care ofer mecanisme şi instrumente de descriere şi manipulare a datelor prin intermediul limbajelor func ionale. FoxPro etc. Genera ia a doua.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice de gestiune a bazelor de date. Oracle. situat în timp la sfârşitul anilor ’80 şi începutul anilor ’90 cuprinde în principal modelele rela ionale. propunând o structur de date mai bogat pe baza leg turilor posibile şi conducând la construirea unei re ele între acestea. care sintetic pot fi prezentate în trei genera ii. Prima genera ie este situat în timp la sfârşitul anilor `60 şi începutul anilor ’70 şi include modelul ierarhic şi modelul re ea de organizare a datelor în baze de date. func ionale. Ele permit 1-9 . Obiectele definite în baz au capacitatea de a transmite descenden ilor. Sistemele orientate obiect permit descrierea elementelor unei baze utilizând conceptele abord rii obiectuale care ine seama de aspectele statice şi dinamice ale obiectelor. Aceast abordare se caracterizeaz . Se pot încadra în aceast genera ie 4 subclase de SGBD: orientate obiect. PARADOX. Modelul ierarhic are o structur de tip arborescent. Sistemele deductive utilizeaz reguli de inferen pentru a exprima situa ii bine sau mai pu in bine definite din mediul unei organiza ii. definind atributele obiectului şi exprimând asocierile dintre entit i. deductive şi multimedia. În plus. Modelul reţea încearc s înl ture lipsurile modelului precedent. Aceast caracteristic reduce considerabil programarea “defensiv ” datorit descrierii intrinseci f cut obiectelor. pe opera ia de încapsulare. Din aceast genera ie fac parte: IBM DB2. Microsoft SQL Server. Sistemele funcţionale au la baz no iunile de entitate şi func ie şi au fost introduse în 1979 de Shipman. Aceste sisteme se bazeaz pe principii mult mai complexe decât precedentele şi permit gestionarea unor informa ii foarte variate. Pentru fiecare entitate (obiect) de un anumit tip exist o colec ie de func ii care sunt aplicate acelui obiect. adic pe reunirea în aceeaşi unitate a caracteristicilor statice şi dinamice ale obiectelor de gestionat. considerate ca operanzi. este posibil reutilizarea obiectelor deja definite. Genera ia a treia ap rut la începutul anilor ’90. legat puternic de principiile de descriere a datelor specifice limbajelor din genera ia corespunz toare. ansamblul caracteristicilor lor prin “moştenire”. în principal. Structura datelor este format dintr-un ansamblu de rela ii sau tabele f r leg turi fizice între ele. Apropierea dintre date este ob inut prin utilizarea unei “algebre” între tabele. Fiecare nivel de date este constituit din una sau mai multe grupe de date care se pot şi ele descompune la rândul lor.

Sistemele multimedia permit stocarea şi administrarea altor informa ii decât cele clasice precum: imagini. mixt ). În func ie de limbajul utilizat exist dou clase de SGBD-uri: • cu limbaj gazdă: asigur crearea. persisten a obiectelor prin extinderea actualelor sisteme obiectuale. sunete etc. Ne oprim. integrarea tehnologiei semantice şi obiectuale etc. La ora actual tendin a este de generalizare şi standardizare a SGBDurilor conferindu-li-se atributul de “cross platforma” pentru a putea fi rulate pe cât mai multe medii de operare (DOS. MAC. doar asupra câtorva astfel de criterii de clasificare. • pentru minicalculatoare. UNIX. Linux. permit organizarea de “birouri f r hârtie”. care se comercializeaz deja. fiind propuse mai multe solu ii de combinare şi extindere a modelelor prezentate: înglobarea în SGBD-urile rela ionale a elementelor ce definesc tehnologia actual . deductive şi multimedia.). re ea. distribuirea resurselor (integrate şi distribuite teritorial). Dup sistemul de calcul pe care se implementeaz SGBD-urile pot fi: • pentru mainframe-uri. rela ionale. în continuare. actualizarea şi interogarea bazei de date utilizând limbaje de nivel înalt propriu sistemului de calcul pe 1-10 . Clasificarea SGBD-urilor Abordarea sistemic a problematicii referitoare la SGBD-uri presupune şi clasificarea acestora.). Preocup rile proiectan ilor de SGBD sunt concentrate spre construirea bazelor de date pe modele obiectuale.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice s se r spund cererilor care comport exprimarea într-o logic mai mult sau mai pu in vag . muzic . orientate obiect etc. sau într-un alt limbaj de inteligen artificial . WINDOWS. Exist mai multe clase de SGBD privite din diverse puncte de vedere: modelul de organizare folosit (ierarhice. destina ie (public şi privat ) şi tehnica de prelucrare (pe loturi. fotografii. • pentru microcalculatoare. LISP. În general astfel de baze de date sunt cuplate cu sistemele expert sau cu un nivel din baza regulilor scrise în PROLOG. Sistemele din aceast categorie. propunând gestiunea diferitelor documente (imprimate) pe discul optic cu proceduri de înregistrare prin scanare precum şi prin proceduri de consultare şi manipulare. mai cu seam c literatura de specialitate prezint un num r deosebit de mare de astfel de software-uri. interactiv . OS/2 etc.

• obiectuale. Access. Codd a propus modelul rela ional pentru baze de date în 1970 baza (http://www. Prezint avantajul exploat rii facilit ilor limbajului de nivel înalt şi dezavantajul complexit ii formul rii cererilor de prelucrare. ca surs unic de informare şi/sau raportare (VisualFoxPro.4 Dr. • relaţionale. cu posibilitatea acces rii datelor din orice punct definit (Oracle. Principiile modelului rela ional au fost subliniate pentru prima data de Dr. Informix). • cu limbaj autonom (propriu): folosesc limbaje speciale care sunt independente de limbajul gazd şi chiar fa de sistemul de calcul ceea ce asigur un grad ridicat de portabilitate. • obiectual-relaţionale. îl reprezint simplitatea formul rii cerin elor. etc. Componentele modelului rela ional sunt: 1-11 .F. Avantajul acestor SGBD-uri concretizat în larga lor utilizare.org/wiki/Edgar_F. În func ie de organizarea şi structurarea datelor gestionate SGBDurile sunt: • ierarhice şi reţea.wikipedia. IBM DB2.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice care se implementeaz baza de date. La ora actual datorit prolifer rii prelucr rilor în re ea de calculatoare tot mai multe SGBD-uri dispun de o component de gestiune distribuit a datelor. care presupun ca datele s fie repartizate geografic în mai multe puncte în func ie de locul lor de producere.). model ce reprezint pentru sistemele de gestiune a bazelor de date (DBMS). E. E. Din punct de vedere a modului de localizare a bazelor de date SGBD-urile sunt: • centralizate.F. Cele mai populare modele ale vremii erau cele ierarhice şi de re ea sau chiar fişierele simple de date._Codd). care presupun ca datele s fie concentrate într-un singur loc pe un server. Conceptul de bază de date relaţională 1. • distribuite. Apoi DBMS-urile au devenit foarte populare pentru uşurin a în utilizare şi flexibilitatea lor. Codd în lucrarea numit “Un model rela ional de date pentru b nci de date mari”.

analiza. Modelul sistemului asa cum este vazut de catre client Modelul Entitate-relatie a ceea ce este dat de catre client (modelul logic) Modelul tabelar (modelul fizic) Server Tabele pe disc Modelul Entitate Rela ie – permite crearea unei diagrame entitate rela ie pe baza specifica iilor informa ionale ale problemei. Modelele de date sunt dezvoltate de proiectan i pentru a explora idei şi pentru a îmbun t i în elegerea proiect rii bazei de date.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Un set de operatori care ac ioneaz produce alte rela ii. Ele pot: comunica. descrie. tabela departamente şi tabela salarii. asupra rela iilor pentru a şi acurate e. investiga. De exemplu. • Colec ie de obiecte şi rela ii care stocheaz date. pentru stocarea informa iilor despre angaja ii unei companii. • Reguli de integritate a datelor pentru consisten Definirea unei baze de date rela ionale O baza de date rela ional foloseşte rela ii sau tabele bi-dimensionale pentru stocarea informa iilor. Modelele ajut în comunicarea conceptelor în min ile oamenilor. Scopul este de a produce un model care s se potriveasc şi s r spund tuturor cerin elor şi care s fie în eles de utilizatorul final. pune pe categorii. imita şi implica. care s con in detalii suficiente pentru ca un programator s construiasc sistemul de baze de date şi/sau s dezvolte o aplica ie care s lucreze cu baze de date. specifica. 1-12 . într-o baz de date rela ional ve i g si informa ia stocat în: tabela angaja i.

• Ofer un mediu efectiv de integrare a aplica iilor multiple. Fiecare apari ie a entit ii trebuie sa fie identificat unic. Exemplu: angaja i şi departamente. • Prezint o imagine clar a scopului cerin elor informa ionale şi uşor de în eles pentru proiectarea bazei de date. De aceea structurile de date tind s r mân constante. cu o anumit semnifica ie. Fiecare atribut poate fi obligatoriu sau op ional. Un model entitate rela ie (ER) este o ilustrare a entit ilor dintr-o problem şi a rela iilor dintre ele. comenzi. despre care este necesar a fi cunoscute informa ii. Componente cheie: Entitatea: Un obiect sau un grup de obiecte de acelaşi tip (cu aceleaşi propriet i).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ANGAJAT #* număr * nume o meseria Scenariu: asignat la compus din DEPARTAMENT #* număr * nume o localitate “ … se asigneaz unul sau mai mul i angaja i la un departament …” “… câteva departamente nu au nici un angajat …” Într-un sistem real. Exemplu: departamente. data de angajare. 1-13 . Identificator unic (UID – Unique IDentifier) este orice combina ie de atribute sau/şi rela ii care serveşte la distingerea apari iilor unei entit i. Un model ER este derivat din specifica iile informa ionale ale problemei şi este construit în faza de analiza a sistemului. departamentul. meseria. Exemplu: pentru entitatea Angajat atributele sunt: marca. angaja i. Avantajele modelului ER: • Documenteaz necesarul de informa ii pentru organiza ie într-o form clar şi precis . data este divizat în categorii discrete sau entit i. comenzi şi articole. Atribut: Un aspect care descrie sau calific o entitate. Rela ie: Un nume de asociere dintre entit i care arat op ionalitatea sau gradul asocierii. Modelul ER separ informa iile cerute de problema de activit i. tipul informa iilor trebuie s r mân constant. Chiar dac activit ile problemei se schimb .

1-14 prin execu ia instruc iunilor .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 1. Alte tipuri de coloane reprezint alte informa ii (de ex: func ia). Un câmp poate fi g sit la intersec ia dintre un rând şi o coloană. De exemplu tabela Angaja i con ine informa ii despre angaja i. În exemplul dat „meseria” este coloana ce con ine toate meseriile pentru to i angaja ii. Deoarece datele despre entit i diferite sunt stocate în tabele diferite. O cheie primar trebuie s con in o valoare. Ordinea rândurilor nu este semnificativ . Fiecare rând din tabel trebuie identificat de o cheie primară. • • No iuni: Un singur rând sau o tuplă reprezint informa ia necesar pentru un angajat specificat. este necesar combinarea a dou sau mai multe tabele pentru a afla r spunsul la o interogare. care nu permite rânduri duplicate. Acestea se numesc valori null. Ordinea coloanelor nu este important . O tabel con ine toate datele necesare despre un aspect al lumii reale. Câmpurile pot s nu con in valori. Se consider exemplul tabelei Angaja i. Poate con ine o singur valoare.Fiecare tabel con ine date care descriu exact o entitate. O cheie externă este o coloan sau o combina ie de coloane care refer o cheie primar din acelaşi tabel sau din unul diferit. Coloana care con ine num rul de departament este numit şi cheie externă. Marca (cheia primar ) identific în mod unic un angajat în tabela EMP. O tabel reprezint structura de baz a unui SGBDR (Sistem de Gestiune a Bazelor de Date Rela ionale). O cheie externă refer o cheie primar sau o cheie unic din alt tabel. Un SGBDR permite combinarea tabelelor diferite folosind chei externe. Cheia extern con ine coloane care definesc modul în care sunt în rela ie tabele diferite. O coloană sau un atribut con ine marca angajatului care este şi cheie primară. • • • Referirea mai multor tabele . Propriet ile bazelor de date rela ionale O baza de date rela ional : • Poate fi accesat şi modificat specifice. De exemplu dac vre i s afla i localitatea în care este situat departamentul în care lucreaz un anumit angajat sunt necesare tabelele Angaja i şi Departamente. O coloan reprezint un domeniu de date dintr-o tabel .5 Terminologie specifică bazelor de date relaţionale O baza de date relaţională con ine una sau mai multe tabele.

“Object-Oriented Technology: A Manager’s Guide” Addison-Wesley 1981 • “Un obiect este un concept. • Clasific obiectele în tipuri de obiecte organizate în ierarhii arborescente. • Interfa a cu alte obiecte (interface sau messaging).David Taylor. • Interac ioneaz cu alte obiecte. Obiecte . Într-o baz de date rela ional nu trebuie specificat calea de acces la tabele şi nu trebuie cunoscut modul de aranjare fizic. Alte caracteristici: • Reprezint informa ia ca lucruri con inute intrinsec.Un obiect este considerat ca o reprezentare a unui lucru din lumea real . • modelele obiect se aseam n cu lumea real . • Clasific obiectele în tipuri de obiecte.James Rumbaugh. “Object-Oriented Modeling and Design” Prentice-Hall 1991 Modele obiect: • obiectele modeleaz o problem spre rezolvare. unde un tip de obiect poate fi alt fel decât alt tip de obiect (object type metadata). • Pot ascunde date şi procese referitoare la obiect în cadrul obiectului (encapsulation). • Interpreteaz aceeaşi comand în moduri diferite. Foloseşte un set de operatori.• • Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Con ine o colec ie de tabele f r pointeri fizici. Caracteristicile sistemelor obiectuale: • Prezint informa ia în forma obiect. • modelul este definit în termeni de interac iune între obiecte. • când se lucreaz cu modele ne ax m mai mult în termenii aplica iei şi mai pu in la arhitectura sistemului de operare şi cerin ele mediului de dezvoltare. 1-15 . Aceasta permite schimb ri ale unei componente specifice f r afectarea altor componente. • Ascunde date. • Recunoaşte diferite obiecte f r analiz . • Moşteneşte atribute şi cod. abstrac ie sau lucru cu margini şi în elesuri fragile pentru problema de rezolvat” . Câteva defini ii: • “Un obiect este un pachet software care con ine o colec ie de proceduri (metode) înrudite şi date (variabile)” . cod şi atribute. • Obiectele pot moşteni tr s turile tipului sau de obiecte (inheritance).

IBM – firma care a dezvoltat primul sistem de management al bazelor de date. Oracle Corporation este la ora actual cea mai mare companie de software din lume care are produsele axate pe baze de date.F. disponibil pe mai multe sisteme de operare şi platforme hardware: Microsoft Windows pe 32 de bi i şi 64 de bi i.1.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Recunoaşterea diferitelor tipuri de lucruri şi comportamentul lor f r analiza lor. • Folosirea aceleaşi cereri pentru a invoca diferite implement ri ale aceleaşi ac iuni pentru dou obiecte diferite (polymorphism).0.Codd. Sunt incluse tr s turi de control a modului de accesare şi folosire a datelor.Oracle Database. un motor care permite stocarea şi executarea unit ilor de program.0)). Alte caracteristici sunt consisten a şi protec ia prin mecanisme de blocare.6 Sisteme de gestiune a bazelor de date relaţionale în Oracle Oracle furnizeaz un SGBDR flexibil . Serverul permite utilizatorilor op iunea de extragere de date bazat pe tehnici de optimizare.2. Software-ul care constituie baza de integrare a tuturor celorlalte produse ale companiei este Oracle Server – serverul de baze de date ajuns acum la versiunea 10 (Oracle Database 10g Release 2 (10. Lansarea produsului Oracle a reprezentat startul în domeniul bazelor de date rela ionale comerciale construite pe principiile fundamentate matematic de c tre E. Tr s turile acestui SGBDR permit stocarea şi gestiunea datelor cu toate avantajele structurilor rela ionale plus PL/SQL. în anii 1970. numit System R. Este o suprema ie câştigat de aproximativ 20 de ani în fa a principalului concurent. Linux x86 pe 32 de bi i 1-16 . 1.

O alt caracteristic a versiunii 3 o reprezint respectarea principiului atomicit ii frazelor SQL în cadrul tranzac iilor. În principiu toate aceste aplica ii satelit in pasul. Versiunea 8 a introdus partea obiectual derivat din principiile program rii orientate pe obiect ca o necesitate a creşterii complexit ii structurii datelor. Succesul firmei Oracle s-a bazat în primul rând pe serverul de baze de date. Linux Itanium. În versiunea 7 se introduc procedurile stocate şi declanşatoarele (triggeri în englez ). Reports. începând cu aceast versiune. Designer. se face la nivel de linie permi ând ca o tranzac ie s nu blocheze o tabel întreag . ci numai liniile din tabel care sunt supuse prelucr rii. Versiunea Oracle 8i este o continuare a versiunii 8. ca denumire de versiune. Warehouse Builder şi Discoverer pentru domeniul numit Business Intelligence. JDeveloper) pentru proiectarea de aplica ii. etc. se poate considera versiunea 2 ca fiind prima versiune complet bazat pe caracteristicile rela ionale introduse de limbajul SQL. Ca istoric. Practic. nu numai în PL/SQL (limbajul procedural Oracle introdus din versiunea 7). Versiunea 6 îmbun t eşte mecanismele de blocare care. ceea ce a crescut mult popularitatea sistemului. la care se adaug un mediu RunTime Java direct în motorul bazei de date pentru structurarea logicii procedurilor stocate şi în limbajul Java. începând cu aceast versiune. cu versiunea bazei de date. Versiunea 4 aduce ca noutate principiul consisten ei datelor la citire. AIX 5L pe 64 bi i. pe baza c ruia s-au dezvoltat de-a lungul timpului suita de dezvoltare Oracle Developer Suite (care cuprinde Oracle Forms. Odat cu versiunea 7 a ap rut şi varianta pentru calculatoare personale: ORACLE Personal Edition 7. i-ul de la 8i vine de la aplica iile bazate pe noile tehnologii ale internetului. Serverul de baze de date Oracle a c p tat de-a lungul timpului îmbun t iri care au men inut acest produs pe primul loc. HP-UX PA-RISC (64 bi i). adic datele supuse prelucr rilor sunt intangibile celorlalte tranzac ii.2. serverul de aplica ii bazat pe J2EE – Oracle Application Server şi suita back-office Oracle Collaboration Suite. fiind permis stocarea în baza de date atât a structurilor tabelare cât şi a obiectelor folosind metoda map rii. care permite dezvoltarea aplica iilor f r a fi necesar conectarea la un server în re ea. aducând o r spândire a produsului bazat pe folosirea bazei de date prin accesarea de pe terminale sau sta ii PC mai slabe. Versiunea 5 aduce îmbun t iri în partea de client / server. Oracle a devenit o baz de date obiectual-rela ional . Tot în acest context s-a introdus suportul pentru limbajul SQLJ care 1-17 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice şi 64 de bi i. Versiunea 3 se caracterizeaz prin rescrierea în întregime a versiunii anterioare în limbajul C pentru asigurarea portabilit ii pe mai multe platforme. Solaris SPARC (64 bi i). investi ia major fiind necesar doar pentru server.

conceptul de grid este superior conceptului de cluster. gestionate de sisteme de operare diferite. aplicându-se principiile echilibr rii înc rc rii (load balancing în englez ). Datele pot fi stocate pe calculatoare diferite. îmbun t irea scalabilit ii prin introducerea arhitecturii RAC (Real Application Cluster).EXE) ci se ob ine un format intermediar care necesit existenta mediului FoxPro sau a versiunii RunTime (vitez sporit ). s-au ad ugat facilit i de stocare şi accesare a documentelor XML (eXtensible Markup Language). îmbun t ind astfel limbajul SQL. precum şi generatoare de machete. dar a fost extins cu multe instruc iuni şi func ii utile.02 ( anul 1989) • sintaxa se bazeaz pe Foxbase (şi deci pe dBase III). 1-18 . având în comun faptul c ele sunt legate între ele în re ea şi au puse la dispozi ie capacitatea de stocare şi procesare în ASM. grid-ul bazându-se practic pe cluster. • mediu de programare confortabil. • compilatorul nu genereaz cod executabil complet (. operare cu mouse-ul. de programe şi program de documentare automat a surselor. Versiunea 10g aduce ca noutate utilizarea tehnologiei grid ( g-ul vine de la grid). Practic.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice permite ca instruc iunile SQL de acces la date sa fie incluse în proceduri sau metode scrise în Java rezidente pe server sau pe sta iile client.7 Ap rând ca urmaş a lui DBASE III şi dotat astfel încât sa satisfac cerin ele unui SGBD modern. Dac un disc este ad ugat sau scos. Versiunea 1. cu editoare integrate. 1. FoxPro are una din cele mai atractive interfe e utilizator şi un compilator foarte puternic. permi ând recuperarea transparent a c derilor oric rui nod din re ea. Versiunea 9i a îmbun t it mecanismele de securitate a bazelor de date prin introducerea conceptului de baz de date virtual . • depanator (debugger) şi program de testare (trace) integrate în mediul de dezvoltare. Aceast arhitectur permite rularea unui singur server de baze de date pe mai multe calculatoare independente (noduri) care formeaz un complex. ASM redistribuie datele în mod automat. Aşa cum s-a procedat cu resursele de stocare la fel se utilizeaz în comun şi resursele de procesare. Sisteme de gestiune a bazelor de date relaţionale în FoxPro. Astfel s-a introdus stocarea dup principiul grid prin tehnologia ASM (Automatic Storage Management) care elimin necesitatea unui sistem de fişiere. cu mediu de dezvoltare integrat. prelucrarea simultan a mai multor fişiere.

• varianta profesional permite conectivitate client-server. • ruleaz pe re ele de calculatoare.0 (anul 1995) • utilizarea principiilor program rii orientate obiect (POO). 1-19 . după preluarea de către Micrososft) • versiune îmbun t it şi mult mai rapid . • îmbun t irea interfe ei cu utilizatorul. • module de asisten a utilizatorului (Table/Raport/Screen/Query/Label Wizard).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Versiunea 2. Versiunea 2. Versiunea 2. rapoarte. • este furnizat de asemenea în dou variante. • control superior al programatorului asupra evenimentelor din timpul rul rii. aplica ii). Visual FoxPro 3.0 (anul 1991) • compatibilitate sporit cu DBase IV (modul SQL incorporat. • import / export date în formate Excel.5 pentru DOS (anul 1993. • facilit i multitasking. Paradox. • sistem Help performant. • help senzitiv la context. • mediu orientat pe evenimente (programarea orientat eveniment). • prezen a unui Catalog Manager. • optimizare Rushmore îmbun t it . indecşi compuşi).6 pentru DOS (anul 1994) • mecanisme de convertire automat a elementelor DBase în elemente FoxProW. • este furnizat în doua variante: standard (pentru maşini cu procesor 8088 şi 80286) şi extins (pentru maşini cu procesor 80386 şi mai puternice). în regim multiutilizator. • utilizarea tehnologiei de optimizare Rushmore.5 pentru WINDOWS (anul 1993) • facilit i specifice mediului Windows: Dynamic Data Exchange (DDE). • controlul centralizat al perifericelor. • instrumente specifice de proiectare (generatoare de meniuri. Object Linking and Embedding (OLE). Versiunea 2.

• îmbun t iri ale limbajului de programare (clase.0 (anul 2003) • îmbun t iri ale IDE (Interactive Development Environment): Task Pane Manager.ODBC). • introducerea tipului autoincrement.0 SP2 Sedna CTP (anii 2004 . Toolbox. acesta convergând de-a lungul ultimilor 8 ani c tre Microsoft SQL Server. Visual FoxPro 8. Visual FoxPro 7. • conectivitate la date aflate la distan folosind clasa CursorAdapter.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • • • • • apropierea de modelul rela ional al bazelor de date (introducerea dic ionarului de date).0 (anul 2002) • editorul Visual FoxPro este îmbun t it cu tehnologia IntelliSense (autocompletare pe m sur ce se scrie cod). • ad ugarea de noi metode şi propriet i. extensii orientate obiect ale limbajului de programare. Visual FoxPro 6. • accesul datelor prin providerul OLE DB.. 1-20 . Visual FoxPro 9. • suport XML. • îmbun t irea mediului client-server. • inserarea rândurilor prin comanda SQL Select. • servicii web – ca şi obiecte (clase). etc. dezvoltarea rapid a aplica iilor prin gestionarul de aplica ii Project Manager.NET cuprinzând şi servicii Web XML. comenzi şi func ii noi). IntelliSense pentru fereastra Watch. • introducerea noii clase XMLAdapter şi clase XML Web Services.2008) • ultima versiune – anun ându-se stoparea dezvolt rii produsului de c tre Microsoft. apropierea FoxPro-Acces. • noi facilit i în programarea orientat -obiect şi web. • facilit i web.0 (anul 2000) • îmbun t irea Class Browser-ului pentru eficien a program rii. Visual FoxPro 5.0 (anul 1997) • simplificarea accesului la fişierele de date sub alt format (via Open DataBase Connectivity . extinderea instrumentelor de proiectare şi a num rului de asisten i. • solu ie compatibil .

suport bine pus la punct pentru XML. Avantaje în utilizarea FoxPro: • tehnici de optimizare performante. introducerea func iei inline ICASE( ) similar cu instruc iunea DO CASE. • limbaj performant de descriere şi manipulare a datelor. Tolbox-ul este dock-abil c tre Desktop sau alte ferestre IDE (în special s-a lucrat la dock-abilitate şi la clase şi func ii). • încorporarea unui modul SQL foarte rapid. Varbinary şi Blob). ca şi client COM şi COM server . lipsa dic ionarului de date la versiunile mai mici de 3. • utilizarea în re ele de microcalculatoare. îmbun t iri la limbajul SQL (eliminarea limit rii la 9 clauze de join şi subinterog ri în comanda SQL Select). îmbun t irea raport rii. orientate obiect. • mecanisme evoluate de conversie a programelor şi a datelor (DBaseFoxPro). nu prezint modalit i avansate de protec ie şi securitate a datelor. • include instrumente de proiectare de tip 4GL (4-th Generation Language). prezint dezavantaje în rol de server într-o arhitectur client-server. 1-21 . • mediu favorabil elabor rii programelor puternic modularizate şi structurate. nu este recomandat pentru WAN (Wide Area Network). eliminarea limit rilor pentru dimensiunea şirurilor (array) şi lungimea procedurilor.• • • • • • • Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice compatibilitate şi interoperabilitate m rit cu SQL Server pentru a facilita schimbul de date între cele dou produse (introducerea noilor tipuri de date Varchar. • instalarea modular în func ie de necesit i şi posibilit i. nu prezint intrinsec caracteristici client-server. • • • • • • • Dezavantajele sistemului FoxPro: relativa simplitate a mediului (nu se pot elabora aplica ii foarte complexe). nu este un sistem rela ional pur (de exemplu. viteza de execu ie este variabil (influen at de mul i factori). introducerea func iei CAST( ) pentru conversia între tipuri de date. compatibilitatea versiunilor nu este asigurat în toate cazurile.0).

în general. În continuare sunt prezentate sumar aceste elemente de baz ale mediului FoxPro. Fişier de date . în figura 2-22 . c tre dou categorii de utilizatori : • proiectan ii şi programatorii care scriu aplica ii în FoxPro.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 2 Concepte şi elemente de baza în FoxPro. proiect: fişier de date special ce integreaz elementele FoxPro care au ca scop realizarea unui grup de opera ii unitare şi care se foloseşte pentru generarea de aplica ii şi programe (tip EXE). urmând ca pe parcursul celorlalte laboratoare s se prezinte instruc iunile şi modalit ile de lucru cu aceste elemente. • utilizatorii finali care îşi pot administra cu uşurin datele.reprezint conceptul central al sistemului FoxPro Fişierele de date FoxPro au o organizare special ilustrat urm toare. raport : forma de afişare a informa iilor dintr-un fişier de date la ecran. aplica ie: program special ce integreaz elementele FoxPro care au ca scop realizarea unui grup de opera ii unitare. form): interfa a de afişare şi/sau de introducere a informa iilor într-un fişier de date. interogare: fişier de date virtual. respectiv pentru reg sirea rapid a informa iilor pe baza unor coduri. program: colec ie de instruc iuni FoxPro ordonate conform unui algoritm ce urm reşte. fişier index: colec ie de informa ii auxiliare asociate unui fişier de date cu rolul de a permite parcurgerea acestuia într-o anumita ordine. ob inut din unul sau mai multe fişiere de date fizice. Sistemul FoxPro se adreseaz . în principal. prelucrarea informa iilor din unul sau mai multe fişiere. • • • • • • • • FoxPro lucreaz cu urm toarele elemente de baz : fişier de date: colec ie de informa ii organizate matricial. folosind interfa a utilizator. interconectate între ele pe baza unor rela ii. având la baza principiul benzilor. machet (ecran. imprimant sau fişier.

num rul de articole. Pentru fiecare câmp se re in: numele. lungime şi se afl în articole diferite. COLOAN ARTICOL CÂMP Se disting dou p r i importante în acest fişier: zona propriu-zis de informa ii împ r it în rânduri numite articole şi coloane de câmpuri şi antet fişier în care se p streaz informa iile de organizare a zonei propriu-zise. data şi ora ultimei actualiz ri. COLOANA: toate câmpurile dintr-un fişier ce se caracterizeaz prin acelaşi nume. tipul. lungimea.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ANTET FIŞIER zona în care se p streaz informa iile despre structura fişierului şi anume: num rul de câmpuri (coloane) din fişier. Organizarea fişierului index este prezentat în figura urm toare: 2-23 . CÂMP: unitatea elementar de memorare în fişier ce se reg seşte la intersec ia dintre un articol şi o coloan . ARTICOL: por iune elementar a fişierului la care utilizatorul are acces la un moment dat. Fişier index Unui fişier de date FoxPro i se pot asocia unul sau mai multe fişiere index cu scopul de a permite reg sirea rapid a articolelor în func ie de cheile realizate pe baza unor câmpuri sau combina ii de câmpuri. tip. articolul este format din mai multe câmpuri. informa ii de index.

în primul rând. realizând astfel o interfa între utilizator şi sistemul FoxPro. Un raport con ine mai multe benzi pentru o grupare lizibil a informa iilor. dup op iune. Avantajul folosirii rapoartelor const . în primul rând. dup care. Cu alte cuvinte un fişier index reprezint perechi formate din valori şi numere de articol pentru care s-au ob inut aceste valori.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ANTET INDEX 1 2 i` n` Valoare cheie (ordonat ) Num r de ordine articol în fişier Valoare cheie: valorile câmpurilor sau combina iilor de câmpuri din fişierul de date ordonate cresc tor sau descresc tor. în existen a unui editor specializat în crearea şi modificarea acestor machete într-un mod facil. Perechile de coloane valoare cheie şi nr.0 s-a introdus un nou tip de fişier index şi anume fişierul multiindex compact (CDX). De asemenea limbajul de programare dispune de instruc iuni de lucru cu machete. Nr. ordine articol în fişier: numerele de ordine ale articolelor din fişier. c utarea în fişierul de date devine de asemenea simpl şi uşoar . în existen a unui editor specializat în crearea şi 2-24 . Avantajul c ut rii în fişierul de date printr-un fişier index asociat rezult tocmai din faptul c valorile sunt ordonate. Raportul – reprezint modalitatea prin care se pot realiza opera ii de afişare sau de tip rire a informa iilor din fişierele de date. prin evaluarea unei chei ordonate cresc tor sau descresc tor. Macheta – Crearea şi gestionarea unei machete are la baz un program special care realizeaz opera ii de afişare şi/sau opera ii de între inere a fişierelor de date. deci c utarea în index este relativ simpl şi rapid . ordine articol în fişier. prin ob inerea num rului de ordine al articolului c utat. Avantajul folosirii machetelor const . începând cu versiunea 2. ordine articol au nume unic relativ la fişier şi poarta numele de index (tag). În sistemul FoxPro. Num rul de perechi n` este mai mic sau egal ca num rul de articole din fişierul de date asociat. Fişierul multiindex se aseam n cu cel monoindex numai ca are mai multe perechi de coloane valoare cheie-nr.

editoare. integrator de obiecte FoxPro. sistemul FoxPro dispune de un editor specializat în proiectarea de programe prin integrarea diferitelor elemente FoxPro. care nu necesit nici un fişier suplimentar pentru a fi lansat în execu ie.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice modificarea acestora. 2-25 . istoric al comenzilor cu posibilit i de editare ca la un program (fereastra Command). FoxPro dispune de un editor specializat în crearea şi modificarea lor. etc. Avantajul folosirii interog rilor const în economia de spa iu necesar memor rii unui fişier virtual fa de unul fizic echivalent. Fereastra de Comanda. ). care necesit existen a unor biblioteci FoxPro. Filer. linia de stare). Proiectul – este un fişier de date special. 2. B C++ etc.). help. care se foloseşte pentru generarea de aplica ii sau programe executabile. Sistemul FoxPro este capabil s creeze dou tipuri de formate executabile : primul numit “compact”. bazat pe no iunea de proiect.1 Descrierea mediului integrat FoxPro este un sistem ce dispune de un mediu integrat compus din modul de execu ie. Interogarea (Query) – Reprezint un fişier de date virtual ce înglobeaz date din mai multe fişiere fizice de date prin stabilirea de rela ii între câmpurile de acelaşi tip. generator (pentru machete. modul SQL inclus. Aplica ia – ca program integrator de elemente FoxPro. Programul – reprezint unitatea elementara în care se pot grupa instruc iunile. aplica ii). La nivelul sistemului. conform unui algoritm. calculator. interog ri. depanator simbolic la nivelul limbajului (Trace-Debug). Se permite de asemenea filtrarea informa iilor (câmpuri şi/sau articole) din oricare din fişierele fizice. Fa de acestea. programele se între in printr-un editor de texte încorporat. în care este suficient s definim informa iile (text utilizator şi câmpuri) care se vizualizeaz în fiecare banda pentru ca afişarea/tip rirea informa iilor s aib loc în forma dorit . Pascal. iar al doilea numit “stand-alone”. compilator încorporat în sens FoxPro. precum şi din între inerea uşoar a elementelor componente. interfa utilizator (formata din Meniul Sistem. se poate realiza şi pe c i tradi ionale folosind editorul de programe şi scriind efectiv un astfel de program. alte utilitare (sistem de gestiune a fişierelor DOS-System. Metoda aceasta este specific majorit ii sistemelor de dezvoltare programe în diferite limbaje de nivel înalt (B. meniuri.

Zona de memorie alocat are 8 octe i. Tipurile de date acceptate de limbaj sunt: numeric. valorile numerice returnate de func ii.) ** . Lungimea zonei de memorie ocupate este fix . modul de codificare a datelor în memoria calculatorului. logic.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 2. Lungimea zonei de memorie ocupat este fix şi este de 4 octe i.2-26 . Zona de memorie alocat pentru acest câmp este dependent de lungimea declarat de utilizator la crearea tabelului. memo. Pentru mai multe detalii asupra func iilor sau instruc iunile prezentate se recomand a se consulta Help-ul. semnifica ia acestor date. comenzile şi func iile referitoare la datele de tipul respectiv. • Tipul numeric dublu (Double) – datele de acest tip reprezint numere memorate în virgula mobil .sc dere (.Exemplu A=$500.47 Operatori algebrici Grupeaz expresiile Ridicare la putere Înmul ire. Se pot eviden ia urm toarele: • Tipul numeric simplu (Numeric sau Float) – este tipul numeric clasic. dat calendaristic . Se foloseşte pentru a stoca valori numerice în câmpurile unui tabel. Tipul numeric – memoreaz numere pozitive/negative cu punct zecimal fix. operatorii ce se aplic acestor date. de 8 octe i. • Tipul monetar (Currency) – se foloseşte la memorarea valorilor exprimate în bani.2 Tipuri de date în FoxPro. Se prefer folosirea acestui tip de dat atunci când folosim valori întregi. general. O valoare de acest tip se declar prin introducerea în fa a valorii numerice a simbolului monetar ($). • Tipul numeric întreg (Integer) – este specific numerelor întregi. lungimea câmpului numeric este limitata la 20 cifre (semnul şi punctul zecimal ocupa câte o cifra !). şir de caractere. Pentru fiecare tip de dat se vor prezenta: modalitatea de specificare a tipului de dat .împ r ire. constante numerice.% +. variabile de tip numeric. şi se foloseşte pentru memorarea numerelor foarte mari. operatori. ^ *. mai mari de 9999./. funcţii Un tip de dat reprezint o caracteristic a datelor prin care se stabileşte ce opera ii se pot executa asupra lor.modulo Adunare.

-1 pentru cele mai mici ca zero sau 0 Func ii de aproximare a datelor numerice: INT(<expn >) trunchiaz rezultatul unei expresii numerice la partea întreag ROUND ( < expN1>. != Mai mic sau egal cu <= Mai mare sau egal cu >= Comanda de control pentru afişarea valorilor cu un anumit num r de zecimale este : SET DECIMALS TO Efect: determin num rul minim de cifre zecimale ce sunt afişate în cazul în care nu se specific un format explicit de afişare. Exemplu : ? 5/11 SET DECIMALS TO 4. Implicit acest număr este 2. Daca expN2 este negativ. # . se rotunjeşte la zero CEILING(<expn >) returneaz cel mai apropiat întreg mai mare sau egal ca num rul expn FLOOR(<expn >) returneaz cel mai apropiat întreg mai mic sau egal ca num rul expn ABS(<expn>) 2-27 . <expN2>) returneaz num rul expN1 rotunjit la num rul de zecimale date de expN2.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Operatori rela ionali Mai mic decât < Mai mare decât > Egal = Diferit de <> . ? 5/11 Funcţii aplicabile tipului de dată numeric Func ii referitoare la semnul datelor numerice: returneaz valoarea absoluta a unei expresii numerice SIGN(<expn >) returneaz un num r indicând semnul matematic al expresiei numerice transmise ca parametru şi anume: +1 pentru numere > 0.

< exp3>) sau MIN(< exp1>. ? (1<=4) AND (5>3) . NOT AND OR Exemplu : Operator logic Grupeaz expresiile Nega ie logic ŞI logic SAU logic ? NOT (1=3) .) ! .F. < exp2>.T. < exp3>) RAND (< expN>) returneaz maximul / minimul dintre dou expresii numerice returneaz un num r aleator în intervalul 0 şi 0. restul împ r irii <expN1> la <expN2>. Implicit este 0. < exp2>. Semnul rezultatului este cel al <expN2>. (. pentru a stoca valorile returnate de func ii.1000001.T.F. valoarea nul este tratat de FoxPro ca fiind . F r parametru sau cu o valoarea negativa se foloseşte pentru ini ializarea ceasului sistem. ? 6<3 OR 4*2=9 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ii matematice elementare: returneaz rezultatul ridic rii constantei "e" la puterea dat ca parametru LOG(<expn >) returneaz logaritmul natural / zecimal pentru num rul specificat SQRT(<expn >) returneaz valoarea radicalului din num rul (pozitiv) specificat MOD ( <expN1>.) False.F. <expN2>) returneaz un întreg. Se foloseşte pentru a stoca valori în câmpurile de tip logic ale tabelelor din baze de date. Tipul logic – are un singur octet lungime şi poate memora doua valori: ‘adev rat’ (. variabile de tip logic sau alte expresii logice. 2-28 .) True şi ‘fals’ (.T. EXP(<expn >) MAX (< exp1>.999999.

Formatul de afişare LL/ZZ/AA AA. FoxPro trateaz datele calendaristice invalide ca date calendaristice vide.AA ZZ-LL-AA AA/LL/ZZ LL-ZZ-AA LL/ZZ/AA ZZ/LL/AA AA/LL/ZZ 2-29 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tipul dată calendaristică – are 8 octe i lungime.ZZ ZZ/LL/AA ZZ/LL/AA ZZ. datele de acest tip sunt memorate intern de FoxPro ca cifre ASCII în format AAAALLZZ.LL. ceea ce permite efectuarea de calcule aritmetice cu ele. Implicit FoxPro nu permite introducerea de date inexistente în fişierele de date.LL. OFF – se afişeaz anul pe 4 cifre SET MARK TO [<eC>] Efect: Stabileşte caracterul delimitator. Formatul de afişare a datelor calendaristice este controlat de comanda: SET DATE [TO] american | ansi | british | french | german | italian | mdy | dmy | ymd Tipul de dat calendaristic AMERICAN ANSI BRITISH FRENCH GERMAN ITALIAN JAPAN USA MDY DMY YMD Exemplu: store {^2006-06-21} to data ? DATA 06/21/2006 SET DATE BRIT ? DATA 21/06/2006 SET CENTURY ON | OFF Efect: ON – se afişeaz anul pe 2 cifre.

Fiec rui caracter i se poate asocia un num r reprezentând pozi ia acestuia în cadrul şirului (primul caracter are pozi ia 1). returneaz num rul lunii pentru data specificat returneaz un şir de caractere ce reprezint numele lunii din cadrul unei expresii de tip dat returneaz valoarea numeric a anului pentru data specificat converteşte o dat de intrare de tip calendaristic în formatul zi-luna-an (returneaz un şir de caractere) converteşte o dat de intrare tip calendaristic în formatul lun -zi-an (returneaz un şir de caractere) Func ii pentru controlul timpului TIME(<eN>) returneaz un şir de 8 caractere în formatul HH:MM:SS ce reprezint ora exact a sistemului CDOW(<eD>) DAY(<eD>) MONTH(<eD>) CMONTH(<eD>) YEAR(<eD>) DMY ( <expD>) MDY ( <expC>) Instruc iuni pentru controlul formatului de afişare al ceasului sistem: SET CLOCK ON | OFF SET CLOCK TO [<ROW>. Şirul de caractere este o mul ime ordonat de caractere ce se trateaz ca un tot unitar.<COL>] SET HOURS TO [12 | 24] Tipul de dat caracter – permite memorarea oric rui caracter ASCII. limita impus fiind de 254 caractere.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ii pentru tipul de dat calendaristic DATE() DOW(<eD>) ob inerea datei curente a sistemului returneaz valoarea numeric a zilei s pt mânii dintr-o expresie de tip dat calendaristic (începe cu 1 pentru duminic ) returneaz un şir de caractere ce reprezint numele zilei din cadrul s pt mânii pentru dat specificat returneaz num rul zilei din cadrul lunii pentru data specificat . 2-30 .

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Se foloseşte pentru a stoca valori în câmpurile de acest tip ale tabelelor din baza de date.T. # <= sau =< >= sau => $ == mai mic.>. indiferent de tipul lor. valorile returnate de func ii pentru date calendaristice.) sau fals (.F. LEFT (<expC>.= <>./<memo returneaz un şir de caractere ce indic primele <expN> caractere din <expC> 2-31 . constante de tip dat calendaristic . Indicele primului caracter dintr-un şir este 1. egal diferit de mai mic sau egal mai mare sau egal folosit pentru concatenarea şirurilor de caractere identic Observa ii: Operatorii de comparare returneaz un rezultat adev rat (. Exemplu : expresia :‘strada_ ‘+’Geroge _Cosbuc’ dup evaluare devine : ‘strada_George_Cosbuc’ expresia ‘Salut ‘-’ prieteni !’ dup evaluare devine: ‘Salut prieteni! ‘ Funcţii pentru tipul de dată caracter returneaz o valoare numeric ce indic LEN (<expC>. mai mare.<expC>/<memo returneaz un num r ce indic pozi ia de la care începe primul şir de caractere ca subşir al field>) celui de-al doilea.) putând fi utiliza i în compararea a dou expresii de acelaşi tip. Compararea a 2 şiruri de caractere se face prin compararea codurilor ASCII ale caracterelor de pe pozi iile echivalente. spa iile finale fiind duse la sfârşitul şirului rezultat Operatori de comparare <. <memo num rul de caractere dintr-o expresie de tip field>) caracter sau dintr-un câmp memo AT (<expC>. variabile de tip dat calendaristica. eventualele spa ii finale ale fiec rui şir r mânând intre şiruri concateneaz şiruri. Operatori de concatenare + concateneaz şiruri.

'IN CE POZITIE ESTE LITERA P ? ') ? AT ('AB'.<expC2>) Exemple : ? LEN ('ACEST şir ARE 26 CARACTERE') ? AT ('P'.<expC2>) MIN (<expC1>./<memo field>. 'ABAC.F.3) ? RIGHT ('CALCULATOR'. returneaz şirul vid .3) ? SUBSTR('CALCULATOR'. sau . se returneaz <expC> în întregime extrage şi returneaz un şir de caractere compus din ultimele <expN> caractere ale <expC> .<number of characters>) LOWER(<expC>) UPPER(<expC>) LTRIM (<expC>)/RTRIM (<expC>) TRIM (<expC>) CHR (<expC>) MAX (<expC1>.<expC2>) SPACE (<expN>) LIKE (<pattern>.4.dac <expN> este zero sau mai mic ca zero.3) ? LOWER('AAAAAAAAAAAAAA') 2-32 .dac <expN> este zero. <expN>) .ABACD'. se returneaz <expC> în întregime extrage şi returneaz din expC un subşir de caractere ce începe în pozi ia specificat <start position> de lungimea indicat de <number of characters> converteşte literele mari în litere mici converteşte literele mici în litere mari şterge spa iile de la stânga/ dreapta unui şir de caractere şi returneaz rezultatul şterge spatiile de la sfârşitul unui şir de caractere şi returneaz rezultatul converteşte o expresie numeric într-una de tip caracter returneaz maximul/minimul dintre dou expresii de tip caracter genereaz un şir de caractere compus din <expN> spa ii compara cele dou şiruri de caractere returnând .dac <expN >este mai mare decât < expC>.3) ? LEFT ('CALCULATOR'./<memo field>.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ield>.ABACD.T. RIGHT (<expC>.2) ? AT ('AB'.dac <expN > este mai mare decât <expC>. 'ABAC. <expN>) SUBSTR (<expC>. returneaz şirul vid .ABCDE'. <start position>.

39. 'AR') Tipul memo – permite memorarea cantit ilor mari de text (f r limitarea la 254 caractere impus pentru datele de tip Caracter). LTRIM(c2) USE AG ? 'SALARIUL D-LUI(D-NEI) '+ RTRIM(nume) + ' ESTE ' + LTRIM(str(sal_baza)) ? CHR(65) ? MAX(54. 'BBB'. 'BBB'. O tabel ce con ine un câmp memo are asociat un fişier cu extensia FPT numai pentru datele memo.DATE()) ? MAX('AAA'. 'CCC') ? LIKE ('CARACTER'. Editarea repetat a datelor memo conduce la fragment ri şi se recomand utilizarea comenzii PACK sau PACK MEMO ce determin economie de spa iu pe disc şi îmbun t eşte viteza de depozitare a datelor. De asemenea permite memorarea de fişiere executabile. Pentru stabilirea dimensiunii blocurilor dintr-un câmp memo se poate folosi comanda SET BLOCKSIZE. 10*12. evident. imagini. 2*3 ) ? MAX({31/01/2001}. Utilizarea câmpurilor memo se recomand în situa iile în care apar diverse comentarii şi. 'AR') ? LIKE ('RA'. Singura limitare este dat de dimensiunea spa iului liber pe disc. 40) ? MAX(2^2. 'AR') ? LIKE ('AR'.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ? UPPER('bbbbbbbb') STORE 'casetofon' TO c1 STORE ' portabil' TO c2 ? c1. Informa iile din câmpul memo nu sunt memorate în acelaşi fişier cu restul câmpurilor. Majoritatea programatorilor folosesc dimensiunea minima de 33 octe i (valoarea implicit este de 64 octe i) pentru un 2-33 .c2 ? c1. sunet. 'ABC') ? MAX('AAA'. nu în toate înregistr rile (ar fi ineficient s se stabileasc un câmp caracter cu lungimea 70 doar pentru explica iile care apar în câteva înregistr ri).

Observa ie: Prioritatea în cazul folosirii într-o expresie a mai multor operatori este urm toarea : 1. toate opera iile ce sunt pe acelaşi nivel se execut de la stânga la dreapta. care asigur fişierului memo. iar <decimal> indic num rul de zecimale Din şir de caractere în num r converteşte un şir de caractere într-un VAL (<expC>) num r. <lenght> indic num rul total de caractere al şirului creat.<lenght>] de caractere. operatori matematici şi pe şiruri de caractere 2. grafic . 2. sunete.3 Funcţii pentru conversii între tipuri de date Din num r în şir de caractere converteşte un num r expN într-un şir STR (<expN>[. Num rul de zecimale este cel dat de SET DECIMALS Din şir de caractere în dat converteşte o dat de intrare tip şir de CTOD (<expC>)/{ expC) caractere (delimitate ca şir de caractere) într-o variabila de tip dat calendaristic . o eficien mai mare în ceea ce priveşte dimensiunea Tipul de dat general – este utilizat pentru legarea şi înglobarea obiectelor (OLE) cum ar fi desene. în formatul setat prin SET DATE 2-34 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice bloc. returnând un şir de [. returnând rezultatul. operatori logici 4. Pentru modificarea ordinii opera iilor se pot folosi parantezele rotunde. operatori de comparare 3.<decimal>]) caractere. documente.

6. Deschiderea unui fişier (tabel) de date se face folosind comanda : USE [<file>|?][IN <expN1>][AGAIN] [INDEX <index file list>| [ORDER[<expN2>|<idx index file>|[TAG]<tag name> OF<cdx>] [ASCENDING|DESCENDING]]]] [ALIAS <alias>][EXCLUSIVE][SHARED][NOUPDATE] Clauze: AGAIN – deschiderea aceluiaşi fişier în mai multe zone de lucru.4.0) STORE '12' TO A STORE '13' TO B ? VAL(A) + VAL(B) 2.4.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Din dat în şir de caractere converteşte o dat de intrare de tip DTOC (<expC>)/{ expC) calendaristic în şirul de caractere corespunz tor mm/dd/yy Exemple: ? STR(25. Instruc iunile referitoare la fişierele de date lansate la un moment dat vor ac iona asupra fişierului deschis în zona curent activ . acestuia i se atribuie un nume numit “alias” (pseudonim).1) ? STR(25.J). EXCLUSIVE – pentru lucru în re ea..4 Zone de lucru FoxPro foloseşte aşa numitele “zone de lucru” (în num r de 255) pentru manipularea fişierelor de date. Numai o zona de lucru din cele 255 este curent la un moment dat. Comanda pentru selectarea unei zone de lucru are sintaxa: SELECT <eN>|<eC> unde :<eN> = num rul zonei de lucru activate.6. Observa ii: dac eN=0 se selecteaz prima zon de lucru neocupat . <eC> = şir de caractere ce reprezint aliasul tabelei. La deschiderea unui fişier de date într-o zona de lucru. NOUPDATE – nu permite modificarea datelor (structur şi con inut). 2-35 . Identificarea zonelor de lucru se face cu numere de la 1 la 255 (pentru primele 10 zone se pot folosi literele A. SHARE.

Un program care prelucreaz o baz de date rela ional citeşte mai întâi dicţionarul de date datele şi apoi.<scale>])[. Ea are asociat un fişier special numit dicţionar de date (cu extensia. cunoscându-i structura complex .dbc) se refer la o baz de date rela ional .5 Construirea bazelor de date relaţionale. Închiderea unui fişier (tabel) de date se face folosind comanda : USE Deschiderea unei baze de date se face folosind comanda : OPEN DATABASE [<file> | ?] Închiderea unei baze de date se face folosind comanda : CLOSE DATABASES (închide toate fişierele de date şi index asociate deschise) CLOSE ALL (închide şi ferestrele activate anterior) 2. rela iile permanente între tabele.dbc) în care sunt memorate date referitoare la baz în ansamblul sau. descriind un anumit tip de obiecte. Prin specificarea numelui fişierului de date acesta se deschide în zona de lucru curent (dac nu se specific zona de lucru). O baz de date rela ional reprezint o structur folosit la memorarea şi gestionarea datelor.. Construirea unei tabele simple CREATE TABLE|DBF dbf_name> (< fname1><type>[(<precision>[.dbf) sau vederi.. În Visual Fox Pro termenii de “baza de date” şi “tabela” nu sunt sinonimi. atunci fişierul anterior deschis se închide automat. Termenul de baz de date (fisier. etc. care este un container cu informa ii despre unul sau mai multe tabele (fişier. cum ar fi: tabelele componente.<fname2>.]]) Clauze: <dbf_name> = numele tabelei create (tabelul este deschis într-o zona de lucru nou 2-36 . procedeaz la prelucrarea datelor respective.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ALIAS – aliasul atribuit de utilizator fişierului de date. Dac se deschide un fişier de date într-o zona de lucru în care s-a deschis anterior un alt fişier. Componente. procedurile stocate.

O alta modalitate o constituie folosirea unui fişier intermediar. <type> C D N L M <precision> n n ALTE COMENZI <scale> d Descriere Şir de caractere de lungime n Data calendaristic Numeric. din meniul File. de l ime n cu d zecimale Logic Memo Modificarea structurii unei tabele de date active se face prin comanda: MODIFY STRUCTURE Vizualizarea structurii unei baze de date: DISPLAY STRUCTURE [IN <expN>|<expC>][TO PRINTER [PROMPT] LIST STRUCTURE[NOCONSOLE][TO PRINTER |TO FILE<file>] O alta metod de creare a fişierelor de date din fişiere înrudite o reprezint comanda: COPY STRUCTURE TO <file> [FIELDS <field list> [WITH CDX ] prin care se realizeaz copierea structurii (eventual par iale) a unei tabele de date în structura alteia.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice <fname1>. alege i op iunea New şi Database.<fname2> = numele câmpurilor din noul tabel creat. ceea ce conduce la afişarea pe ecran a unei ferestre în care 2-37 . Crearea unei baze de date Pentru a crea o baza de date folosi i comanda: CREATE database <dbc_name> sau.un caracter ce indica tipul datei pentru câmpul respectiv. <type> . folosind comenzile: COPY STRUCTURE EXTENDED TO <file> [FIELDS <field list> | FIELDS LIKE <skel> | FIELDS EXCEPT <skel>] şi respectiv: CREATE [<file1>] FROM [<file2>] Pentru detalii urm ri i Help-ul. dup care ap sa i butonul New File.

rela iile permanente dintre tabele. cele vechi (de maxim 10 caractere) nu mai pot fi folosite. numit Database.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice trebuie specificat numele noii baze de date şi calea în care aceasta va fi salvat . care reprezint tabele virtuale construite pe baza unuia sau mai multor câmpuri din mai multe tabele. cu urm toarele observa ii: aceste nume nu trebuie sa con in spa ii libere. rela ii ce nu vor fi şterse odat cu terminarea programelor de prelucrare în care au fost definite (cum este cazul rela iilor temporare intre tabelele). care pot fi apelate în secven ele de cod asociate tabelelor componente.Unei tabele i se poate ataşa un nume lung de maxim 128 caractere. • • • 2-38 . care reprezint mecanismul de accesare a datelor din alte sisteme. • • • • Caracteristicile tabelelor rela ionate Numele lungi pentru tabele şi câmpurile acestora . iar la meniul sistem se ad uga un nou submeniu. care conduce la o mai buna lizibilitate. conexiuni. cum ar fi : New table _ se creeaz o nou tabel în baza de date Add Table _ se ad uga la baz o nou tabel existent pe disc O baz de date rela ional include: • • mai multe tabele cu propriet ile descrise anterior. vederi. daca o tabel a fost creat mai întâi ca fiind una simpl şi apoi a fost inclus într-o baz de date. Aceast regul este valabil şi pentru numele câmpurilor dintr-o tabel . Comentarii şi observaţii referitoare la tabelele legate şi la câmpurile componente Deşi comentarea tabelelor şi a câmpurilor acestora într-o baz de date nu este una dintre cele mai puternice facilit i. este bine ca ea sa fie folosit pentru o mai uşoar documentare ulterioar sau pentru o mai bun în elegere a modului de concepere. proceduri şi func ii asociate bazei de date. care con ine op iunile necesare realiz rii opera iilor specifice. Pe ecran este deschis fereastra Constructorului de baze de date (Database Designer). datele referitoare la tabele şi rela iile dintre ele sunt memorate în dic ionarul bazei de date şi sunt restabilite automat la deschiderea acesteia. odat definite numele lungi pentru câmpurile acesteia. sistemul nu face diferen a între litere mari şi mici.

Secvenţe de cod asociate evenimentelor de manipulare a unei tabele legate Manipularea unei tabele se reflect prin opera iile de ad ugare de noi înregistr ri. definit de utilizator (de exemplu: “Regula de validare este înc lcat ”). Se poate preciza deasemeni şi o expresie a c rei evaluare va conduce la valoarea ce se va înc rca automat. care poate fi cel implicit al sistemului sau unul personal.99 desemneaz o valoare numerica afişat cu 3 cifre în fa a punctului zecimal şi dou dup acesta (vezi clauza Picture). Observa ie: Validarea la nivel de înregistrare se declanşeaz dup cea la nivel de câmp. care s serveasc la formatarea datelor atunci când aceste vor fi afişate (de exemplu când se foloseşte comanda browse). opera ia se consider corect .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Formatul de afişare şi citire a câmpurilor tabelelor legate Pentru fiecare câmp se poate specifica un format de afişare implicit. Valoarea respectiv trebuie de s fie de acelaşi tip ca şi câmpul. Observa ii : Evaluarea condi iei are lor doar în momentul în care se introduc sau modific datele din câmpul respectiv. se consider c valoarea introdus este corect . Dac expresia returneaz un rezultat adev rat. Formatul de afişare reprezint un şir de caractere format dintr-o serie de coduri. opera ia nu este acceptat şi se genereaz un mesaj de eroare care poate fi cel implicit al sistemului sau cel definit de proiectantul bazei de date. În expresia de validare se pot încorpora func ii utilizator sau secven e de program destul de complexe. constând într-o expresie logic care va fi evaluat în cazul în care se adaug noi înregistr ri. se modific cele existente sau se şterg înregistr ri. dac nu. modificarea celor existente sau ştergerea unor înregistr ri. dar înaintea secven elor de cod asociate evenimentelor de manipulare a tabelei. Validarea la nivel de câmp Pentru un câmp al unei tabele legate se poate preciza o expresie logic care se evalueaz în momentul schimb rii valorii câmpului. Dac valoarea expresiei este adev rat . un format de afişare de tipul 999. dac nu se afişeaz un mesaj de eroare. în func ie de care sistemul stabileşte modul de prezentare a datelor respective. Pentru 2-39 . Validarea la nivel de înregistrare Pentru o tabel ce apar ine unei baze de date se pot defini reguli de validare la nivel de înregistrare. Valorile implicite ale câmpurilor Pentru fiecare câmp al tabelei se poate preciza o valoare implicit care sa fie înc rcat automat la ad ugarea unei noi înregistr ri. De exemplu.

<expr2>]]|NOINIT][LOCK <expN2>] [NOAPPEND][NOCLEAR] [NODELETE] [NOEDIT|NOMODIFY] [NOLINK][NOMENU][TITLE <expC4>][VALID [:F] <expL2> [ERROR <expC5>]][WHEN <expL3>] [WIDTH <expN5>] [[WINDOW <window name1>][IN [WINDOW] <window name2> [COLOR SCHEME <expN6>| COLOR <color pair list>] 2-40 − − − . NODELETE împiedica marcarea pentru ştergere. NOMENU împiedica accesul la linia menu. WHILE se pot parcurge toate articolele din tabel . <expN1> indic cu al câtelea articol s se înceap editarea.<expN1>]][STYLE <expC2>][FREEZE <field>] [KEY <expr1> [.<expN1>]] [STYLE <expC2>][FOR <expL1>][FORMAT][FREEZE <field>][KEY <expr1>[. se trece la precedentul sau urm torul articol cu s geata sus sau jos. se pot ad uga articole în tabela prin CTRL/N. NOCLEAR p streaz ultimul articol pe ecran dup ce se iese din EDIT. se trece de la un câmp la altul cu tasta TAB. BROWSE [FIELDS <field list>][FONT <expC1> [.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice fiecare dintre aceste evenimente se pot specifica secven e de cod care se execut la apari ia evenimentului respectiv. Observa ie : secven ele de cod asociate evenimentelor de manipulare a tabelei legate se declanşeaz dup valid rile la nivel de câmp şi la nivel de înregistrare.<expr2>] [NOAPPEND] [NOCLEAR] [NODELETE] [NOEDIT | NOMODIFY] EDIT este comanda ce permite afişarea şi modificarea con inutului unui articol al tabelei sau al unui fişier creat cu CREATE QUERY/VIEW − − − − − − dac nu se indic un interval <scope> sau o condi ie FOR. daca nu s-a specificat NOAPPEND. La terminarea comenzii se revine la locul de unde a fost lansat . închiderea ferestrei de editare se face cu CTRL/END pentru a salva toate modific rile sau cu ESC pentru abandon. NOEDIT împiedica modificarea datelor.6 Comenzi pentru vizualizarea şi modificarea datelor din tabele EDIT [FIELDS <field list>][<scope>][FOR <expL1>][WHILE <expL2>] [FONT <expC1> [. 2.

pentru o mai bun delimitatorul. − se pot adaug date şi din fişiere de alt tip. WIDTH limiteaz dimensiunea coloanelor pentru câmpurile caracter. unde este cazul. se copie doar câmpurile comune celor dou tabele . dac nu se indica TYPE se presupune ca este un fişier surs tip dbf. afişarea se face sub forma de tablou. clauzele Font şi Style determinând tipul şi dimensiunea literelor . FREEZE permite men inerea cursorului în acelaşi câmp al tabelei . nu doar din DBF. Dac sursa şi destina ia sunt DBF. APPEND FROM <file> |? [FIELDS <field list> | FIELDS LIKE <skel> | FIELDS EXCEPT <skel>] [FOR <expL>][[TYPE] [DELIMITED [WITH TAB | WITH <delimiter> APPEND permite ad ugarea unuia sau mai multor articole din fişierul surs specificat la sfârşitul tabelei active. datele de tip caracter în exces se pierd iar cele numerice sunt înlocuite de asteriscuri. WINDOW activeaz o fereastra în care se va afişa tabelul. dac SET DELETED este OFF se copie şi articolele marcate pentru ştergere (dar nu şi marcajul) . în ordinea câmpurilor din tabel sau a celor specificate în FIELDS. în pozi ia de articol curent f r op iuni se lanseaz introducere datelor în tabel 2-41 . Coloanele ce nu apar în tabel sunt ignorate. dac un câmp din surs este mai mare decât omologul sau din destina ie. − − − − − − − − − INSERT [BEFORE][BLANK] sau APPEND [BEFORE][BLANK] INSERT adaug un nou articol în tabel . se pot importa date din fişiere de mai multe tipuri. dac structurile celor dou fişiere nu corespund se afişeaz mesajul “ 0 row(s) inserted”.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice BROWSE este comanda ce permite modificarea sau ad ugarea de articole întro tabel : − − − − − dac nu este deschis nici o tabel se solicit numele celei dorite. inserare a datelor se specific . câmpurile calculate sunt accesibile doar la citire. comanda este asem n toare cu EDIT. FIELDS permite alegerea câmpurilor şi a ordinii de afişare.

ZAP ZAP elimin toate articolele din tabel . încheierea introducerii datelor se face cu CTRL/END. BLANK insereaz un articol gol. nu mai pot fi ref cute. de alt tip (implicit fişierul se consider a fi de tip. Dac articolele au fost şterse cu ZAP sau PACK. − ştergerea este logic . LIST RECALL [<scope>] [FOR <expL1>] [WHILE <expL2>] [NOOPTIMIZE] RECALL anuleaz marcajul pentru ştergerea articolelor specificate din tabel. PACK PACK şterge fizic articolele marcate pentru ştergere. EXPORT TO <file> [FIELDS <field list> | FIELDS LIKE <skel> | FIELDS EXCEPT <skel>] [<scope>][FOR <expL1>] [WHILE <expL2>][NOOPTIMIZE][TYPE]DIF|MOD|SYLK|WK1|WKS|WR1| WRK|XLS] EXPORT transfer datele dintr-un fişier în altul. Implicit se marcheaz articolul curent. dac SET CARRY este ON se copie în articolul inserat con inutul articolului precedent. 2-42 . articolele putând fi readuse cu RECALL − ştergerea fizic se face cu comanda PACK − articolele marcate pentru ştergere sunt marcate cu o stelu a în prima pozi ie la folosirea comenzilor DISPLAY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice − − − − − func ioneaz ca APPEND. permi ând ad ugarea mai multor articole succesiv. Toate fişierele index deschise sunt automat reindexate.dbf) DELETE [<scope>] [FOR <expL1>] [WHILE <expL2>] [NOOPTIMIZE] DELETE marcheaz pentru ştergere articolele specificate din tabel. Toate fişierele index deschise sunt automat reindexate. BEFORE face ca inserarea s se fac înaintea articolului curent.

Se cere un mesaj de confirmare pentru ştergere. − se poate indica tipul de sortare pentru fiecare câmp în parte. sort rile se fac în ordine cresc toare. − C impune s nu se diferen ieze literele mari de cele mici şi se poate combina cu A şi D.[<scope>] [FOR <expL1>] [WHILE <expL2>] REPLACE schimb con inutul câmpurilor specificate din tabela activ . Dac este ON se lucreaz în majoritatea comenzilor ca şi cum articolele marcate pentru ştergere nu ar exista. f r ca acesta s se piard . SET DELETED ON / OFF Determin dac articolele marcate pentru ştergere sunt sau nu luate în considerare de c tre alte comenzi. <field2> WITH <expr2> [ADDITIVE]]. în care articolele din tabela activ sunt sortate în ordinea câmpurilor specificate. iar RECALL ALL nu va g si nici un articol REPLACE <field1> WITH <expr1> [ADDITIVE] [. indiferent de starea SET DELETED. implicit se previne pierderea articolelor dac se comanda crearea unui fişier cu acelaşi nume cu unul deja existent sau dac se d ZAP. − nu se pot face sort ri dup câmpuri logice sau memo.. − implicit. A indic ordine cresc toare.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SET SAFETY ON / OFF Dac este ON. implicit doar articolul curent. Comenzile INDEX şi REINDEX lucreaz cu toate articolele. Dac se doreşte înlocuirea în câmpul care este cheie primar nu trebuie folosite op iunile SCOPE/ FOR /WHILE. 2-43 .. şi s nu fie deschis. D descresc toare. cu condi ia ca pointerul de articol s nu fie pe EOF. − dac exist deja un fişier cu numele indicat se va scrie peste acesta. ADDITIVE se refer doar la câmpurile memo şi înseamn ad ugarea la vechiul con inut. SORT TO <file> ON <field1>[/A|/D][/C][..<field2>[/A|/D][/C]. − fişierul rezultat trebuie sa fie diferit ce cel de origine.] [ASCENDING|DESCENDING][<scope>][FOR <expL1>][WHILE <expL2>][FIELDS <field list>|FIELDS LIKE <skel>|FIELDS EXCEPT <skel>][NOOPTIMIZE] SORT creeaz o nou tabel .

Utiliza i operatorii (concatenare şi rela ionali) defini i pentru şirurile de caractere. 3. Testa i func iile: SUBSTR(). CHR(). Afişa i data curent în diferite formate (prezentate în tabelul din carte). Denumire câmp 1 Cod_ID 2 Nume 3 Prenume 4 Adresa 5 Oras_Rez 6 Tara_Rez 7 Data_nast 8 Meserie 9 Loc_Munca 10 Tel_a 11 Tel_s 12 Tel_m 13 Fax 14 Email structura urm toare. LEN(). Consulta i con inutul noului fişier. ALLTRIM().9. AGENDA Nr. folosind comanda : CREATE Agenda1 2-44 .Crt. Şterge i logic şi apoi fizic articolele cu numerele 4.13.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 2. Testa i func iile de conversie între diferite tipuri de date.14. 5. AGENDA1. folosind comanda Tip câmp Num Char Char Memo Char Char Date Char Memo Num Num Num Num Char Lungime câmp 4 25 25 15 15 15 15 15 15 15 25 Folosi i comanda COPY STRUCTURE EXTENDED TO şi crea i fişierul STRU_AGD.8. LOWER(). Construi i structura unei baze de date noi. Afla i în ce zi cade 1 ianuarie a anului viitor şi a câta zi din s pt mân este. LEFT(). Crea i tabelul AGENDA cu CREATE TABLE .12.7 Exerciţii 1. 6. 2. Afla i câte zile sunt pân în anul 2010.11. 4.

Închide i toate tabelele şi ieşi i din Fox. cu indecşii specifica i.dbf (CodCarte C3 Index primar. 8.dbc care sa con in tabelele anterior create la care ad uga i urm toarele tabele: Editura.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice FROM Stru_Agd.dbf (CodEditura C3 Index primar. Domeniu C30 Index normal) 10. Crea i o baz de date numit Biblioteca. Editura C30 Index normal) Domeniu. Activa i pe rând fiecare index şi vizualiza i datele. CodCarte C3 Index normal) Carti. 7. CodEditura (C3 Index normal) 9. Crea i tabelele de mai jos. AnAparitie C4.dbf (CodAutor C3 Index primar. Ce schimb ri apar? Şterge i unul dintre indecşii asocia i tabelei. Denumire C50. CartiAutor. Autor C15 Index normal). Pret N8. Vizualiza i datele! Care este efectul? 2-45 . Deschide i simultan doua tabele în doua zone de lucru diferite.dbf (CodDomeniu C3 Index primar. Autor.dbf (CodAutor C3 Index normal.

O tabel poate fi ordonat dup mai multe chei. iar ordinea înregistr rilor în tabela se stabileşte în func ie de rezultatul ob inut. ci doar modul în care acestea sunt v zute. Cheia de ordonare sau Criteriul de ordonare poate fi un câmp al tabelei sau o expresie rezultat din combinarea mai multor câmpuri. integritatea referen ial . fişiere index compuse (extensia CDX). Utilizarea indecşilor se poate face prin specificarea indexului care s dea 3-46 . tag-uri) într-un singur fişier index. Pentru stabilirea ordinii înregistr rilor tabelei se evalueaz cheia de ordonare pentru fiecare înregistrare în parte. ce va fi folosit în scopul reg sirii datelor în ordinea stabilit de cheia de ordonare. numit fişier de index.1 Indexarea tabelelor Indexarea reprezint opera ia de ordonare logic a datelor dintr-o tabela dup diferite criterii. fişiere index simple compacte (extensia IDX). caz în care se creeaz mai multe intr ri de indecşi pentru aceeaşi tabela în acelaşi fişier de index. Un index poate fi considerat ca un filtru ce poate fi aplicat unei tabele pentru ca datele respective s poate fi privite într-o anumit ordine. Prin indexare se construieşte un fişier special. Fişierele index ce pot fi asociate unei tabele pot fi: • • • fişiere index simple (extensia IDX) con in o singura cheie de indexare. Valorile ob inute se compar între ele. opera ie ce nu afecteaz ordinea fizica a datelor din tabel .care memoreaz chei de indexare (etichete.care utilizeaz tehnologia de compresie dinamic de la indecşii compuşi (vezi mai jos !!) . la un moment dat fiind activ una singur . La deschiderea unei tabele indexate este necesar doar deschiderea fişierului de index asociat. Ordonarea unei tabele presupune stabilirea criteriilor în care aceasta va fi parcurs . 3.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 3 Indexarea şi rela ionarea tabelelor. care con ine toate informa iile despre to i indecşii.

Comanda de indexare este: INDEX ON <expr> TO <idx file>|TAG <tag name>[OF <cdx file>][FOR <expL>][COMPACT] [ASCENDING|DESCENDING] [UNIQUE] [ADDITIVE] <expr> . indiferent de duplicarea sau multiplicarea valorii cheii de indexare. restul neap rând în tabel (deşi fizic exist ) .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ordinea dorit . Indecşii pot fi de mai multe tipuri. indiferent de valoarea cheii de indexare. prin pozi ionarea în modul “s geat în sus” sau “s geat în jos”. candidat – este un index asem n tor cu cel unic. La un moment dat doar unul dintre indecşi poate fi activ şi acest index se numeşte index activ. 3-47 . în pagina Fields exist un fanion de indexare care. primar (cheie primara) – în cadrul unei tabele pot exista mai multe câmpuri (sau mai multe criterii) care s asigure identificarea unic a înregistr rilor. nume prin care se face referirea în comenzile de prelucrare. care are acelaşi nume ca şi tabela dar cu extensia “cdx”. Dac dou sau mai multe înregistr ri ale tabelei au aceleaşi valori ale cheii de indexare. criteriul de ordonare fiind câmpul respectiv. determin crearea unei etichete de index în fişierul de index pentru câmpul respectiv. Clauza FOR permite limitarea înregistr rilor ce vor putea fi accesate prin fişierul index la cele care îndeplinesc condi ia <expL> . caz în care se genereaz un mesaj de eroare. dar interzice înc rcarea de înregistr ri ce dubleaz valoarea cheii de indexare.cheia de indexare care con ine câmpuri ale tabelei dar nu şi câmpuri memo. Fiec rui index dintr-un fişier de index i se atribuie un nume (eticheta index). Ordinea cresc toare sau descresc toare este dat de tipul s ge ii. cu acelaşi nume ca şi câmpul. Dintre acestea se alege unul care sa fie folosit drept cheie primar a tabelei atunci când se creeaz o rela ie între tabela respectiv şi o alt tabela din baza de date. To i indecşii asocia i unei tabele sunt memora i în acelaşi fişier. numai prima dintre acestea va fi disponibil . • • • Crearea indecşilor În fereastra pentru crearea tabelelor. Într-o astfel de tabel sunt accesibile toate înregistr rile. şi anume : • normali (Regular) – care construiesc pentru fiecare înregistrare din tabela câte o înregistrare în fişierul index respectiv. unici (Unique) – care permit doar o valoare unic cheii de indexare.

deci clauza ar fi redundant .index compus: INDEX ON <expr> TAG <tag name> [OF <cdx file>] [ASCENDING | DESCENDING] [UNIQUE] [FOR <expL>] Comanda de deschidere a unei tabele împreun asociate va ar ta astfel: cu fişierele INDEX USE [<file>|?][INDEX <index file list>|?[ORDER [<expN>| <file.index simplu: INDEX ON <expr> TO <idx file> [FOR <expL>][COMPACT][UNIQUE] [ADDITIVE] .cdx>][ASCENDING| DESCENDING]]]] În urma acestei comenzi se va deschide tabela <file> împreun cu lista de fişiere index (separate prin virgul ) care sunt deja create cu comanda INDEX. în ultimul rând. Clauza UNIQUE permite. înregistr rile vor fi accesate în ordinea lor fizic (ca şi cum nu ar exista un index). la celelalte neavând acces. accesarea numai a primei înregistr ri din tabel . în cazul în care sunt mai multe înregistr ri cu aceeaşi cheie de indexare. Fişierele index compuse sunt întotdeauna compacte. ceea ce se întâmpl automat în absen a clauzei. Extensia fişierelor index nu trebuie precizat . Clauzele ASCENDING (implicit ) şi DESCENDING stabilesc modul de ordonare a informa iilor: cresc tor /descresc tor pentru indecşi compuşi.idx> |[TAG]<tag name>[OF <file. Exemplu: tabela AGENDA care are mai mul i indecşi asocia i: 3-48 . apoi etichetele apar inând indexului compus structural şi. Clauza ADDITIVE (nu are sens la indecşii compuşi structurali) permite ca la crearea unui nou index. Daca <expN>=0. etichetele apar inând altor indecşi compuşi nestructurali. Comanda se foloseşte astfel pentru crearea celor 2 tipuri de index: . decât dac sunt 2 fişiere cu acelaşi nume şi extensie diferit . cel activ sa nu fie închis. Sunt num rate mai întâi fişierele index simple din list .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Clauza COMPACT permite crearea fişierelor index simple compacte. <expN> este num rul de ordine al fişierului index simplu sau al etichetei din fişierul index compus. Clauza ORDER permite stabilirea fişierului indexul simplu activ sau eticheta dintr-un fişier index compus ce va deveni activ .

Cei mai pu ini expuşi unor astfel de probleme sunt indecşii compuşi structurali. caz în care fişierul index compus specificat este şters de pe disc. 3-49 .va fi indexul activ compus structural USE agenda INDEX agenda_d ORDER TAG data_nast • eticheta DATA_NAST din indexul compus AGENDA_D. Din acest motiv este recomandat utilizarea ritmic a comenzii REINDEX. sau DELETE TAG ALL [OF <cdx file>] Comanda permite ştergerea etichetelor dintr-un index compus fie structural.. în urma ad ug rii sau ştergerii de articole.cdx>] [.CDX. Clauza ALL permite ştergerea tuturor etichetelor..CDX.CDX>]].va fi indexul activ Dac sunt deschise mai multe fişiere index simple sau compuse. fie specificat de clauza OF.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice USE agenda INDEX agenda ORDER TAG telefon • eticheta TELEFON din indexul AGENDA. De asemenea ştergerea unei etichete dintr-un index compus nu elibereaz spa iul pe disc.<expN2>|<expC>]) Actualizare indecşi Actualizarea indecşilor asocia i unei tabele se face folosind comanda : REINDEX Sunt multe situa ii în care un index poate fi desincronizat (c deri de tensiune. care sunt deschişi odat cu tabela asociat .idx>|[TAG]<tag name>[OF <cdx file>][IN <expN2>|<expC>][ASCENDING|DESCENDING]] CDX(<expN1>[. pentru a schimba indexul (eticheta) activ( ) se foloseşte comanda: SET ORDER TO [<expN1>|<file. Ştergere indecşi DELETE TAG <tag name1> [OF <file1.<tag name2> [OF <file2. Şi aceştia pot suferi fragmentari semnificative. probleme de alocare clusteri dublii sau inexisten i) caz în care acesta trebuie ref cut.

2 Relaţionarea tabelelor O baz de date rela ional reprezint o baz de date în care tabelele (fişierele de date -. Leg tura reprezint condi ia de asociere între fişierele de date. O rela ie este o leg tur între fişiere de date. leg tur care permite accesarea informa iilor din mai multe fişiere (nu numai cea din zona curent ).unei înregistr ri din tabela p rinte în corespund mai multe înregistr ri din tabela copil şi invers. indicatorul de înregistr ri se va pozi iona pe acesta.unei înregistr ri din tabela copil îi corespund mai multe înregistr ri din tabela p rinte. Dac este g sit o asemenea înregistrare. cea de a patra putând fi redus la doua rela ii şi anume: una de tip mai multe – la – una şi alta de tip una – la – mai multe prin intermediul unei tabele suplimentare intercalat între cele dou .una.la. Scopul stabilirii rela iilor este acela de coordonare. unei înregistr ri din tabela copil îi corespund mai multe înregistr ri din tabela p rinte. indicatorul de înregistr ri se pozi ioneaz dup ultima înregistrare FOUND() returneaz fals iar EOF() returneaz True. 3. exist : 3-50 . În Visual Fox Pro sunt implementate doar primele trei tipuri de rela ii. Din punct de vedere al momentului definirii rela iilor dintre tabele. • Mai multe.DBF) sunt organizate şi accesate prin intermediul rela iilor. indecşii prezint şi avantajul major de reg sire rapid a datelor. C utarea rapid se face cu comanda: SEEK <expr> Comanda este urmat de o expresie ce reprezint valoarea c utat printre valorile cheii de indexare active. şi este materializat printr-un câmp comun fişierelor de date. • Mai multe. dup diferite criterii.la.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Reg sirea rapid a datelor În afara de afişarea datelor într-o anumit ordine. În caz contrar. iar func ia EOF() va returna fals. • Una – la – mai multe – unei înregistr ri din tabela p rinte îi corespund mai multe înregistr ri din tabela copil.mai multe. Modelul rela ional al bazelor de date implic organizarea datelor în tabele legate între ele prin rela ii. Rela iile dintre tabele se pot clasifica în urm toarele patru clase: • Una – la – una – caz în care fiecare înregistrare din tabela p rinte este pus în coresponden cu o înregistrare din tabela copil. func ia FOUND() va returna valoarea adev rat. a datelor din tabelele aflate in leg tur .

altfel va ajunge la sfârşitul tabelei şi deci EOF() pentru zona de lucru respectiva va fi . Presupunând ca baza de date este deschis şi tabelele sunt corespunz tor indexate. Observa ii : Tabela p rinte indexat cu un index candidat sau primar determin stabilirea numai a unor relaţii permanente de tip una – la una sau una – la – mai multe. pointer-ul va fi mutat în consecin . Acest lucru se poate efectua prin comanda : SET RELATION TO [<expr1> INTO <expN1>|<expC1> [. toate aceste tabele fiind deschise în zone de lucru diferite. • Rela ii permanente..Rela ii temporare sau dinamice. deoarece în tabela p rinte.. Cheia rela iei este stabilit prin <expri> care corespunde unui câmp (sau la mai multe câmpuri) din tabela p rinte. avem tabelele AG(enti) şi TR(anzac ii). care apar ine celor 2 fişiere. • Tabela copil s fie indexat cu orice fel de index .[ADDITIVE]] În acest exemplu exist o tabel p rinte (cea activ în momentul comenzii şi anume Agen i) şi una sau mai multe tabele copii (Tranzac ii) specificate prin num r <expNi> sau alias <expC>.T.. De exemplu. prin intermediul câmpului NR_AGENT şi nu prin intermediul câmpurilor NUME şi PRENUME. Deci se poate stabili o rela ie între cele dou tabele prin intermediul câmpului NR_AGENT. ce se creeaz în faza de proiectare a bazei de date şi sunt deschise automat de c tre sistem odat cu deschiderea bazei de date.]. Stabilirea unei rela ii între 2 tabele presupune c mutarea pointer-lui de articol în tabela p rinte determin şi mutarea pointer-ului în tabela copil. stabilirea unei rela ii permanente se face printr-un click pe indexul primar sau candidat în tabela p rinte dup care se trage mouse-ul peste indexul din tabela copil. Cheia relaţiei este şi cheia de indexare a tabelei copil.. 3-51 • Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice . Pentru crearea rela iilor permanente între dou tabele este necesar ca: • Tabela p rinte s fi indexat cu un index candidat sau primar.<expr2> INTO <expN2>|<expC2>. Bineîn eles c ini ial se evalueaz <expri> şi dac sunt g site înregistr rile corespunz toare în tabela copil. • Indecşii corespunz tori trebuie s existe anterior cre rii rela iei. care se creeaz prin comenzi în timpul rul rii programelor şi sunt disponibile numai în timpul rul rii acestora. Agen ii care au intermediat tranzac ii se reg sesc în fişierul TR. nu pot exista mai multe înregistr ri cu aceeaşi valoare a cheii primare. dup indexul respectiv.

.. Se pune întrebarea. Modul de lucru al comenzii este urm torul: dac se mut pointer-ul în tabela p rinte în urma unor comenzi GOTO. Pentru ştergerea rela iilor dintre tabele se va folosi comanda: SET RELATION OFF INTO <expN>|<expC> care şterge rela ia dintre tabela curent şi tabela copil specificat prin num r -<expN> sau alias -<expC>. rela iile trebuie s fie deja create cu o comand SET RELATION TO. ce se întâmpla când unei înregistr ri p rinte îi corespund mai multe articole în tabela copil (care nu are activ un index unic). adic o rela ie tip “ONE TO MANY” ú "UNA LA MAI MULTE" este: SET SKIP TO [<alias1> [. deci exist o rela ie “ONE TO ONE” ú "UNA LA UNA". SET RELATION TO folosit f r parametri determina înl turarea tuturor rela iilor existente pentru tabela curent . Comanda care permite g sirea tuturor înregistr rilor din tabela copil ce corespund unei singure înregistr ri din tabela p rinte. pointerul se mut pe articolul corespunz tor şi în tabela copil. unde saltul se face automat.] Pentru o folosi. Urm toarele salturi în tabela p rinte cu SKIP sau cu o bucl SCAN. LOCATE sau SEEK.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Clauza ADDITIVE face ca rela iile deja existente pentru TABELA activ s nu fie şterse. în schimb în tabela copil vom fi pozi iona i pe urm toarele înregistr ri ce au aceeaşi cheie cu înregistrarea din p rinte.. Aceast comand face ca fiec rei înregistr ri din tabela p rinte s -i corespund o înregistrare în tabela copil. Exemplu: se indexeaz ini ial cele 2 tabele CLEAR CLOSE DATABASES USE AG ORDER tag AG_I în 0 && Tabelul părinte BROW USE TR ORDER tag AG_I în 0 && Tabelul copil SELE TR BROW SELECT AG && Selectare tabel părinte 3-52 . În aceasta situa ie comanda determin numai g sirea primei înregistr ri... ENDSCAN nu vor determina mutarea pointer-ului.alias2>].

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SET RELATION TO nr_agent INTO TR && Stabilirea relaţiei SET SKIP TO TR && Tipul relaţiei este ‘One-to-many’ WAIT WINDOW 'Afişarea TRANZACTIILOR efectuate de fiecare AGENT' BROWSE FIELDS AG. X Ştergere în cascad – se şterg automat atât înregistr rile din tabela copil cât şi cele din tabela p rinte. AG.NUME :H='Nume'. În cazul în care se face o modificare care afecteaz rela ia în tabela p rinte se pot specifica urm toarele op iuni: X Ignorare – se permit modific rile respective.NR_TRANZ Integritatea referenţială 3. În cazul în care se şterg înregistr ri din tabela p rinte a unei rela ii se pot specifica urm toarele op iuni: X Ignorare – se permite ştergerea. chiar dac în tabela copil exist sau nu înregistr ri legate de cea ştears . TR. Evenimentele ce duc la modific ri ale cheii şi reprezint evenimente tratate prin integritate referen ial sunt: • Ad ugarea de noi înregistr ri.'. 3-53 . X Restric ionare – se genereaz un mesaj de eroare atunci exist corespondent în tabela copil.AG. X Modificare în cascad – se modific automat atât înregistr rile din tabela copil cât şi cele din tabela p rinte conform noii valori a cheii rela iei.NR_AGENT :H='Nr. • Ştergerea unor înregistr ri. indiferent dac exist sau nu înregistr ri corespunz toare în tabela p rinte . În cazul în care se ad ug o nou înregistrare în tabela copil a unei rela ii se pot specifica urm toarele op iuni: X Ignorare – se pot introduce valori. X Restric ionare – se genereaz un mesaj de eroare atunci exist corespondent în tabela copil. Aceste reguli sunt necesare deoarece modificarea datelor dintr-o tabel poate afecta rela ia cu tabela legat . . X Restric ionare – se genereaz un mesaj de eroare atunci când se încearc ad ugarea unei înregistr ri în tabela copil care nu are corespondent în tabela p rinte. • Modificarea datelor unei înregistr ri care afecteaz rela ia.Id.3 Integritatea referen ial reprezint un ansamblu de reguli impuse tabelelor între care s-au stabilit rela ii. chiar dac în tabela copil exist sau nu înregistr ri legate de cea modificat .PRENUME :H='Prenume'.

Se deschide fereastra Edit Relationship în care se ap sa pe butonul Referen ial Integrity care determin deschiderea unei alte ferestre de unde se pot alege op iunile dorite. Rules for Inserting – pagina cu op iuni referitoarea la ad ugarea datelor din tabelele legate. în limbajul FoxPro caracteristica de tip de dat este asociat elementului tablou şi nu tabloului. adic .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Op iunile legate de integritatea referen ial se seteaz prin accesarea ferestrei Constructorului de baze de date în care se execut dublu click pe rela ia respectiv (linia frânta care leag tabelele). cu primul caracter diferit de cifr . în momentul primei atribuiri a valorii se aloca spa iu pentru variabil . • • tipul variabilei – tipul datei ce se poate memora în zona de memorie respectiv . cifr sau caracterul ‘_’. de unde rezult ca elementele aceluiaşi tablou pot fi tipuri diferite. Num rul de elemente pe o dimensiune se poate preciza şi prin expresii. Deci elementele unei variabile sunt: • numele – folosit pentru identificare şi atribuit de programator sau predefinit de proiectan ii FoxPro. Alocarea memoriei pentru variabile se face asem n tor ca în limbajul BASIC. con inutul sau valoarea variabilei – reprezint data ce este memorat în zona de memorie a variabilei. Variabilele tablou (masivele) trebuie declarate în prealabil şi pot avea maxim 2 dimensiuni. Variabile de memorie. Rules for Deleting – pagina cu op iuni referitoarea la ştergerea datelor din tabelele legate. Cele trei pagini ale ferestrei controleaz fiecare câte un tip de eveniment astfel : Rules for Updating – pagina cu op iuni referitoarea la modificarea datelor din tabelele legate. pentru variabile simple. Macrosubstituţia Variabile de memorie reprezint zona de memorie c reia i se atribuie un nume şi care poate stoca o valoare de un anumit tip. 3. Crearea unei variabile sau modificarea valorii acesteia se face prin operatorul de atribuire: <var> = <e> sau prin comanda STORE <e> TO <var> 3-54 . În plus.4 Funcţii. Numele variabilelor este format din maxim 8 caractere de tip liter .

tipul variabilei este dat de tipul valorii expresiei. în care depune valoarea expresiei. Operatorul de macrosubstitu ie este &. în cazul în care aceasta exista şi înainte de execu ia comenzii. Într-un program. mai pu in cele sistem. Macrosubstitu ia func ioneaz ca şi cum în locul variabilei respective ar fi pus şirul de caractere con inut de aceasta.• • • • Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice se evalueaz expresia <e>. se înlocuieşte vechiul con inut al acesteia cu valoarea expresiei. RELE ALL şterge toate variabilele de memorie. f r apostrofurile delimitatoare. Afişarea de informa ii despre con inutul memoriei FOX se face folosind comanda : 3-55 . denumire fişier).variabilele din list se declar publice PRIVATE <lista variabile>. dac nu se g seşte variabila respectiv . separate prin virgul . RELE ALL şterge doar variabilele locale.dbf” DIR &test ACCEPT ‘Cu ce fişier doriţi sa lucraţi ? ‘ TO test USE &test x=”italian” SET DATE TO &x EDIT Variabilele de memorie pot fi locale sau globale şi se definesc cu comenzile: PUBLIC <lista variabile> . prin care con inutul unei variabile de tip şir de caractere este tratat ca nume al altei variabile sau al altui element FoxPro (câmp al unei baze de date. indiferent de tipul anterior al variabilei. dac se g seşte. Exemplu : test = “*. ob inându-se o valoare de un anumit tip. se caut în memorie variabila cu numele <var> şi. create în programul curent sau în cele de nivel inferior. de obicei pentru variabilele de memorie se foloseşte simbolul M • O tehnic special de lucru cu variabile o reprezint macrosubstitu ia. FoxPro creeaz una nou cu numele <var>.variabilele din list se declar ca fiind locale Ştergerea variabilelor de memorie se face cu comanda : RELESE <memvar list> RELEASE ALL [LIKE /EXCEPT <skeleton>] Lista con ine numele variabilelor la care se renun .

Clauza MEMVAR permite crearea unui set de variabile de memorie care au acelaşi nume şi tip cu câmpurile bazei de date care îns sunt precedate de calificatorul "m. 3-56 . altfel aceste câmpuri sunt ignorate. Clauzele FIELDS şi MEMO au aceeaşi semnifica ie ca şi la SCATTER. Scrierea codului se încheie obligatoriu cu RETURN <exp>. Clauza BLANK permite crearea unui masiv sau variabile de memorie cu elemente "goale" (sesizabile cu func ia EMPTY()).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice LIST / DISPLAY MEMORY [TO PRINTER / TO FILE <file name>] care determin afişarea variabilelor de memorie şi utilizator existente. Se poate face redirectarea informa iilor c tre imprimant sau c tre un fişier. Utilizatorii pot s -şi defineasc Function) folosind comanda: propriile func ii (UFD = User Define FUNCTION <function name> Modalitatea de transmitere a parametrilor este aceeaşi cu cea prezentat la proceduri. Dup execu ia func iei. tipul şi valoarea lor. Se pot prelua date şi din câmpuri tip memo dac este prev zuta clauza MEMO. Clauza FIELDS permite copierea numai pentru datele din câmpurile specificate în list ." GATHER FROM <masiv> | MEMVAR FIELDS <lista câmpuri>][MEMO] Comanda permite scrierea valorilor dintr-un masiv sau set de variabile de memorie în câmpurile înregistr rii curente din tabela activ . Instruc iuni de tip SCATTER/GATHER SCATTER [FIELDS lista câmpuri] [MEMO]TO <masiv> | TO <masiv> BLANK | MEMVAR | MEMVAR BLANK Comanda permite copierea datelor din articolul curent într-un masiv sau un set de variabile de memorie (pe care le creeaz dac nu sunt definite deja). De asemenea numele variabilelor de memorie respect conven ia de la SCATTER. FOX returneaz programului apelant valoarea calculat de func ie. Diferen a între LIST şi DISPLAY este c la aceasta din urm se aşteapt ap sarea unei taste dup umplerea unui ecran cu informa ii.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: crea i un fişier TEST.y) produs=înmulţire(x. se introduce programul într-un fişier. se compileaz programul. se transpune algoritmul într-un şir de instruc iuni ce reprezint programul.prg cu urm torul con inut: PROCEDURE TEST PARAMETERS X.Y. Meniul ofer comenzi similare. 6) SET PROCEDURE TO TEST ? înmulţire (3. Se scriu liniile de comand iar la tastarea CTRL/ END se încheie editarea. p ?s ?p ? adunare (5.PRG. În varianta COMMAND se caut implicit extensia. acesta se creeaz . 3-57 chiar . s. Dac fişierul indicat nu exist . Etapele elabor rii şi rul rii unui program sunt urm toarele: • • • • se concepe algoritmul de rezolvare a problemei propuse.y) RETURN FUNCTION ADUNARE PARAMETERS x.y RETURN x*y şi testa i-l cu parametrii s=0 p=0 DO TEST WITH 3. 3) 3. y RETURN x+y FUNCTION înmulţire PARAMETERS x.5 Crearea şi modificarea programelor MODIFY COMMAND /FILE <filename> [WINDOW <window name>] Comanda apeleaz editorul de texte din FOX.produs suma=adunare(x. 6) SET PROCEDURE TO TEST ? adunare (3. 4. 4) ? înmulţire (5. se salveaz fişierul pe disc şi se revine la prompter. suma.

Instruc iunile din cadrul unui program pot fi scrise cu litere mari sau mici. 3. Când se doreşte execu ia lui. deci acesta comand nu este necesar decât pentru cunoaşterea modului de func ionare al Fox) iar execu ia (rularea) se efectueaz cu comanda: DO PRIMUL. O instruc iune se poate scrie şi pe mai multe rânduri.PRG . Un program FOX este scris pe disc într-un fişier. atunci se vor c uta pe disc urm toarele fişiere. revenirea.] Programare structurată.30 say ‘Primul program scris in Visual Fox Pro ’ Programul va şterge ecranul şi va afişa în mijlocul s u mesajul ‘Primul program scris in Visual Fox Pro ’. De exemplu. care rezolv o anumit problem . fişierul este compilat şi apoi rulat. În cadrul unei linii se pot introduce şi comentarii specificate de caracterele: ‘*’.forma compilat a programului − <fişier>.’. caz în care linia curent se încheie cu caracterul ‘.6 Apelarea. Pentru compilare se d comanda : COMPILE PRIMUL (compilarea se face de obicei automat. Dac <fişier> nu are prev zut extensia.programul surs Modul de execu ie a unui program poate depinde de parametrii externi care se transmit programului în momentul execu iei. transmiterea parametrilor. presupunem un program de sortare a datelor dintr-un fişier care necesit ca parametri 3-58 . Execu ia unui program se realizeaz cu comanda DO având sintaxa : DO <nume fişier> [WITH <lista parametri>] [IN <fişier>] Aceasta comand execut instruc iunile con inute în fişierul <fişier>.. ‘&&’ sau comanda : NOTE / * <text> [. Proceduri. numit “PRIMUL” MODI COMM PRIMUL Clear @ 14..program executabil − <fişier>.EXE . Exemplu : s consider m urm torul program. în aceast ordine: − <fişier>.aplica ie − <fişier>.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • se execut programul. compilarea Un program reprezint o succesiune de instruc iuni realizat în conformitate cu regulile limbajului de programare folosit.APP .FXP .

Aceast list poate con ine expresii. fişierul <fişier> unde se vor c uta procedurile ce nu se g sesc în programul apelant. Execu ia unui program din interiorul altui program folosind comanda DO reprezint un pas important în structurarea aplica iilor de dimensiuni mari. în acelaşi fişier cu acesta. locale (private). Utilizatorul poate defini anumite proceduri şi func ii ce pot fi executate de mai multe ori în cadrul unui program. Execu ia unui program se va opri în una din urm toarele situa ii: la execu ia unei comenzi RETURN. ce pot fi accesate şi modificate în orice procedur în curs de execu ie PUBLIC <lista variabile>. de regul . 3-59 • . dup ultima instruc iune a programului.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice externi numele fişierului şi ordinea sort rii. ce nu pot fi accesate decât în procedura curent şi în cele subordonate acesteia PRIVATE <lista variabile>. câmpuri ale unui tabel de date. Procedurile şi func iile unui program se introduc. • prin ap sarea tastei ESC dac SET ESCAPE este ON. testarea şi depanarea acesteia devine din ce în ce mai dificil datorit num rului mare de variabile şi instruc iuni folosite. cu diverse valori ale parametrilor. Pe m sur ce dimensiunea unei aplica ii creşte. Parametrii sunt variabile de comunicare între programe. separate prin virgul . Scrierea unei proceduri începe cu : PROCEDURE <procedure name> şi se încheie obligatoriu cu RETURN. Într-o procedur se pot defini dou tipuri de variabile : • • globale (publice). La execu ia comenzii DO parametrii sunt transmişi c tre program prin lista de parametri a clauzei WITH. ce realizeaz interfa a programului cu exteriorul. apelându-le din diverse puncte de program. QUIT când se întâlneşte sfârşitul fişierului. CANCEL. constante. definite de utilizator. • când se întâlneşte o alta comanda DO . Acestea pot fi introduse şi în fişiere separate care vor fi asociate programului apelant prin comanda: SET PROCEDURE TO [<fişier>] Aceast comand asociaz programului curent în execu ie.

TO MASTER permite revenirea în programul apelant de cel mai înalt nivel.d dar nu şi c ?a ?b ?c ?d WAIT ‘ ‘ RETURN PROCEDURE TEST PRIVATE c PUBLIC d c=3 d=4 NOTE aici se cunosc toate variabilele a.d ?a ?b ?c ?d WAIT ‘ ‘ RETURN RETURN [ <expresion > / TO MASTER /TO <procedure name>] Instruc iunea returneaz controlul programului apelant sau la prompter.? produce afişarea pe linia urm toare in timp ce ?? afişeaz pe linia curent . 3.c.b.b. 3-60 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: SET TALK OFF CLEAR PRIVATE a PUBLIC b a=1 b=2 DO TEST NOTE aici se cunosc variabilele a. TO <procedure name> permite revenirea în procedura activ indicat la sfârşitul unei func ii şi întoarcerea unui rezultat.7 Comenzi de intrare/ieşire ? /?? [<exp1> ][PICTURE <expC1>][FUNCTION <expC2>] [AT <expN2> ] Comanda afişeaz valoarea pentru una sau mai multe expresii separate prin virgul .

3-61 .GET) iar AT stabileşte coloana în care sa se fac afişarea.. PICURE şi FUNCTION formateaz afişarea ieşirii ( vezi @. aceasta este creat ).. GET permite afişarea şi actualizarea datelor con inute în câmpuri sau atribuite unor variabile de memorie temporare .. coordonatele sunt totdeauna relative la col ul din stânga sus al ecranului sau al ferestrei active (0. row şi column sunt expresii numerice (se poate folosi şi ‘$‘ pentru pozi ia curent ) . <expN1>]] [STYLE <expC4>] [DEFAULT <expr1>] [ENABLE | DISABLE] [MESSAGE <expC5>] [[OPEN] WINDOW <window name>] [RANGE [<expr2>] [.. comanda READ activeaz toate GET anterioare . ACCEPT <expC> TO <memvar> Afişeaz (eventual) mesajul <expC>. R spunsul utilizatorului..0) .. <expN2>][FONT <expC3> [..” şi care aşteapt ap sarea unei taste (op ional memorate în variabila de memorie specificat ). Ap sarea tastei ESC (dac se lucreaz cu SET ESCAPE ON) duce la terminarea execu iei comenzii. formate particulare pentru @ <row. WAIT [<expC>] [TO <memvar>] Afişeaz un mesaj care implicit este “Press any key to continue... GET creeaz intrare/ ieşire. Comanda @ SAY. care poate fi o variabil de memorie de tip caracter sau un şir de caractere încadrat între ghilimele.. column> SAY <expr>[FUNCTION <expC1>] [PICTURE <expC2>] [SIZE <expN1>. <expN3]] [STYLE <expC4>] [COLOR SCHEME <expN4>| COLOR <color pair list>] @ <row..Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Dac SET PRINT este ON ieşirea comenzii este dirijat c tre imprimant . este stocat în variabila de memorie indicat (dac este cazul. <expN3>] [VALID <expL1> | <expN4> [ERROR <expC6>]] [WHEN <expL2>] [COLOR SCHEME <expN5> | COLOR <color pair list>] − − − − − SAY afişeaz informa ii iar GET permite introducerea sau editarea valorii datelor.SAY. terminat cu ENTER. <expr3>]] [SIZE <expN2>.. column> GET <memvar> | <field>[FUNCTION <expC1>] [PICTURE <expC2>] [FONT <expC3> [.

Se pot folosi m şti sau func ii de formatare pentru introducerea datelor. fie afişat dac nu s-a − − − − − − − − − − M şti MESSAGE este o expresie caracter afişat la execu ia READ când cursorul este plasat in câmpul GET asociat acestui mesaj. folosind clauza COLOR din comand se pot stabili culorile de afişare. dac se introduce o valoare incorect . se trece la urm toarea citire prin ENTER sau s geata în jos. ERROR indic un mesaj personal care s satisf cut validarea. se trece la urm torul câmp.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice − − − dac READ este comun pentru mai multe GET . lui SET afişeaz asteriscuri in locul zerourilor nesemnificative. PICTURE se foloseşte pentru a limita tipul datelor ce pot fi înc rcate (de exemplu doar cifre) şi pentru a formata afişarea. spatii şi semn. şi anume: ! # $ * converteşte litere mici in litere mari. ce nu este evaluat decât la ad ugarea înregistr rilor în tabel . WINDOW permite deschiderea unei ferestre pentru editarea câmpurilor MEMO. nu se face nici un control dac se apas direct ENTER) . permite doar cifre. clauza WHEN indic o condi ie ce va fi evaluat când încercam s pozi ionam cursorul pe un câmp GET. 3-62 . DEFAULT furnizeaz o valoare implicit pentru GET. dac se indic şi OPEN fereastra se deschide automat. Se poate indica numai limita inferioar sau numai cea superioar . ştergerea unor caractere se face cu BackSpace sau Del. afişeaz şirul de caractere corespunz tor CURRENCY in locul zerourilor nesemnificative. expresia trebuie s corespund tipului de dat din GET. VALID stabileşte condi ia care trebuie sa fie îndeplinit înainte ca datele sa fie acceptate de GET ( se poate folosi o func ie utilizator care s returneze o valoare logic . se accept la citire dar nu se memoreaz toate. se afişeaz mesajul corespunz tor şi se aşteapt ap sarea tastei Space dup care se cere o nou valoare (pân la satisfacerea restric iilor) . RANGE stabileşte intervalul închis de valori permise. dac este fals . dac PICTURE indic mai multe caractere decât cele specificate la crearea variabilei de memorie sau a câmpului.

autorizeaz doar litere şi cifre. spatii şi semne. Func ii ! # $ ( A B D I J T Z Exemplu : CLEAR SET TALK OFF NUME=SPACE(10) VARSTA=0 DO WHILE VARSTA <> 99 @ 6. Dac se lucreaz cu numere. autorizeaz doar date logice. indica pozi ia zecimala. centreaz textul in interiorul câmpului. Masca trebuie sa aib atâtea caractere câte sunt specificate în structura câmpului respectiv.5 SAY "VARSTA : " GET VARSTA PICTURE "99" MESSAGE "pentru ieşire : vârsta este de 99 ani" READ @ 10. A L N X Y afişeaz virgula dac exista cifre la stânga ei. elimina spa iile de la începutul şi de la sfârşitul câmpului.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice . plaseaz numerele negative in paranteze. aliniaz la stânga textul din interiorul câmpului.5 SAY "NUMELE : " GET NUME PICTURE "AAAAAAAAA" @ 8. în masc trebuie inclus şi punctul zecimal şi trebuie l sat loc şi pentru semn. . afişeaz data in formatul curent. . aliniaz la dreapta textul din interiorul câmpului. $+1 SAY VARSTA 3-63 accept orice litera şi converteşte litere mici in litere mari. autorizeaz doar date logice. autorizeaz doar litere. permite doar cifre. afişeaz numerele in format monetar.5 SAY NUME+" ARE " @ 10. autorizeaz doar litere. afişeaz spatii in locul valorilor nule. orice caracter.

SIMBATA. GET emise dup ultima comand CLEAR. $+2 SAY DT PICTURE "@E" @ 3. FUNCTION "M LUNI. ultima comand SAVE face sa nu se dezactiveze instruc iunile GET la urm toarea execu ie pentru READ.. CLEAR ALL sau READ. MIERCURI.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice @ 10.1 SAY "ASTAZI ESTE : "+ZI+ " ! APASATI O TASTA. VINERI.1 SAY "DATA DE ASTAZI ESTE (USA) " @ 1. 3-64 . CLEAR GETS sau READ dar nu şterge variabilele de memorie sau elementele de tablou. READ @ 5. GET executate dup CLEAR. CLEAR ALL... MARTI.. DUMINICA ".1 SAY "CE ZI ESTE ASTAZI-SPATIU SAU PRIMA LITERA PENTRU SELECTARE şi APOI ENTER ? " GET ZI... CLEAR GETS.. $+1 SAY "ANI" NUME=SPACE(10) CLEAR ENDDO WAIT 'APASATI ORICE TASTA' SET TALK ON CLEAR SET TALK OFF ZI=SPACE(8) DT=DATE() @ 1. $+2 SAY DT PICTURE "@D" @ 1.. JOI." WAIT " " SET TALK ON READ [ SAVE ] Activeaz toate comenzile @. CLEAR GETS Şterge toate comenzile @. $+2 SAY "SAU EUROPA" @ 1.

Exemplu: SET TALK OFF CLEAR DIMENSION A[4] A[1]="PRIMAVARA" A[2]="VARA" A[3]="TOAMNA" A[4]="IARNA" ANOTIMP=A[1] @ 6. dac clauza OTHERWISE şi comenzile asociate acesteia).IULIE.T.8 Controlul fluxului DO CASE CASE <expL1> <statements> [CASE <expL2> <statements>] ……….MAI" CASE ANOTIMP="VARA" ?? "IUNIE.. − Sunt autorizate structurile DO WHILE imbricate.NOIEMBRIE" OTHERWISE ?? "DECEMBRIE.AUGUST" CASE ANOTIMP="TOAMNA" ?? "SEPTEMBRIE. − EXIT transmite controlul instruc iunii care urmeaz dup ENDDO ( obligatorie pentru o bucla gen DO WHILE. 3-65 − . ENDDO şi LOOP redau controlul programului spre comanda DO WHILE pentru ca acesta s reevalueze condi ia. se execut .OCTOMBRIE.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 3.APRILIE. [OTHERWISE <statements>] ENDCASE Se execut comenzile asociate primei condi ii satisf cute (dac nu este nici una.26 GET ANOTIMP FROM A FUNCTION "&" READ @ 15.FEBRUARIE" ENDCASE DO WHILE <expL> <statements> [LOOP] [EXIT] ……… ENDDO Se execut comenzile atâta timp cât condi ia este adev rat .IANUARIE.10 SAY "ACEST ANOTIMP CONTINE LUNILE:" DO CASE CASE ANOTIMP="PRIMAVARA" ?? "MARTIE. ).

− sunt permise IF-uri imbricate.A/B ENDIF IIF( <expL>. <expr2>) − Returneaz rezultatul primei expresii dac este adev rat condi ia."NUMERE NATURALE" ? "OBTININDU-SE SUMA DE ".A. − <exp1> şi <exp2> trebuie sa fie de acelaşi tip. − comanda nu poate fi executat dac IF şi ELSE sunt scrise pe aceeaşi linie. respectiv rezultatul celei de-a doua condi ii pentru fals. <expr1>.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice EXEMPLU: CLEAR SUMA=0 P=1 DO WHILE P<101 SUMA=SUMA+P P=P+1 ENDDO SUMA=SUMA-P A=P-1 ? "S-AU ADUNAT PRIMELE ". 3-66 .':'.B.10 SAY "AL DOILEA NUMAR " GET B PICTURE "9999" READ IF A>B ? "Primul Număr Este Mai Mare " ELSE ? "Al Doilea Număr Este Mai Mare Sau Numerele Sunt Egale" ENDIF IF B<>0 ? A.'='. − ELSE se refera la IF-ul imediat anterior.10 SAY "PRIMUL NUMAR " GET A PICTURE "9999" @ 5. nu şi la prompter.SUMA IF <expL> <statements> [ELSE] statements> ENDIF − poate fi executat doar din interiorul unui program. EXEMPLU: SET TALK OFF CLEAR A=0 B=0 @ 4.

Ea poate fi şi o comand pentru executarea uneia dintre ac iunile urm toare: • • construirea unei tabele. NUME FROM PERSONAL 3-67 . SALAR FROM PERSONAL WHERE NUME=‘POPESCU’ Cea mai simpla interogare este : SELECT * FROM PERSONAL prin care se afişeaz întreg con inutul tabelei.: SELECT NUME.. SELECT SALAR. EXEMPLU: SET TALK OFF CLEAR A=0 B=0 @ 4.10 SAY "PRIMUL NUMAR " GET A PICTURE "9999" @ 5. WHERE Exemplu: Cre m un tabel numit Personal. SIR1. Salar N(10) şi dorim afişarea tuturor salaria ilor a c ror nume este Popescu... Dac se doreşte afişarea coloanelor în alt ordine putem specifica dup clauza SELECT numele câmpurilor dorite separate prin virgul şi spa iu.− Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Se poate utiliza de la prompter..9 Comenzi SQL O interogare SQL nu este neap rat o întrebare pus bazei de date. cu structura Nume C(20).10 SAY "AL DOILEA NUMAR " GET B PICTURE "9999" READ SIR1="Primul Numar Este Mai Mare " SIR2="Al Doilea Numar Este Mai Mare Sau Numerele Sunt Egale" ? IIF (A>B. c utarea în câteva tabele o anumitor informa ii şi returnarea rezultatele într-o anumit ordine. inserarea..SIR2) RETURN 3. • Interogare obişnuit în SQL poate fi scris cu litere mari sau mici iar cuvintele cheie sunt: SELECT... Semnul (*) transmite comanda de a returna toate coloanele din tabelul descris în clauza FROM. FROM. modificarea sau s ştergerea de linii sau câmpuri.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Dac se doreşte afişarea unic a anumitor valori se foloseşte clauza DISTINCT. TRANZACT WHERE AGENTI.NR_AGENT=TRANZACT. Numele de coloane trebuie s fie unice.<expC2>]])[ASC/DESC] Permite ordonarea afiş rii liniilor rezultate dup valorile din coloanele indicate în aceast clauz . Numele ce nu sunt unice trebuie prefixate cu numele tabelului din care face parte. Exemplu: Care sunt agen ii care au realizat vreo tranzac ie ? SELECT DISTINCT NUME. SELECT SALAR FROM PERSONAL Clauza WHERE WHERE <condiţie> Compar valoarea condi iei specificate cu datele supuse interog rii şi returneaz doar înregistr rile ce satisfac condi ia.NR_AGENT FROM AGENTI. Exemplu: Care sunt agen ii ce au salariul mai mare decât 1000 ? SELECT NUME. Clauza ORDER BY nu poate fi folosit într-o subinterogare. altfel apare eroare. acestea se vor specifica în clauza SELECT.NR_AGENT Clauza ORDER BY ORDER(<expC1>[. NR_AGENT FROM AGENTI WHERE SAL_BAZA 1000 Asocierea tabelelor se realizeaz prin potrivirea valorilor unei coloane din primul tabel cu valorile unei coloane din cel de-al doilea tabel. ASC ( cresc tor-implicit) DESC (descresc tor) 3-68 . SELECT DISTINCT SALAR FROM PERSONAL Dac se doreşte afişarea doar a anumitor coloane. AGENTI.

SELECT NUME. NR_CLIENT. apari ia unei erori de sintax determin întreruperea execu iei şi afişarea unui mesaj de eroare. prenume şi descresc tor dup salariu. SAL_BAZA DESC Exemple de interog ri: Care sunt numerele de cod ale agen ilor care au contractat tranzac ii cu dischete ? SELECT NR_AGENT FROM TRANZACT WHERE COD_PRODUS IN (SELECT COD_PRODUS FROM MARFURI WHERE DENUMIRE=”DISCHETE”) Care sunt numele agen ilor din Iaşi care lucreaz cu clien i de tip regii autonome? SELECT NUME. ORAS. SAL_BAZA FROM AGENTI ORDER BY NUME ASC. când programul este corect scris dar nu func ioneaz aşa cum dorim . DENUMIRE FROM AGENTI. indicând tipul erorii şi 3-69 .PRENUME. fie unei insuficiente cunoaşteri a limbajului de programare sau a omiterii unor cazuri particulare de evolu ie a programului. Exist dou mari clase de erori de programare : • erori de sintax . PRENUME. • erori de rulare.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: Ordonarea agen ilor cresc tor dup nume. ORAS. NR_AGENT. La rularea unui program.10 Depanarea programelor În scrierea unui program deseori apar erori datorate fie neaten iei. JUDET FROM CLIENTI WHERE ORAS NOT IN (SELECT ORAS FROM AGENTI ) 3. CLIENTI WHERE ORAS=”IASI” AND TIP=”RA” Care sunt clien ii din localit ile în care nu domiciliaz nici un agent comercial ? SELECT DENUMIRE.

Toate acestea se pot efectua cu ajutorul a dou ferestre sistem numite TRACE şi Watch. dar când aceasta este un apel câtre o rutin . Suspend . dar când aceasta este un apel c tre o rutin . trebuie mai întâi s -l deschidem cu OPEN din fereastra TRACE. Execu ie continu . va determina anularea acestuia. ignorând eroarea ap rut . dup executarea fiec rei instruc iuni f cându-se o pauz stabilit de utilizator. Fereastra TRACE Pentru a depana un program. O noua ac ionare a acestor taste. cu viteza Se ob ine folosind op iunea THROTTLE ce const în executarea programului pas cu pas. Execu ia programului poate fi f cuta în mai multe variante: Pas cu pas-op iunea OVER sau STEP • cu OVER se execut câte o instruc iune. când cursorul se afl pe o linie ce con ine un punct de întrerupere. accesibile din meniul Tools. acesta este executat în întregime. op iunea Debugger din FOX. • în combina ie cu STEP se poate folosi OUT care determin executarea continu a restului de instruc iuni din programul curent pân la un punct de întrerupere ce va determina suspendarea programului. • folosirea punctelor de întrerupere şi vizualizarea con inutului variabilelor în paralel cu execu ia programului. acesta este executat pas cu pas.Suspendarea execu iei programului. Punctele de întrerupere pot fi desemnate de utilizator prin deplasarea cursorului pe linia dorit şi tastarea lui SPACE. • cu STEP se execut câte o instruc iune.Continuarea execu iei. Detectarea erorilor de rulare presupune tehnici mai avansate cum ar fi: • rularea pas cu pas. 3-70 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice cerând utilizatorului luarea unei decizii astfel : Cancel . Un punct de întrerupere nu determina terminarea execu iei programului ci doar suspendarea acestuia. Ignore .Întreruperea implicit a programului şi revenire în prompter. la vitez controlat maxim sau execu ie continu . pân la o nou comand a utilizatorului. Ştergerea tuturor punctelor de întrerupere se face cu CLEAR ALL BREAKPOINTS. într-un singur pas. ENTER sau click pe mouse.

Pentru a pozi iona un astfel de punct. Introduce i o greşeala in program. CLEAR SET TALK OFF SUMA=0 FOR I=1 TO 10 SUMA=SUMA+I ENDFOR ? "SUMA PRIMELOR ZECE NUMERE NATURALE ESTE: ". alegând op iunea Wizard apare o fereastr derulant cu lista instrumentelor din care îl alegem pe cel dorit. iar în partea de jos apar valorile de moment ale variabilelor.11 Instrumente WIZARD Instrumentele wizard au fost introduse pentru a permite utilizatorilor mai pu in avansa i s profite de avantajele programului. în DEBUG se pot specifica puncte de întrerupere a programului. Visual Fox dispune de mai multe instrumente wizard dintre care: Table. La lansarea unui wizard trebuie citite instruc iunile şi trebuie date r spunsurile la întreb rile puse. se poate vizualiza con inutul variabilelor in fereastra WATCH. Fereastra WATCH are doua p r i : în partea de sus se introduc variabile şi expresii ce se doresc a fi vizualizate în timpul execu iei programului. Mail Merge. Un wizard este un instrument soft care ajut la efectuarea rapid şi comod a opera iunilor de prelucrare a bazelor de date. 3. Query. pozi ionându-ne cu ajutorul s ge ilor şi ap sând SPACE. Deasemeni. spre deosebire de punctele de întrerupere stabilite în TRACE ce reprezint puncte fixe ale programului. de exemplu in loc de SUMA+I scrie i SUMA*I şi depana i programul dup indica iile de mai sus. independente de valorile variabilelor. Instrumentele Wizard se lanseaz astfel: din meniul Tools. dependente de valorile variabilelor din fereastra respectiv . Group/Total. SUMA Acest program d rezultatul 55.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice În paralel cu executarea unui program în fereastra TRACE. pe bara ce separ cele dou p r i se va amplasa un marcaj cu mouse-ul sau deplasându-ne pe bara separatoare cu TAB . ofer instruc iuni. Report. Exemplu : Dorim s calcul m suma primelor zece numere naturale. Label. Form. pune întreb ri şi în func ie de ceea ce i se r spunde execut procesul dorit. apoi se alege butonul Next (sau Back dac se 3-71 .

ecranul pentru o • • • 3-72 . Pute i modifica numele câmpurilor. Caseta de dialog 3 are 4 op iuni şi anume: • Save table – salveaz tabelul. • One to many Form Wizard-forma ce are asociate dou tabele (p rinte şi copil. • Save and create an Autoscreen for data entry – salveaz tabelul şi creeaz un ecran standard pentru introducerea datelor.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice doreşte întoarcerea la caseta anterioar ) iar la ultima caset se apas butonul Finish. v ajut s crea i un ecran pentru a gestiona informa iile din tabela dvs. • Save form for later use – salveaz întrebuin are ulterioar . • Save and browse for data entry – salveaz tabela şi afişeaz ecranul pentru introducerea datelor . tipul şi lungimea lor precum şi ordinea de sortare a datelor. Caseta 5 va permite s stabili i un titlu care va fi plasat în partea superioar a noului ecran şi tipul de salvare: • Save and run form – salveaz şi ruleaz ecranul. Selecta i câmpurile dorite şi ele vor fi incluse în noul tabel. Caseta 4 foloseşte la selectarea stilului ecranului şi a butoanelor declanşatoare. rela ionate) . în caseta 3 se precizeaz ordinea de sortare a datelor. • • utiliza i butoanele disponibile pentru a v deplasa prin tabel şi a efectua diverse opera ii. Un câmp se alege prin dublu click pe numele sau din lista Avaible Fields sau prin selectarea sa şi ap sarea butonului Add. Table wizard • v ajut s crea i un tabel. la acest tip de Wizard se afişeaz mai întâi un ecran din care alegem tipul de ecran şi anume: • Form Wizard-form asociat unui singur tabel. Butonul Add All include toate câmpurile din lista. Butoanele pot avea ataşate etichete text sau imagini explicative. Înl turarea unui câmp din lista Selected Fields se face prin selectarea lui urmat de ap sarea butonului Remove. în caseta 2 alege i câmpurile ce dori i s fie incluse în ecran. Form Wizard • • • Modify structure of table – modifica structura tabelului. Fereastra Table Wizard con ine o list a tabelelor tipice cu exemple de câmpuri frecvent utilizate.

• • Report Wizard . ecranul cu Report Wizard • La acest tip de Wizard se afişeaz mai întâi un ecran din care alegem tipul de raport şi anume: • Group /Total Report Wizard – raport cu grupuri şi totaluri. 3-73 . care v ajut s crea i o structur care poate grupa înregistr rile pân la trei nivele de grupare şi op ional calculeaz totaluri par iale şi generale pentru câmpurile numerice.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Modify form with design tools – modific instrumentele de proiectare .raport . asist la crearea unui • Multi Column Report Wizard – v raport cu maxim trei coloane. Op iunile din casetele ce apar pe ecran sunt asem n toare cu cele prezentate anterior.

a urm toarele articole: agen ii având acelaşi nume. stabili i regulile de integritate referen ial . Facturi cu structura de mai jos. 5. rela iile 4. − nume+num r de identificare (marca) . în tabela cu agen ii firmei. Verifica i dac stabilite anterior sunt prezente. Da i comanda PACK (f r s fie marcat pentru ştergere vreun articol) pentru unul din fişierele DBF. 3. Urm ri i lungimea fişierului înainte şi dup executarea comenzii. afişa i structurile tabelei. Testa i comenzile REINDEX şi PACK Folosind unul dintre fişierele existente.. − nume+data angaj rii +salar (descresc tor) Scrie i procedurile pentru marcarea la ştergere. 3-74 . testa i comanda ZAP în ambele variante. Folosind tabelele create în lucr rile anterioare. agen ii ce au numele asem n tor cu unul introdus de la tastatura. crea i un index (CDX) . apoi rela iona i tabelele. Crea i o baz de date numit Firma care s cuprind tabelele Agen i. Tranzac ii.) . testa i pe rând fiecare comand prezentat mai sus. închide i şi redeschide i baza de date. Având unul dintre fişierele create la lucr rile anterioare: − − crea i o copie (folosind instruc iunea COPY.. compara i fişierul DBF dup crearea indexului cu copia fişierului original. 7. Clien i. crea i urm toarele indexuri şi afişa i con inutul tabelei cu fiecare index dintre : − nume+prenume.12 Exerciţii 1. − nume+data naşterii – descresc tor. Studia i tabelele şi crea i pentru fiecare indecşii necesari. Pentru fişierul agen i. şterge i (DEL) fişierul index. 8.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 3. pentru SET SAFETY ON şi OFF Folosind baza de date Biblioteca creat în lucrarea anterioar : • • stabili i rela iile dintre tabele. − − − 2. introduce i date în fiecare tabel. da i comanda USE cu fişierul DBF pentru care a i creat indexul. M rfuri. • 9. 6.

0) TIP C (1) (intr ri.0) AGENTI NR_AGENT N (4. Pentru calculul impozitului crea i o func ie numita IMPOZIT.0) NUME C (10) PRENUME C (10) ORAS C (10) JUDET C (2) ANGAJARE D NASTERE D SEX C (1) CAS L (casatorit. 12. Crea i un fişier numit SALARIAT cu structura: nume. folosind comenzile de intrare/ieşire înv ate in aceasta 3-75 .0) NR_AGENT N (4.0) COD_PRODUS N (6.etc. impozit.) LOCALITATE C (10) JUDET C (2) PRIVAT L TRANZACT NR_TRANZ N (6. Şterge i din tabelul MARFURI liniile cu cantitatea sub 10. SRL.0) DENUMIRE C (15) TIP C (3) (SA. rest_plata. Scrie i un program care sa va permit introducerea datelor într-un fişier creat de dvs.0) DATA_TRANZ D NR_FACT N (6. 75000 pentru cei din restul jude ului.0) DENUMIRE C (12) TIP_MODEL C (10) UN_MAS C (6) PRET_UN N (8. Ad uga i în tabelul AGENTI o coloana numeric PRIME şi completa i valorile dup cum urmeaz : 100000 pentru cei din oraşul Iaşi.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice CLIENTI NR_CLIENT N (8.0) CANT N (4. Calcula i impozitul pentru persoanele cu un salar mai mare decât o valoare pe care o introduce i folosind comanda ACCEPT. Ad uga i în tabelul FACTURI o coloana TVA şi completa i valorile cu 19% din coloana VALOARE.) SAL_BAZA N (6.0) 10. 13.0) NR_TRANZ N (6. (Exemplu: pentru salarii intre 500000-1500000 impozitul este 105000 plus 28% din diferen a dintre salar şi baza de 500000). sau pre ul unitar <1500. ieşiri) MARFURI COD_PRODUS N (6.etc.0) DATA_EM D ACH L (achitata sau nu) DATA_ACH D VALOARE N (10. salar. 11.0) NR_CLIENT N (8.0) CANTITATE N (8. 60000 pentru ceilal i.0) FACTURI NR_FACT N (6.

• pentru brut intre 500000 şi 1000000-105000 + 10% din brut . şi media.0) NOT 3 N(3. altfel la 4. La salariul de baz se ad uga 3% din tranzac iile "cump rare" şi respectiv 6% din cele de vânzare intermediate. apoi în ordine cresc toare pentru nume. nr_agent. Scrie i un program pentru calcularea mediilor studen ilor unei grupe format din dou semigrupe. • Mediile se vor calcula cu o func ie.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice lucrare. Crea i fişierul DATEPERS. 3-76 . • Ca rezultat se cere un fişier CLAS.) în care s apar liniile sortate cresc tor dup nume. Folosi i instruc iunile de validare a datelor pentru câmpurile unde acest lucru este necesar. prenume şi num r matricol.0) NOT zero reprezint absenta la examenul respectiv. 14. • Aten ie la folosirea literelor mari şi mici şi la eventualele spa ii de la începutul câmpurilor caracter.0) && num r matricol NOT 1 N(3.0) NOT 2 N(3. dup urm toarea regul : pentru o singur absen . 15. Impozitul se calculeaz astfel: • se determin suma bruta ca fiind salbaza+sporuri=brut.0) NOT 4 N(3. se împarte suma notelor la 3. Scrie i un program de calcul al salariilor agen ilor comerciali pentru luna precedent celei curente.500000 • pentru brut intre 1000000 şi 1500000-275000 + 25% din brut-1000000 16.DBF cu urm toarele elemente: NUME C(10) PRENUME C(10) NR_AGENT N(4) SALBAZA N(6) SPORURI N(6) && procente din baza+comision IMPOZIT N(6) RETINERI N(6) Ca rezultat se cere un fişier numit SALAR. Ca date de intrare ave i fişierul STUD.DBF (tot cu o coloana nr_crt. prenume.DBF cu structura : NUME C(15) PRENUME C15) ID N(3. • Articolele trebuie sortate în ordine cresc toare a semigrupelor şi a mediilor.DBF în care apar dou câmpuri suplimentare nr_crt.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 17. Scrie i un program care s realizeze un joc asem n tor cu spânzur toarea. Num rul de încerc ri poate fi 5. Scrie i un program care s creeze un fişier pentru facturile neachitate şi num rul de zile de întârziere acumulate. grupate pe clien i. Cuvintele ce trebuie ghicite sunt stocate într-un fişier numit BAZA. iar în loc de desenul cunoscut pute i afişa diverse mesaje. încas ri şi pla i. 18. 3-77 .

programare ce reprezint o abordare nou . Un obiect reprezint ansamblul de date şi procedurile de prelucrare a acestora. într-un anumit limbaj de programare. împreun cu propriet ile şi metodele lor. În acest context. Clasele şi obiectele sunt înrudite. propriet i ce pot fi stabilite în faza de proiectare sau execu ie. care sunt componente de sine st t toare ale aplica iei. Clasa reprezint defini ia.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 4 Programarea orientata pe obiect-clase şi obiecte în Visual Fox Pro Mediul Visual Fox Pro este compatibil atât cu programarea structurat standard cât şi cu Programarea Orientat pe Obiect (POO). Un obiect are propriet i sau atribute determinate de clasa care st la baza lui. în tabela de mai jos sunt prezentate câteva dintre propriet ile obiectului numit caset de validare : Proprietatea Caption Enabled Fore Color Left MousePointer Top Visible 4-78 Descriere Textul descriptiv de lâng caseta de validare Specific dac utilizatorul poate selecta sau nu caseta de validare Culoarea textului afişat drept titlu Pozi ia marginii din stânga a casetei de validare Felul în care arat indicatorul mouse-ului când se afla deasupra casetei de validare Pozi ia marginii de sus a casetei de validare Specific dac pentru utilizator caseta de validare este vizibil sau nu . adic descrierea propriet ilor şi metodelor componente. deci determina caracteristicile acestuia. De exemplu. a unui tip de obiecte. Clasa con ine informa ii despre cum trebuie s arate şi s se comporte un obiect. procedurile se numesc metode iar caracteristicile obiectului sunt propriet i. dar nu sunt similare. Primul nivel de împachetare se numeşte clas . în care în loc s ne gândim la execu ia unui program de la prima pân la ultima linie de cod. va trebui s analizam obiectele. POO este o modalitate de a împacheta codul astfel încât sa poat fi refolosit şi între inut mai uşor.

Metodele difer de procedurile obişnuite deoarece sunt legate indisolubil de obiect şi sunt apelate altfel decât celelalte proceduri. ap sarea unei taste. 4-79 . • Caracteristicile claselor sunt : Încapsularea – implic împachetarea codului în cadrul obiectului şi abstractizarea acestuia. În Visual Fox Pro ac iunile utilizatorilor ce pot declanşa evenimente sunt mişcarea mouse-ului. dac scrie i cod pentru metoda asociat evenimentului Click. Metodele sunt procedurile ataşate unui obiect. metodele şi evenimentele asociate unui obiect sunt specificate în cadrul defini iei clasei.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Metode şi evenimente asociate unui obiect Fiecare obiect poate recunoaşte şi poate reac iona la unul sau mai multe evenimente. Evenimentele pot avea metode asociate. etc. clasele au o serie de caracteristici ce permit scrierea de cod care este uşor de între inut şi poate fi reutilizat. Evenimentele declanşate de sistem sunt ini ializarea unui obiect sau întâlnirea unei linii de cod ce genereaz o eroare. ini iat de utilizator sau de sistem. De exemplu. Un eveniment este o ac iune specific şi predeterminat . Tabelul de mai jos prezint câteva evenimente asociate unei caseta de validare: Eveniment Click GotFocus LostFocus Refresh SetFocus Descriere Utilizatorul execut click în caseta de validare Utilizatorul selecteaz caseta de validare printr-un click de mouse sau prin ap sarea tastei TAB Utilizatorul selecteaz alt control Valoarea casetei de validare este actualizat pentru a reflecta modific rile survenite în cadrul sursei de date asociate Casetei de validare i se atribuie focusul (devine inta intr rilor) ca şi cum utilizatorul ar fi ap sat tasta TAB Clasele Toate propriet ile . codul respectiv se execut la apari ia evenimentului click. În plus. De exemplu. propriet ile ce determin elementele unui casete cu lista şi codul ce se execut atunci când selecta i un element din list pot fi încapsulate într-un singur control ce se adaug la un formular.

pe care programatorul le poate seta.) Biblioteca de clase în care este stocat Clasa din care a fost derivat (dac deriv dintr-o clas de baz .Grid. Combo Box. CommandButton. Column. Subclasele moştenesc toate func ionalit ile clasei p rinte. dup care ad uga i unui formular un obiect bazat pe aceast clas . De exemplu. List Box. Command Button Group • Clasele containere pot s con in alte obiecte. Page. în cazul în care crea i o clas container care cuprinde o caset list şi dou butoane de comand . Spinner.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Subclasele – sunt derivate dintr-o clasa existent . Command Button. Option Button Group. Moştenirea este caracteristica ce permite ca o modificare efectuat asupra unei clase s se reflecte în toate clasele definite pe baza ei. permi ând accesul la acestea. dup cum se arat în lista urm toare: • Controale: Check Box. • În Visual Fox Pro clasele pot fi de tip control sau container. reutilizând astfel codul deja existent. Text Box. Label . Header. OLE Container Control. Hyperlynk. dar pot avea şi propriet i noi. Form . Timer Containere: Container. Page Frame. Form Set. Toate clasele recunosc urm torul set minimal de evenimente: Eveniment Init Destroy Error Descriere Apare la crearea unui obiect Apare la desc rcarea unui obiect din memorie Apare de câte ori se semnaleaz o eroare Toate clasele recunosc urm torul set minimal de propriet i: Proprietate Class BaseClass ClassLibrary ParentClass Descriere Tipul clasei Clasa de baz din care provine (Form. Toolbar. OLE Bound Control. Shape. fiecare obiect poate fi manipulat individual. actualizarea automat ducând la economisirea timpului şi a efortului dvs. Edit Box. ParentClass este aceeaşi cu BaseClass) 4-80 . atât la proiectare cât şi în timpul execu iei. Image. etc. Line.

− Da i click pe Add. Deasemeni se poate introduce sau modifica codul asociat metodelor necesare. grile. − Specifica i vizibilitatea (Public. Plasat într-un formular. − În caseta New Property introduce i numele propriet ii.1 Crearea claselor Se poate face din cadrul gestionarului de proiecte. selecta i New Property. Protected. etc. se pot ad uga controale (butoane. Class. New File sau folosind comanda : CREATE CLASS ClassName | ? [OF ClassLibraryName1 | ?] [AS cBaseClassName [FROM ClassLibraryName2]] [NOWAIT] Modificarea unei clase va afecta toate subclasele şi obiectele bazate pe acea clas şi se face prin selectarea clasei dorite şi alegerea op iunii Modfiy. op iunea New. cu eticheta Exit. Hidden) . Command Clasa de baz Exit Subclasa Obiect în formular 4. 4-81 . imagini. Interfa a proiectantului de clase ne permite vizualizarea şi modificarea propriet ilor clasei în fereastra Properties. ca o subclas a clasei butoane de comand . Daca noua clas se bazeaz pe una de tip container. Proiectantul de clase Proiectantul de clase se deschide atunci când este indicat clasa pe care se va baza noua clas creata şi biblioteca în care aceasta va fi stocat . selectând pagina Classes şi apoi New sau din meniul File. Unei clase existente i se pot ad uga propriet i noi astfel: − Din meniul Class. acest buton devine un obiect.).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu : plecând de la clasa de baz CommandButton putem crea un buton care s execute ieşirea din formular.

Din caseta de dialog Open alege i o biblioteca de clase pe care sa o ad uga i şi selecta i Open.. În caseta Class Info introduce i numele şi calea pentru fişierul. Din meniul Tools. Clasa p rinte este numit Navbutton şi va fi definit ulterior. da i click pe proprietatea dorit şi introduce i noua valoare. Pentru a specifica o alt valoare. 4-82 .. Odat definit clas p rinte.bmp din caseta Toolbar Icon... ENDDEFINE Exemplu : Crearea unui set de butoane de navigare pentru vizualizarea înregistr rilor dintr-o tabel . în fereastra Properties. PropertyName2. în fişa Other.. pozi ionare pe ultima înregistrare din tabela –navbottom. [[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name [NODEFAULT]cStatements [ENDFUNC | ENDPROC]]. pozi ionare pe înregistrarea anterioara celei curente-navprior. 3. Va fi creat o clas container. Selecta i Visual Class Libraries şi alege i Add.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Într-un mod asem n tor se poate ad uga şi o metod nou unei clase.F.]PropertyName = eExpression. • • Butoanele vor avea caracteristici comune.] [ADD OBJECT [PROTECTED] ObjectName AS ClassName2 [NOINIT][WITH cPropertylist]].. Atunci când ad uga i o proprietate nou . Butoanele de navigare vor execut urm toarele comenzi: • • pozi ionare pe prima înregistrare din tabela – navtop. Definirea claselor prin program se face cu comanda : DEFINE CLASS ClassName1 AS ParentClass [OLEPUBLIC] [[PROTECTED | HIDDEN PropertyName1. valoarea ei implicit este . pozi ionare pe înregistrare urm toare celei curente – navnext. apoi alege i fişa Controls.. alege i op iunea Options. 2.. Ad ugarea claselor la formulare se face astfel : 1. de aceea merit s cre m o clas pentru toate butoanele de navigare.] [Object. subclasele ce urmeaz definesc func ionalitatea şi aspectul specific fiec rui buton. Atribuirea unei pictograme pentru noua clas în vederea afiş rii pe bara de instrumente se face prin selectarea op iunii Class Info din meniul Class (trebuie sa fi i în proiectantul de clase).

TableAlias) select (this. în care va fi ad ugat fiecare buton.Refresh Endproc Enddefine * Definirea butonului Top Define class Navtop as Navbutton caption='T' Procedure click dodefault() go top this. Containerul va fi apoi ad ugat formularelor pentru a se putea naviga în cadrul tabelei.TableAlias) endif endproc Procedure refreshform _screen.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice numit vcr.prg *Definirea clasei NAVBUTTON Define class Navbutton as CommandButton Height=25 Width=25 TableAlias =' ' Procedure click if not empty(this.refreshform endproc Enddefine 4-83 .ActiveForm. Exemplu: Scrie i un program numit navclass.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice * Definirea butonului Prior Define class Navprior as Navbutton caption='P' Procedure click dodefault() skip -1 if bof() go top endif this.refreshform endproc Enddefine * Definirea butonului Next Define class Navnext as Navbutton caption='N' Procedure click dodefault() skip 1 if eof() go bottom endif this.RefreshForm endproc Enddefine * Definirea butonului Bottom Define class Navbottom as Navbutton caption='B' Procedure click dodefault() go bottom this.refreshform endproc Enddefine 4-84 .

astfel încât utilizatorul s -şi poat îndeplini cât mai intuitiv şi uşor sarcinile. iar la ieşirea din formular acestea vor fi automat închise.TableAlias=cTableAlias endif enddefine *Adăugarea controlului vcr la o clasa formular define class navform as form add object ovcr as vcr enddefine 4. Mediul de date este un obiect ce cuprinde tabelele şi vederile cu care interac ioneaz formularul.TableAlias=cTableAlias this.cmdprior. Acesta poate fi accesat alegând din meniul File op iunea New Form sau folosind comanda CREATE FORM. modificare. machete.2 Crearea formularelor Formularele (sau formele. mediul de date va deschide tabelele sau vederile asociate.TableAlias=cTableAlias this. ştergere sau consultare a informa iilor stocate. Proprietatea ControlSource a controalelor va fi populat .TableAlias=cTableAlias this. f cându-se 4-85 . Fiecare formular include un mediu de date. Mediul de date poate fi salvat împreun cu formularul.cmdnext.cmdbottom. Formularele sunt compuse din obiecte ce pot r spunde la evenimente generate de utilizator sau sistem.cmdtop. precum şi rela iile dintre tabele. astfel încât ori de câte ori respectivul formular va fi accesat. Un formular nou se creeaz cu ajutorul proiectantului de formulare (Form Designer). ecrane) sunt interfe e grafice ce ofer utilizatorului posibilitatea de a ac iona asupra tabelelor de date prin opera ii de ad ugare.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice * Definirea clasei vcr define class vcr as container height=25 width=100 left=50 top=3 add object cmdtop as navtop with left = 0 add object cmdprior as navprior with left = 25 add object cmdnext as navnext with left = 50 add object cmdbottom as navbottom with left = 75 procedure settable(cTableAlias) if type("cTableAlias")='C' this.

) Dac nu se specific . Atunci când se stabileşte o rela ie în cadrul mediului de date.) AutoOpenTables InitialSelectedAlias Adev rat(. Dac pentru tabelele ce au fost ad ugate în mediul de date existau rela ii permanente. acestea se p streaz şi sunt vizibile. Controalele dintr-un formular pot fi de dou tipuri : controale care sunt asociate unor surse de date şi controale ce nu au date asociate. valorile introduse de el sunt stocate în sursa de date. Dup ce am definit mediul de date asociat unui formular va trebui s ii ad ugam obiectele necesare. acestea se pot crea prin tragerea unui câmp din tabela primar peste eticheta de index corespunz toare din tabela asociat . 4-86 . apoi click dreapta şi Add. Data Environment. Daca proprietatea ControlSource nu este configurat . În caseta de dialog Open alege i tabela dorit .T. repetând opera ia de ad ugare pân ce lista de tabele este epuizat . în momentul execu iei este selectat primul cursor ad ugat în DataEnvironment Eliminarea unei tabele din cadrul mediului de date se face prin selectarea tabelei urmat de selectarea op iunii Remove din meniul DataEnvironment. Dac nu exist rela ii persistente între table. Cele mai importante propriet i ce trebuie setate pentru mediul de date sunt: Proprietate AutoCloseTables Descriere Controleaz închiderea automat a tabelelor la eliberarea formularului din memorie Controleaz deschiderea automat a tabelelor la rularea formularului Indic tabela selectat la rularea formularului Valoare implicit Adev rat(. Propriet ile ce determin asocierea cu datele sunt ControlSource pentru un control gril sau RecordSource pentru celelalte. valoarea introdus de utilizator sau cea pe care o alege din cadrul controlului este p strat ca valoare a propriet ii şi nu va fi salvat pe disc sau în memorie. Atunci când utilizatorul interac ioneaz cu controalele asociate datelor. Pentru a accesa fereastra de proiectare a mediului de date alegem din meniu op iunea View.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice automat leg tura între sursa de date şi ceea ce va fi afişat pe ecran. propriet ile acesteia putând fi setate din fereastra Properties.T. între tabele va ap rea o linie care reprezint rela ia.

optgr.. Dac utilizatorul alege butonul 3.Button(1). Proprietatea Value indic butonul care a fost selectat.optgr.Caption=”Tablete” ThisForm.SetAll(“Enabled”.Caption=”Fiole” unde-ThisForm este forma activa in care se lucreaz -Optgr este numele grupului de butoane -Button este butonul selectat Configurarea propriet ilor tuturor butoanelor dintr-un grup se poate face folosind metoda SetAll a grupului.F. Dac proprietatea ControlSource a grupului este un câmp de tip caracter. Exemplu: consider m c avem un grup de dou butoane prin setarea c rora dorim s stabilim dac un medicament se prezint sub forma de tablete sau fiole. De exemplu.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 4. aceste butoane pot fi folosite în cazul în care dorim ca o list sa fie afişat pe ecran sau trimis c tre o imprimant . proprietatea Value este dat de titlul butonului selectat. Configurarea propriet ilor se poate face manual pentru tot grupul de butoane sau pentru fiecare buton în parte din fereastra Properties. atunci Value va avea valoarea 3.. sau în timpul execu iei. Implicit în grupul de butoane de op iune sunt introduse dou butoane. Pentru a determina care dintre butoane este selectat la un moment dat se foloseşte proprietatea Value a grupului. ThisForm. Butoanele de op iune pot fi folosite şi pentru p strarea informa iilor într4-87 . Exemplu: ThisForm. indicând numele butonului şi valoarea respectiv pentru proprietatea dorit .optgr. Prin modificarea propriet ii ButtonCount se poate specifica num rul de butoane dorit. în fereastra de propriet i sau s scriem codul asociat.3 Utilizarea controalelor predefinite Butoane de op iune Grupurile de butoane de op iune sunt containere ce cuprind butoane de op iune. sau dac propriet ii Value i se atribuie o valoare de tip caracter înainte de rularea formularului.”OptionButton) va dezactiva toate butoanele din grup. Ele permit utilizatorilor sa aleag doar una dintre op iunile puse la dispozi ie în loc s introduc direct datele.Button(2). Va trebui s setam proprietatea Caption a butonului.

Într-o caseta tip list . completând valoarea corespunz toare pentru proprietatea RowSource. o tabela. Într-o caseta derulant este vizibil doar un singur element. Propriet i şi metode ale unei liste : Proprietate ColumnCount ControlSource Multiselect RowSource RowSourceType Metode AddItem RemoveItem Requery Descriere Num rul de coloane din caseta list P streaz valoarea aleas de utilizator din cadrul listei Indic dac utilizatorul poate selecta mai multe elemente la un moment dat Sursa de provenien a elementelor afişate în list Indic tipul pentru RowSource (o valoare. Utilizatorul poate executa click pe butonul s geata în jos pentru a afişa toate elementele listei.) Descriere Adaug un element la o list pentru care proprietatea RowSourceType este 0 Elimin un element dintr-o list pentru care proprietatea RowSourceType este 0 Actualizeaz lista dac valorile din RowSourceType s-au modificat Alegerea tipului de date pentru o caset list sau caset cu list derulant se face prin setarea propriet ii RowSourceType şi prin atribuirea unei surse de date. Casete list şi casete cu list derulant Casetele tip list şi casetele tip list derulant (casete combinate. o interogare. Pentru aceasta va trebui s : • • Atribuim un sir vid propriet ii Value a grupului de butoane.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice o tabel . în orice moment. sunt vizibile mai multe elemente ale listei. pentru care proprietatea Style are valoarea 2 – DropdownList) ofer utilizatorului liste cu cuprind informa ii ce pot reprezenta valori dintr-un tabel sau op iuni predefinite. Atribuim Propriet ii ControlSource a grupului de butoane un câmp de tip caracter dintr-o tabel . 4-88 . etc. prin salvarea propriet ii Caption.

AddItem(“Al treilea element”) Metoda Remove Item permite eliminarea elementelor din list . ea va trebui inclus între ghilimele.AddItem(“Primul element”) ThisForm.list1. Dac RowSourceType este 3 trebuie sa include i o instruc iune SQL SELECT în proprietatea RowSource. dac este 3. ThisForm.list1.AddItem(“Al doilea element”) ThisForm.list1. Elementele trebuiesc separate prin virgul iar dac acestea vor fi introduse prin program vor trebui încadrate între ghilimele.list1.RowSourceType=1 ThisForm. Elementele listei se adaug prin program Valoare Alias Instruc iune SQL Interogare (Query)(. Dac instruc iunea va fi scris prin program. elementele listei se pot ad uga folosind metoda AddItem ThisForm.Al doilea. ThisForm.qpr) Matrice Câmpuri dintr-o tabel Fişiere Structur Lista pop-up (inclus pentru compatibilitate versiunile anterioare) cu Exemple : Dac RowSourceType este 0.RowSource=”Primul.list1.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice RowSourceType 0 1 2 3 4 5 6 7 8 9 Sursa elementelor listei Nici una. lista afişeaz valorile din primele trei câmpuri.RemoveItem(3) – pentru eliminarea celui de al treilea element • Dac RowSourceType este 1 se pot indica pentru proprietatea RowSource mai multe valori care sa fie afişate în cadrul listei.list1. Dac ColumnCount este 0 sau 1 se afişeaz primul câmp al tabelei. Pentru a afişa câmpurile într-o alt ordine decât cea din tabela seta i RowSourceType pe 3 sau pe 6. Este de preferat ca rezultatele interog rii s fie plasate într-un cursor pentru a nu se afişa 4-89 • • .RowSourceType=0 ThisForm. în func ie de setarea pentru ColumnCount.list1. Al treilea“ Dac RowSourceType este 2 se pot insera valori din câmpurile tabelei deschise.

cu op iunea c pot fi alese şi alte unit i de disc. Se lanseaz comanda ThisForm.qpr.List1. Dac RowSourceType este 7 atunci lista cuprinde fişierele din directorul curent.RowSource=”numefisier. indicatorul de înregistr ri este fixat automat pe înregistrarea dorit . Dac RowSourceType este 8 atunci lista cuprinde câmpurile specificate în tabela precizat la RowSource. Dac RowSourceType este 4 caseta poate fi populat cu rezultatul unei interog ri salvate într-un fişier cu extensia “.qpr” Dac RowSourceType este 5 atunci lista este populat cu elementele unei matrici. putem proceda astfel. Dac RowSourceType este 6 atunci lista este populat cu câmpurile din structura fişierului dorit specificate în RowSource şi delimitate prin virgul .Refresh în evenimentul InteractiveChange al listei pentru afişarea noilor valori în celelalte elemente ale formei În cadrul evenimentului InteractiveChange selecta i tabela ce con ine înregistrarea cu valoarea dorit . De exemplu dac RowSource con ine numele de identificare pentru pacien i. ThisForm. dac lista este populat cu numele pacien ilor trata i de un medic şi dorim s afiş m toate informa iile legate de pacient.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • rezultatul într-o fereastra Browse.Refresh 0-Nici una 1-Valori 3-Instructiune SQL 4-Interogare (qpr) 4-90 . apoi c uta i valoarea respectiv .qpr”.Value=pacient_id Thisform. • • • • Se poate oferi utilizatorului posibilitatea de a alege o op iune din list . pentru care s fie afişate o serie întreag de alte informa ii. în func ie de sursa de date a formularului: RowSourceType 2-Alias 6-Cimpuri Selectarea înregistr rilor corespunz toare Când utilizatorul selecteaz o valoare din list . se poate folosi codul urm tor Select pacienţi Locate for This. caz în care propriet ii Row Source i se atribuie fişierul. De exemplu.

Daca s-a setat valoarea . Totuşi exist cazuri în care nu se poate evalua cu precizie starea dorit .’). valoarea afişat în caseta text este stocat în proprietatea Value a acesteia şi în variabila sau câmpul specificat în ControlSource. Configurarea sau modificarea prin program a textului afişat în caset se face prin setarea propriet ii Value a acesteia.F.null. Validarea datelor dintr-o caseta tip text se face prin scrierea de cod asociat metodei Valid. − Caseta tip text Caseta tip text este controlul de baz în care utilizatorul poate s introduc sau s modifice datele p strate într-un câmp al unei tabele. caseta va fi : − − bifata dac valoarea înregistr rii curente este . câmp ce nu este de tip memo. activat sau dezactivat. Dac se asociaz propriet ii ControlSource a unei casete de validare un câmp de tip logic dintr-o tabel . nu va fi bifat dac valoarea înregistr rii curente este . sau . motiv pentru care exist patru st ri posibile pentru caseta de validare şi anume : Forma afişat Proprietatea Value 0 sau. 4-91 . va fi afişat mesajul “Invalid Input” sau propriul dvs. etc). 1 sau. va avea un semn pe fond cenuşiu dac valoarea înregistr rii curente este . .F.T. .F.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Casete de validare Casetele de validare sunt folosite pentru a permite utilizatorului s specifice o stare de tip logic (True sau False. Dac proprietatea ControlSource este specificat . Dac metoda Valid întoarce valoarea . tipul de data este Logical. 2 Null Proprietatea Value a casetei de validate indic tipul de date corespunz tor ultimei atribuiri efectuate. şi nu se va schimba decât atunci când ve i atribui propriet ii o valoare numeric . mesaj specificat în codul evenimentului Valid (se poate folosi func ia Messagebox() sau comanda Wait Wind ‘mesajul dvs.T.F.T.

999. cu dou zecimale. Dac se doreşte acceptarea introducerii unor valori f r ca acestea s apar în clar (de exemplu la introducerea unor parole). automat). Câmpul tabelei sau variabila a c rei valoare este afişat ControlSource 4-92 . Cele mai importante propriet i pentru casetele tip text sunt : Proprietate Alignment Descriere Seteaz tipul de aliniere a valorilor introduse în caseta (stânga. De exemplu dac InputMask are valoarea 999. dac se doreşte ca utilizatorul s poat introduce “Y” (Da ) şi “N” (Nu) dar nu şi “T” sau “F” atribui i valoarea “Y” propriet ii InputMask.99 se vor introduce în caset doar numere mai mici de un milion. Alinierea depinde de tipul de dat introdus. Pentru a introduce date calendaristice vor fi setate urm toarele propriet i: Proprietate Century DateFormat StrictDdateEntry Descriere Indic dac sunt afişate sau nu primele dou cifre ale anului Formateaz datele de intrare într-unul dintre cele 15 formate de dat predefnite Dac este 0 permite introducerea datelor într-un format mai flexibil decât cel implicit 99/99/99.Value) < 100 = Messagebox(“Introduceţi o valoare mai mare decât 100”. dreapta.1) Return 0 Endif Pentru a selecta textul atunci când caseta text devine inta intr rilor atribui i valoarea .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: dorim s introducem într-o caset de tip text un num r mai mare decât 100. Virgula şi punctul vor fi afişate în caset înainte de introducerea datelor. Pentru câmpuri de tip logic. Pentru a valida datele introduse de utilizator inseram codul asociat metodei Valid astfel: If val(This. centru. propriet ii SelectOnEntry. se atribuie propriet ii PasswordChar valoarea “*” sau orice alt caracter generic.T. Proprietatea InputMask determin caracteristicile textului introdus în caset .

putem selecta primul cuvânt dintr-o caseta astfel: Form1.SelStart=0 Form1.text1. Dac TabStop este . Ele pot fi de dou feluri: casete combinate derulante şi liste derulante.Text1.text)-1 Cele mai importante propriet i ce pot fi configurate pentru casetele de editare sunt : Proprietate AllowTabs Descriere Stabileşte dac este permisa utilizarea tastei TAB în caseta de editare (caz în care trebuie verificat dac se poate trece la controlul urm tor cu CTRL+TAB) Stabileşte dac textul din caseta de editare este selectat în mod vizibil atunci când caseta nu de ine focusul Stabileşte dac textul din caseta poate fi modificat sau nu Indic prezenta sau absenta barelor de defilare HideSelection ReadOnly ScrollBars Casetele combinate Acest tip de caset reuneşte func ionalit ile casetelor de tip list şi a celor de tip text. ca şi casetele text au propriet i ce permit lucrul cu textul selectat şi anume: SelLenght. .text1. ea poate fi totuşi selectata efectuând click pe ea.F.Form1.SelLenght= AT(“ “.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice InputMask SelectOnEntry TabStop Indic regulile de introducere a datelor Stabileşte dac la primirea focusului con inutul casetei va fi selectat automat Indic dac utilizatorul poate ajunge la caseta ap sând repetat tasta TAB. Cele mai importante propriet i ce pot fi configurate pentru casetele combinate sunt : 4-93 . Aceste casete asigur saltul automat al textului pe rândul urm tor şi posibilitatea de deplasare în cadrul textului folosind s ge ile. func ie de specifica ia asociata propriet ii Style a controlului. SelStart şi SelText De exemplu. Caseta de editare Casetele de editare permit afişarea şi editarea unui text provenit din câmpuri lungi de caractere sau câmpuri memo. Casetele de editare.

La evenimentul Valid vom scrie urm toarea secven a de cod care. înainte de ad ugarea elementului.T.text) Endif Casetele de incrementare/decrementare (Spinner) Se folosesc pentru a permite utilizatorilor s introduc valori dintr-o plaj anterior stabilit .F. Elexista =. Exit Endif Endfor If !Elexista This.ListCount If This. Intervalul de valori se specific prin setarea propriet ilor KeyboardHighValue şi SpinnerHighValue (valoarea maxim posibil ) şi KeyboardLowValue şi SpinnerLowValue (valoarea minim posibil ).AddItem (This.Text Elexista=.List(i)= This. 4-94 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Proprietate ControlSorce DisplayCount InputMask IncrementalSearch Descriere Indic câmpul în care va fi p strat valoarea aleas sau introdus de utilizator Num rul maxim de elemente afişate în list Tipul valorilor ce pot fi introduse Indic dac controlul încearc s g seasc un element din list care s corespund cu literele deja introduse Sursa datelor din list Indic tipul sursei casetei combinate. RowSource RowSourceType Style Exemplu : Dorim s ad ugam noi valori la elementele afişate într-o caset combinat cu list derulant . Valorile sunt similare cu cele de la caseta tip list Indica dac caseta este o caset combinat derulant sau list derulant . (presupunem ca valoarea nu exist ) For I=1 to This. s verifice dac acesta nu exist deja în list .

Exemplu : Pentru a parcurge un interval de date calendaristice. el poate fi utilizat în combina ie cu o caset de tip text pentru a permite utilizarea altor tipuri de date. Cele mai importante propriet i ce pot fi configurate pentru butoanele de comanda sunt : Proprietate Cancel Caption DisablePicture DownPicture Enabled Picture Descriere Indic dac se execut sau nu codul asociat evenimentului Click la ap sarea tastei ESC Textul afişat pe buton Fişierul de tip imagine (bmp) afişat la dezactivarea butonului Fişierul de tip imagine (bmp) afişat la activarea butonului Dac butonul poate fi selectat sau nu Fişierul de tip imagine (bmp) afişat pe buton 4-95 . Cele mai importante propriet i ce pot fi configurate pentru Spinner sunt : Proprietate Descriere Pasul de incrementare/decrementare Interval Valoarea maxim ce poate fi introdus în KeyboardHighValue caseta text a controlului Valoarea minim ce poate fi introdus în KeyboardLowValue caseta text a controlului Cea mai mare valoarea ce poate fi afişat de SpinnerHighValue control când se apas butonul s geata sus Cea mai mic valoarea ce poate fi afişat de SpinnerLowValue control când se apas butonul s geata jos Buton de comanda Grup de butoane de comanda Butoanele de comanda permit executarea unor ac iuni. Atribuim o dat calendaristic propriet ii Value a casetei text iar în codul evenimentelor UpClick şi DownClik ale Spinner-ului increment m sau decrement m data.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Deşi controlul Spinner este configurat pentru valori numerice. De obicei codul asociat ac iunii este specificat în evenimentul Click. se va dimensiona controlul astfel încât s fie vizibile doar butoanele şi plasam caseta text lâng el.

Cele mai importante propriet i ce pot fi configurate pentru controlul etichet sunt : 4-96 .por iunile imaginii ce dep şesc dimensiunile controlului nu sunt afişate 1-Isometric – sunt p strate dimensiunile originale ale imaginii 2.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Dac se doreşte folosirea unui grup de butoane de comand înseamn ca ele au caracteristici comune şi codul asociat se poate scrie într-o singur procedur (de exemplu codul pentru Click). Cele mai importante propriet i ce pot fi configurate pentru controlul imagine sunt : Proprietate Picture BorderStyle Stretch Descriere Imaginea (fişierul bitmap) ataşat Exist sau nu chenar vizibil 0-Clip .Stretch – imaginea este scalat corespunz tor dimensiunilor controlului Controlul etichet Difer de caseta text prin urm toarele : nu are surs de date. nu se poate ajunge la el prin ap sarea tastei TAB. Cele mai importante propriet i ce pot fi configurate pentru grupurile de butoanele de comanda sunt : Proprietate ButonCount BackStyle Descriere Num rul de butoane din grup Tipul de fundal (transparent sau opac) Controlul imagine Permite afişarea imaginilor stocate într-un fişier de tip “bmp” pe un formular. Proprietate Value a grupului indic pe care dintre butoane s-a dat click. nu poate fi editat direct din interiorul s u. atunci la declanşarea evenimentului click se va executa acest cod şi nu cel general pentru grup. Propriet ile Caption şi Visible pot fi modificate prin program. Dac este scris cod pentru Click special pentru unul dintre butoanele din grup. Propriet ile acestui control pot fi schimbate prin cod în timpul execu iei astfel încât imaginea poate fi diferit de la un caz la altul.

fiecare cu propriul set de propriet i. Cele mai importante propriet i ce pot fi configurate pentru forme geometrice sunt : Proprietate Curvature FillStyle SpecialEffect Descriere Valoare cuprins între 0 (unghi de 90 grade) şi 99 (cerc sau oval) Modelul de umplere al formei geometrice Dac forma este plan sau tridimensional . Grila permite prezentarea şi manipularea liniilor şi coloanelor de date într-un formular sau o pagin şi de cele mai multe ori este folosit pentru afişarea datelor din tabele rela ionate de tip una la mai multe.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Proprietate Caption Autosize Backtyle WordWrap Descriere Textul afişat drept etichet Dac dimensiunea etichetei este ajustata func ie de cea a textului din Caption Dac eticheta este opac sau transparent Dac textul afişat continu pe mai multe rânduri Forme geometrice şi linia Aceste controale ajut la gruparea vizual a elementelor formularului şi pentru înfrumuse area lui. ce pot avea antet şi controale. Cele mai importante propriet i ce pot fi configurate pentru controlul gril sunt : 4-97 . care poate con ine mai multe coloane. Are efect doar pentru Curvature=0 Cele mai importante propriet i ce pot fi configurate pentru controlul linie sunt : Proprietate BorderWidth LineSlant Descriere Grosimea liniei în pixeli Direc ia liniei în cazul în care nu este orizontal sau vertical (valorile valabile pot fi / sau \) Controlul de tip gril Grila este un obiect de tip container. evenimente şi metode.

paginile pot con ine controale. – controalele grilei sunt afişate doar când celula respectivei coloane este selectat Stabileşte care dintre controalele grilei este activ Cadre de pagina Un cadru de pagin este un obiect container ce poate con ine mai multe pagini.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Proprietate ChildOrder ColumnCount Descriere Cheia extern a tabelei fiu care este legat de cheia primar a tabelei p rinte Num rul de coloane: Dac este -1 grila va avea atâtea coloane câte câmpuri exist în sursa de înregistr ri Tabela p rinte a înregistr rilor fiu afişate în gril Datele ce vor fi afişate în gril Provenien a datelor din gril (tabel . La rândul lor.T. etc) LinkMaster RecordSource RecordSourceType Cele mai importante propriet i ce pot fi configurate pentru coloanele dintr-o gril sunt : Proprietate ControlSource Sparse CurrentControl Descriere Datele ce vor fi afişate în coloan (câmp din tabele) Dac este . alias. Cele mai importante propriet i ce pot fi configurate pentru cadrele de pagin sunt : Proprietate Tabs TabStyle Descriere Indic dac fişele paginilor sunt vizibile sau nu Indic dac foile sunt toate de aceeaşi dimensiune şi dac toate împreun au l imea cadrului de pagin Num rul de pagini din cadrul de pagin PageCount 4-98 .

tip rite la imprimant sau într-un fişier de tip text. Pentru a putea configura elementele raportului. mai multe instan e.4 Generatorul de rapoarte Rapoartele reprezint un ansamblu de informa ii construite pe baza datelor din unul sau mai multe tabele. iar la meniul sistem este ad ugat submeniul Report. Toolbars. Modificarea unui raport existent se face folosind comanda : MODIFY REPORT <nume raport> sau din meniul File alegem op iunea Open şi apoi selectam raportul dorit. Banda antet de pagina Banda detaliu Banda subsol pagin Dup cum se vede în figur . informa ii ce urmeaz a fi afişate pe ecranul monitorului. Report Controls. Un raport este format dintr-un ansamblu de elemente care conlucreaz la selectarea şi furnizarea c tre utilizator a unui set de date într-o form cat mai concis . folosind una din metodele : Comanda CREATE REPORT <nume raport> sau din meniul File alegem op iunea NEW şi apoi Report. clar şi pl cut . Fiecare band din cadrul raportului va genera în timpul rul rii lui.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 4. Odat lansat generatorul de rapoarte. 4-99 . Raportul se construieşte în mediul VisualFoxPro cu ajutorul generatorului de rapoarte. ne este necesar bara Report Control. va trebui s o activam din meniul View. ini ial orice raport are în componen benzile cu semnifica iile men ionate. Dac acesta nu este vizibil . pe ecran se afişeaz fereastra de lucru a acestuia. în func ie de semnifica ia pe care o are. O band dintr-un raport reprezint o forma generic a raportului final. precizând deasemeni numele raportului şi calea unde acesta va fi salvat.

se activeaz comutatorul Constant band height On Entry. care o delimiteaz şi cu ajutorul c reia poate fi redimensionat . Page Footer (Subsol) va con ine elementele necesare a fi afişate în subsolul paginii. Meniul Report con ine urm toarele op iuni: − Title/Summary – duce la afişarea unei ferestre de dialog ce permite.duce la afişarea unei ferestre de dialog ce permite gruparea datelor din raport în func ie de anumite chei de grupare 4-100 .expresia ce se verific înainte de afişarea benzii On exit .banda ce apare în raport o singura dat . Instruc iunea va fi introdus într-o func ie definita de utilizator. caz în care ea va fi lipita de banda anterioar . Ea va avea atâtea instan e cate pagini va avea raportul. Title (Titlu). Dând un dublu click pe band . cu ajutorul mouse-ului. pentru men inerea unui contor intern care s memoreze num rul de pagini tip rite. la începutul acestuia. num rul curent al paginii. afişarea în cadrul raportului a dou benzi suplimentare. a barei delimitatoare asociate. se poate executa o instruc iune de incrementare a controlului înainte sau dup fiecare afişare a benzii de antet de pagin . etc. cum ar fi. pe prima pagin . dac acesta nu trebuie s fie repetat pe fiecare pagin . în care putem afişa de exemplu titlul listei şi eventual capul de tabel. Schimbarea dimensiunii se face prin tragerea. adic câmpurile din tabela / tabele care se doresc a fi eviden iate în raport. prin selec ie. data curent . ora list rii. Fiecare band dintr-un raport are asociat o bar . iar apelul ei va fi scris în una dintre expresiile On Entry sau On Exit. numele firmei care emite documentul. de exemplu. şi poate con ine. capitolul. etc. de exemplu.în l imea benzii.expresia ce se verific dup fiecare afişarea benzii De exemplu. se deschide fereastra de propriet i în care putem specifica: Height . Summary (Rezumat) – se afişeaz singur dat .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Con inutul benzilor descrise mai sus este urm torul : Page Header (Antet) se foloseşte pentru specificarea con inutului p r ii superioare a fiec rei pagini din raport. Propriet ile unei benzi pot fi specificate de utilizator. În l imea minim a unei benzi este zero. Detail va genera în raport rândurile de detaliu (con inutul de baz al raportului). Dac se doreşte ca în l imea s fie constant pentru toate instan ele benzii. o − − − Data Grouping. Dimensiunea benzii corespunde dimensiunii zonei respective din pagina raportului final. pe ultima pagin a raportului.

Default Font – stabileşte fontul implicit cu care se lucreaz în raport. dorim sau nu − − − − Bara Report Controls con ine controalele necesare popularii benzilor raportului.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ce sunt expresii formate din câmpuri ale tabelelor sau variabile definite. cercuri.modul de dispunere a câmpurilor în cadrul raportului (orizontal sau vertical ) .prin selectarea/deselectarea acestei op iuni se indica dac mediul de date folosit este privat sau nu. Pentru fiecare nou grup în raport apar dou benzi şi anume Group Header în (antetul grupului de nivel n ) şi Group Footer n (subsolul grupului de nivel n ) . Variables – se pot defini variabile necesare rul rii raportului sau afiş rii unor anumite valori . p trate. − Run Report – rularea raportului. − Field Layout . etc. Private Data Session . − Add Alias – dac dorim sau nu prefixarea numelui câmpului cu cel al tabelei. Quick Report – duce la afişarea unei ferestre din care putem selecta : − Titles – dac dorim sau nu afişarea numelor de câmpuri. folosite pentru cosmetizarea raportului necesar afiş rii de imagini grafice 4-101 . − Add table to data environment – dac ad ugarea tabelei la mediul de date. şi anume : Select selec ie obiecte Etichet Câmp Elemente geometrice Imagine folosit la introducerea textului afişarea câmpurilor din tabelele asociate pentru desenarea de linii.

Dac tabela este legata în cadrul unei baze de date.T.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Mediul de date al raportului La construirea raportului este necesar stabilirea datelor surs . este . f r a fi necesare instruc iuni speciale în acest sens. − AutoCloseTables. − After Open tables – se pot selecta tabela curent curente. Ad ugarea unei tabele la mediul de date se face prin selectarea op iunii Add. împreuna cu anumite variabile folosite de raport.T. în mediul de date al raportului se vor înc rca şi leg turile respective. − Open Tables – comenzile pentru deschiderea efectiv a tabelelor.dac tabelelor specificate.codul ce se efectueaz dup închiderea tabelelor. el are propriet i şi metode ce pot fi manipulate. În cazul rapoartelor care folosesc dou sau mai multe tabele. în care se vor introduce instruc iunile corespunz toare pentru deschiderea tabelelor. şi înregistr rile − Before Close Tables – se pot efectua diverse calcule asupra datelor înainte de închiderea tabelelor. Principalele propriet i ale mediului de date sunt : − InitialSelectedAlias – desemneaz tabela ce va fi deschisa ini ial. se pot folosi metodele mediului de date. pentru ca informa iile s fie corect afişate. deschiderea automat a a − Close Tables – se închid efectiv tabelele. determin tabelelor specificate. este necesar specificarea în mediul de date şi a leg turilor dintre ele. alc tuiesc mediul de date. Dac se doreşte specificarea dinamic a tabelelor surs . Acestea. Mediul de date este un obiect. − After Close Tables . − AutoOpenTables – dac este . ceea ce are ca efect deschiderea automat a acestora la pornirea raportului. Principalele metode ale mediului de date sunt : − Before Open Tables – se stabileşte numele şi loca ia tabelelor. 4-102 . Ele pot avea ca surs : − un câmp din tabelele folosite. determina închiderea automat Câmpurile unui raport (Fields) Câmpurile reprezint elementele variabile ale unui raport. În mediul de date al unui raport sunt specificate tabelele surs .

disponibile la ac ionarea butonului Calculation a ferestrei Report Expresion. începerea unui nou grup. în care se poate specifica direct expresia de grupare. Start each group on a new page – fiecare grup începe pe o pagin nou . Dac se doreşte folosirea constructorului de expresii. Un câmp din raport se caracterizeaz prin : − − − Sursa de date. Fiecare criteriu de grupare este caracterizat printr-o expresie ce va fi evaluat de fiecare instan a benzii. momentul anularii fiind stabilit cu ajutorul listei derulante Reset a ferestrei Calculated Fields. Dac un grup se termin la mijlocul unei coloane. num rare. dat calendaristic . Câmpurile calculate dintr-un raport se ob in folosind func ii predefinite. deci într-un raport cu niveluri de grupare vom avea atâtea grupuri câte valori are cheia de grupare. aliniere) . listarea informa iilor nu va fi concludent . medie. − Formatul de afişare (caracter. Se pot construi rapoarte cu unul sau mai multe niveluri de grupare sau totalizare. restul spa iului din coloan va fi l sat liber şi urm torul grup începe în coloana urm toare. Gruparea datelor într-un raport Este una dintre cele mai puternice facilita i oferite de constructorul de rapoarte. Func ia de calcul (sum . Valoarea unui câmp calculat poate fi zerorizat la începerea unei pagini noi. etc. Dac nu a fost specificat în prealabil ordonarea datelor dup expresia (expresiile) de grupare. numeric. Toate înregistr rile ce corespund aceleaşi valori a expresiei de grupare vor forma un grup.coloan ). Lista Group Expresions con ine câte un rând pentru fiecare nivel de grupare. Condi ii dinamice de afişare . etc) . Func ia se alege prin intermediul butonului de selec ie. − o variabil a raportului. 4-103 − . terminarea unui grup. Specificarea expresiilor de grupare se face în fereastra Data Grouping. se d click pe butonul din dreapta câmpului de editare.− Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice o expresie format din câmpurile tabelelor din mediul de date – caz în care expresia va fi evaluat de fiecare dat la rularea raportului pentru fiecare instan a benzii respective. Pentru fiecare grup se pot specifica urm toarele propriet i: − Start group on new column – grupul s înceap în coloan nou (în cazul unui raport multi .

luna. numerotarea paginilor va începe de la 1.txt REPO FORM <numefisier. intervalul (data de început şi cea de sfârşit). dac se doreşte raportare unei situa ii a vânz rilor de medicamente dintr-o farmacie. categoria de produse. Reprint group header on each page .tip reşte antetul grupului pe fiecare pagin .pentru fiecare grup nou. Etapele ce trebuiesc parcurse pentru realizarea raportului sunt urm toarele: • • • Se construieşte o form cu care se preiau de la utilizator variabilele necesare ( cele specificate anterior). imediat dup antetul de pagin . Forma va trebui s con in în afar de câmpurile necesare prelu rii datelor şi minim dou butoane pentru rularea raportului şi închiderea formei. Se efectueaz preluarea datelor din tabele în func ie de parametrii specifica i. Start group on new page when less than -începe grupul pe pagin nou când spa iul r mas pe pagina curent este mai mic decât valoarea indicat de proiectantul raportului. adic se extrag datele. chiar dac nu începe un nou grup. De obicei comanda de rulare a raportului se introduce în metoda Click a butonului numit de exemplu „Rulare Raport” din programul de raportare. datele de raportare diferind în func ie de anumite variabile ce pot fi setate. Se d clic pe butonul de executare a raportului şi se afişeaz şi verific lista. se pot specifica o serie de parametri cum ar fi : anul. De exemplu. acelaşi raport poate fi folosit pentru mai multe tipuri de liste.txt> to <numefisier> Dac se doreşte suprimarea afiş rii listei pe ecran se va ad uga clauza Noconsole. etc. având grija ca numele câmpurilor s fie identice cu cele folosite în raport. se grupeaz corespunz tor într-o tabel temporar . 4-104 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice − − − Reset page number to 1 on each group . Programe de raportare În general. Rularea unui raport Comanda folosit este : REPO FORM <numeraport> Pentru previzualizarea raportului REPO FORM <numeraport> PREVIEW Pentru trimiterea listei direct la imprimant : REPO FORM <numeraport> TO PRINT Pentru salvarea listei direct într-un fişier de tip.

Fiecare op iune poate con ine un submeniu vertical. Meniul apare în partea superioar a ferestrei unei aplica ii şi are o structur standard. Modificarea unui meniu existent se face cu comanda : MODIFY MENU <numemeniu> sau alegând din meniul File op iunea Open. Pot fi specificate secven e de cod care s fie executate la apari ia unor evenimente şi care vor fi scrise în zona Procedure sau în fereastra deschis prin ap sarea butonului Edit. Un meniu se construieşte cu ajutorul constructorului de meniuri.5 Constructorul de meniuri Meniul reprezint un ansamblu de op iuni pus la dispozi ia utilizatorului. acesta va trebui generat din nou. Pozi ia noului meniu relativ la meniul standard al sistemului este stabilit prin intermediul butoanelor din sec iunea Location. op iuni la alegerea c rora sunt declanşate diferite opera ii de prelucrare. Obligatoriu. Append– Noul meniu va fi ad ugat la cel al sistemului.mnt. ob inându-se un fişier de tip. ce se deschide la alegerea op iunii cu acelaşi nume a meniului View. altfel modificarea efectuat nu este luat în considera ie. care va fi activat numai la alegerea op iunii respective.mnx. Propriet ile generale ale unui meniu se stabilesc în fereastra de dialog General Options. se deschide o fereastr din care se alege op iunea : − − Shortcut dac se doreşte construirea unui submeniu vertical. format dintr-o bara orizontal (submeniu orizontal) ce con ine mai multe op iuni. Proiectarea unui meniu const în specificarea elementelor componente (submeniuri şi op iuni) şi a caracteristicilor acestora (legate de aspect şi comportament). After– Noul meniu va fi pozi ionat dup op iunea din meniul sistem aleas din lista derulant .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 4. Op iunile sunt : − − Replace – Noul meniu îl înlocuieşte pe cel al sistemului. care va genera un fişier de tip. Comanda de creare a unui meniu este : CREATE MENU <numemeniu> sau alegând din meniul File op iunea New Meniu. 4-105 . Before– Noul meniu va fi pozi ionat înaintea op iunii din meniul sistem aleas din lista derulant . dup orice modificare efectuat în meniu. − − Menu dac se doreşte crearea unui meniu cu bar orizontal şi submeniuri verticale. Apoi se va genera meniul.

− − − − − 4-106 . şi anume : − Command – la alegerea acestei bare de meniu se va executa comanda specificat în coloana patru (de exemplu rularea unei forme cu comanda: do form ad ugare) . Procedure. Coloana Results cuprinde o list derulant ce con ine op iunile descrise mai jos.prin tragerea cu mouse-ul ea poate fi deplasat în sus sau jos. echivalent cu click cu mouse-ul pe op iunea respectiv . ce se determina prin ap sarea tastelor dorite. În coloana Prompt se introduce textul explicativ al op iunii. fiec reia dintre ele asociindu-se codul scris în coloana a patra. Submenu – se va deschide un submeniu care trebuie configurat dup aceleaşi reguli. Coloana Options duce la deschiderea unei ferestre în care se pot face anumite set ri pentru respectiva bara de meniu.se scrie procedura ce trebuie rulat la accesarea acestei bare de meniu. şi anume : − Key label : combina ia de taste. Pad Name – Se defineşte numele padului . Fereastra de lucru a constructorului de meniuri arat ca în figura de mai jos : Prima coloan con ine butonul de schimbare a pozi iei op iunii . în fereastra deschis prin activarea comutatoarelor Setup sau Cleanup urmat de ac ionarea butonului OK. Key text – textul suplimentar ce se va afişa lâng op iune indicând combina ia de taste aleas . text ca va fi afişat ca bar de meniu (ex : Ad ugare).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Se pot specifica secven e de cod atât pentru ini ializarea meniului Setup cât şi pentru ştergerea sa Cleanup.

scrierea caracterelor \. pentru a preveni anumite erori de rulare a programului. la un moment dat. Message – se indica textul explicativ asociat op iunii de meniu. meniul sistem este înlocuit cu cel în curs de editare. în caz contrar op iunea nu va fi accesibil . pentru o mai buna în elegere a logicii programelor. Butoanele din sec iunea Item sunt folosite pentru ad ugarea de noi elemente (Insert şi Insert Bar) sau pentru ştergerea unor op iuni (Delete). în func ie de anumite condi ii. într-o anumit secven a de meniu este permis accesul doar unor anumi i utilizatori. − − Comment – se pot introduce texte explicative. Observa ii: • • • scrierea caracterelor \< înaintea unora dintre caracterele din şirul din coloana Prompt determina ca acel caracter s fie folosit ca o tasta rapid de accesare a op iunii.mpr> şi ea este inclus de obicei în programul principal al aplica iei. Ieşirea din previzualizare se face prin ac ionarea butonului OK. În starea de previzualizare. Previzualizarea meniului se poate face în orice moment. opera ie ce se realizeaz prin alegerea op iunii Generate a submeniului Menu. 4-107 . se permite executarea comenzii asociate. Aceasta facilitate este bine venit în cazul în care. Orice meniu trebuie generat. scrierea caracteruli \ înaintea textului din coloana Prompt determin ca op iunea respectiv s fie dezactivat . de exemplu.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice − Skip for – se scrie expresia ce va fi evaluat la fiecare accesare a op iunii de meniu. Se precizeaz numele meniului şi calea în care acesta va fi salvat (salvarea se face într-un fişier cu extensia. sau sunt dezactivate. pentru verificarea codul scris şi se realizeaz prin ap sarea butonului PREVIEW a submeniului Menu.în locul textului din coloana Prompt determin ca linia de meniu s fie considerat ca o bar delimitatoare între mai multe grupuri de op iuni ale aceluiaşi submeniu. Dac rezultatul evalu rii este adev rat.mpr) Comanda de rulare a unui meniu este DO <numemeniu. chiar dac el nu a fost salvat. anumite sec iuni din meniu. ea ap rând pe ecran în culori şterse. Caracterul va ap rea ca fiind subliniat.

iar în carul lui se vor defini. etichete. alte tipuri de fişiere. programe. biblioteci de clase. În acest caz se va crea mai întâi proiectul.6 Constructorul de proiecte Proiectele reprezint înglobarea elementelor unui sistem informatic întrun tot unitar. tabele. Toate opera iile ce se efectueaz asupra unui element din cadrul proiectului se vor face din interiorul gestionarului de proiecte astfel încât proiectul s fie în permanenta actualizat. Tipurile de elemente ce pot fi incluse într-un proiect sunt: baze de date. vederi. meniuri. aplica ii. Proiectul este un fişier cu extensia. cum ar fi baze de date. rapoarte. cu ajutorul c reia se poate ine cu uşurin a evidenta tuturor componentelor unui sistem. tabele libere. biblioteci API. acesta va fi deschis. fişiere text.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Revenirea la meniul sistem se face cu comanda SET SYSMENU TO DEFAULT 4. etc. Ad ugarea de noi elemente la un proiect se face astfel: se activeaz pagina proiectului în care va fi inclus respectivul element şi se selecteaz din 4-108 . meniuri. Crearea unui proiect se face cu comanda: MODIFY PROJECT <numeproiect> Dac proiectul exist . op iunea New Project şi se ac ioneaz butonul New File. Se recomand folosirea proiectelor în momentul în care sistemul informatic ce urmeaz a fi proiectat va con ine un num r mare de elemente. forme. Fereastra ce se deschide la pornirea generatorului de proiecte arat ca în figura de mai sus şi con ine mai multe pagini corespunz toare grup rii logice a elementelor componente. interog ri. Proiectul este o facilitate pus la dispozi ia proiectan ilor de sisteme informatice.pjx. pe rând. interog ri. programe. toate elementele necesare. dac nu se va crea sau din meniul File. rapoarte. forme.

Stabilirea lui se face prin selectarea lui şi alegerea op iunii Set Main (click buton dreapta din meniul rapid). şi elemente ce nu fac parte integrant din aplica ie (baze de date. Recompilarea elementelor proiectului se face prin ap sarea butonului Build. care nu se modific la rulare. Dac elementul a fost deja creat în afara proiectului şi se doreşte ad ugarea lui la proiect. Build Application – se realizeaz o aplica ie. Dac elementul urmeaz a fi creat se apas butonul New. Elementele componente ale unei aplica ii pot fi împ r ite în dou mari categorii şi anume: elementele ce fac parte integrant din proiect.app> − 4-109 . În fereastra Build Options exist şi sec iunea Action ale c rei op iuni sunt urm toarele : − − Rebuild project – recompilarea proiectului. Display errors – afişarea erorilor. Înl turarea unui element din proiect se face prin selectarea elementului urmat de ap sarea butonului Remove. Editarea unui element din proiect se face prin selectarea elementului urmat de ap sarea butonului Modify. şi anume : − − Recompile all files – recompilarea tuturor fişierelor. cum ar fi meniuri. se apas butonul Add. Build Executable – VisualFoxPro permite rularea programelor în varianta compilat şi a aplica iilor. − Run after build – rulare dup recompilare. forme. Pentru aceasta trebuiesc îndeplinite condi iile expuse la generarea aplica iilor şi alegerea butonului Build executable. tablele) ale c ror con inut se actualizeaz permanent în momentul rul rii.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice list tipul elementului de ad ugat. În acest caz poate fi aleas una dintre op iunile specificate în sec iunea Options a ferestrei Build Options. Aplica ia este un tip special de fişier ce con ine toate elementele unui sistem informatic şi care poate fi rulat în mediu VisualFox. Orice aplica ie se construieşte în jurul unui program principal (acel program care va fi lansat primul la rularea aplica iei).exe Rularea unei aplica ii se face cu comanda: DO <nume aplicatie. Va fi generat un fişier cu extensia . rapoarte. Programele de acest tip nu pot rula în afara mediului fox şi de aceea ele trebuiesc construite într-o form executabil . Rularea unui element din proiect se face prin selectarea elementului urmat de ap sarea butonului Run.

dbf. valoarea de intrare. Construi i un raport care s va permit afişarea imaginilor grafice. data naşterii. iar la fiecare cod produs pute i asocia elemente grafice diferite. (folosi i fişierul Ag. salariul de baz ). prenume. data angaj rii. reprezentative. 3. în ordine alfabetic . Construi i un raport pentru a lista tranzac iile efectuate într-o anumit luna dintr-un anumit an. De exemplu.dbf Ma.dbf şi afişa i câmpurile nume client. în ordinea datei la care a fost efectuata tranzac ia (folosi i fişierele Ag. pute i lista toate m rfurile din fişierul Ma. 2. toate c r ile existente în bibliotec .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 4.txt. data tranzac iei. pentru care s lista i. 4-110 . nume şi prenume agent. 5. data tranzac iei ). Tr. specificând totalul valoric pentru opera iile de vânzare şi cump rare pentru fiecare zi în parte şi deasemeni un total general la sfârşit de luna (folosi i fişierele Cl.dbf şi afişa i câmpurile: nume.7 Exerciţii: 1. 6. Construi i un raport pentru a lista agen ii ce au efectuat tranzac ii într-o perioad specificat . Tr. Construi i un meniu în care s folosi i toate op iunile puse la dispozi ie de constructorul de meniuri şi în care s include i rularea unor forme. într-un fişier de tip.dbf. grupând datele în func ie de codul produsului. pe care sa-l afişa i apoi pe ecran. Construi i o form care s con in o caset de tip list care s permit selectarea unui anumit autor din tabela de autori.dbf şi afişa i câmpurile cod agent. valoare de ieşire). rapoarte şi programe construite în laboratoarele anterioare. Construi i un raport cu ajutorul c ruia s pute i lista agen ii în ordine alfabetic .dbf. 4.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 5 Limbajul SQL implementat în Oracle 5.managementul stoc rii şi definirii datelor.1 Soluţia completă Oracle Oracle SGBDR (Sistem de Gestiune Baze de Date Rela ionale) este produsul de baz al Oracle. . . Oracle furnizeaz o mare varietate de instrumente GUI pentru construirea aplica iilor.controlul şi restric ionarea accesului la date şi concuren a.interpreteaz instruc iuni SQL şi PL/SQL. El con ine un set de tabele şi view-uri care prezint o imagine read-only a bazei de date. 5-111 . Instruc iunile SQL şi PL/SQL sunt folosite de programe şi utilizatori pentru accesul şi manipularea datelor în baze de date Oracle. SGBDR gestioneaz sarcini ca: . monitorizarea şi utilizarea datelor. El include Oracle Server şi mai multe instrumente pentru a ajuta utilizatorii în mentenan . precum şi o gam larg de aplica ii software pentru afaceri şi industrie. SQL*Plus este un instrument Oracle care recunoaşte şi trimite c tre server sintaxe SQL şi PL/SQL spre execu ie şi con ine propriile comenzi. .posibilit i de salvare şi restaurare. Dic ionarul de date Oracle este o component foarte important a Serverului.

SQL*Plus este un instrument Oracle ce con ine propriu limbaj de comenzi şi care recunoaşte şi trimite instruc iuni SQL la server pentru execu ie. aceasta este stocat într-o zon de memorie numit buffer SQL şi este disponibil pân la introducerea unei noi instruc iuni. Caracteristicile limbajului SQL • Poate fi folosit de o gam larg de utilizatori. Caracteristicile limbajului SQL*Plus • Accepta fişiere cu instruc iuni SQL. • Controleaz set rile de mediu. SQL Oracle con ine multe extensii. • Furnizeaz un editor în mod linie pentru modificarea instruc iunilor SQL. Se executa imediat Pot fi abreviate Foloseşte comenzi pentru format ri 5-112 . • Formateaz rezultatele interog rilor in rapoarte. pe una sau mai multe linii Nu are caracter de continuare Foloseşte un caracter de terminare pentru executarea imediat a comenzii Nu pot fi abreviate Foloseşte func ii pentru anumite format ri SQL*Plus Recunoaşte instruc iuni SQL şi le trimite la server Este o interfa proprietate Oracle pentru executarea instruc iunilor SQL Nu permite manipularea valorilor în baze de date Este permis o singur comand pe linie care nu este stocat în bufferul SQL Are caracterul (-) pentru continuarea unei comenzi dac aceasta nu încape pe o singur linie Nu are nevoie de caractere de terminare. Compara ie între SQL şi SQL*Plus SQL Este un limbaj pentru comunicarea cu serverul Oracle pentru accesarea datelor Este bazat pe standardul ANSI SQL Manipuleaz date şi defini ii de tabele în baze de date O instruc iune se stocheaz in bufferul SQL.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SQL şi SQL*Plus SQL este un limbaj de comenzi pentru comunicarea cu Serverul Oracle din orice instrument sau aplica ie. • Reduce timpul necesar pentru crearea şi mentenan sistemelor. • Este un limbaj neprocedural. • Sintaxa limbajului este în limba englez . Când se introduce o instruc iune SQL. inclusiv de cei care nu sunt programatori.

• Editarea instruc iunilor SQL. manipularea mediului SQL*Plus şi afişarea coloanelor 5-113 . • Formatarea. • Afişarea structurii unei tabele. • Salvarea instruc iunilor SQL in fişiere. • Executarea instruc iunilor SQL din SQL*Plus. afişarea variabilelor şi listarea mesajelor pe ecran Are diferite comenzi pentru conectarea la baza de date. ad uga şi şterge date din baza de date. înc rc şi ruleaz fişiere de script Trimite instruc iuni SQL din bufferul SQL la serverul Oracle Modifica instruc iuni SQL in buffer Permite crearea şi trimiterea variabilelor la instruc iuni SQL. • Executarea fişierelor salvate. stocarea şi listarea rezultatele interog rilor sub forma de rapoarte. • Crearea fişierelor de script pentru stocarea instruc iunilor SQL. modifica. Comenzi SQL*Plus Categorie Mediu Formatare Manipul ri de fişiere Execu ie Editare Interac iune Diverse Scop Afecteaz comportamentul general al instruc iunilor SQL pentru sesiunea respectiv Formateaz rezultatele interog rii Salveaz .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Interac iunea SQL şi SQL*Plus SQL*Plus este un mediu care permite: • Conectarea la SQL*Plus. calcularea. • Executarea instruc iunilor SQL pentru a extrage. • Înc rcarea comenzilor din fişier in buffer pentru editare.

sql) ruleaz un fişier script la fel ca START lanseaz editorul şi salveaz con inutul bufferului într-un fişier afiedt. scrie con inutul uni fişier în buffer SQL (extensia predefinit este.2 SAVE filename GET filename START filename @ filename ED[IT] ED[IT] filename Comenzi SQL*Plus pentru fişiere salveaz con inutul buferului SQL într-un fişier. se introduce numele utilizatorului şi apoi la prompterul Password se introduce parola şi şirul de conectare. Pentru conectarea într-un mediu Windows: Start -> Programs -> Oracle for Windows NT -> SQL*Plus sau Start -> Programs -> Oracle -> Application Development -> SQL*Plus Se completeaz : username.buf lanseaz editorul pentru editarea con inutului unui fişier salvat 5-114 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Conectarea la SQL*Plus SQL*Plus se poate apela in func ie de tipul sistemului de operare sau a mediului Windows in care se ruleaz . parola şi baza de date Pentru conectarea într-un mediu de tip linie de comand urm toarea comand : se lanseaz Sqlplus [username[/password[@database]]] unde username = numele utilizatorului din baza de date password = parola de conectare la baza de date @database = şirul de conectare la baza de date NOT : Pentru a nu deconspira parola. 5.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice
SPO[OL] [filename]OFF | OUT EXIT stocheaz rezultatul unei interog ri într-un fişier. OFF închide fişierul OUT închide fişierul şi îl trimite la imprimanta sistem p r seşte mediul SQL*Plus

5.3

Instrucţiuni SQL

Extragere de date SELECT Limbajul de manipulare a datelor (DML – Data Manipulation Language) (introduce rânduri noi, le şterge pe cele nedorite şi le actualizeaz pe cele existente deja în tabele) INSERT UPDATE DELETE Limbajul de definire a datelor (DDL- Data Definition Language) (seteaz , schimb sau şterge structuri de date din tabele ) CREATE ALTER DROP RENAME TRUNCATE Controlul tranzac iilor (gestioneaz schimb rile f cute de instruc iunile DML; actualiz rile efectuate asupra datelor pot fi grupate împreuna in tranzac ii logice) COMMIT ROLLBACK SAVEPOINT Limbajul de control al datelor (DCL- Data Control Language) (acord sau retrage drepturi de acces asupra bazelor de date Oracle şi a utilizatorilor s i) GRANT REVOKE Oracle SQL este compatibil cu standardele acceptate de industrie. Comitetele de standardizare acceptate de industrie sunt ANSI (Institutul American pentru Standarde) şi ISO (Organiza ia Interna ionala pentru Standarde). Atât ANSI cat şi ISO au acceptat SQL ca limbajul standard pentru baze de date rela ionale. 5-115

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tabelele folosite în acest carte sunt: • EMPLOYEES , tabela care con ine detalii despre angaja i; • DEPARTAMENTS, tabela care con ine detalii despre departamente; • JOB_GRADES, tabela care con ine detalii despre salarii şi trepte de salarizare: 5.4 Sintaxa de bază a instrucţiunilor SQL

Comanda SELECT extrage informa ii din bazele de date. Folosind comanda SELECT, se pot face urm toarele : • SELECTIE (SELECTION): poate fi folosit pentru a alege liniile necesare din tabelele de date. Se pot folosi criterii diferite de selec ie. • PROIECTARE (PROJECTION): poate fi folosit pentru a alege coloanele din tabele necesare în interogarea rezultat. Se pot alege oricâte coloane de tabele. • COMBINAREA (JOIN): poate fi folosit pentru a uni datele aflate în tabele diferite prin crearea unei leg turi între coloanele tabelelor de unde provin datele. Select - Sintaxa de baza SELECT [ DISTINCT ] {*, column [alias] , …..} FROM table ; SELECT pentru identificarea coloanelor FROM pentru identificarea tabelelor Într-o form simpl , instruc iunea SELECT include urm toarele clauze : SELECT, care specific ce coloane vor fi afişate; FROM, care specific tabelele ce con in coloanele scrise în clauza SELECT. Din punct de vedere sintactic: SELECT este o list de una sau mai multe coloane; DISTINCT suprim duplicatele; * selecteaz toate coloanele; column numele coloanei/coloanelor; alias d coloanei selectate un alt nume; FROM specific tabela/tabelele care con ine/con in coloanele. • •

5-116

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice NOT : În aceast carte, cuvintele : “cuvânt cheie”, “clauza” , “instruc iune” vor fi folosite astfel: • • • Un “cuvânt cheie” se refera la un element SQL individual. De exemplu, SELECT şi FROM sunt cuvinte cheie. O “clauz ” este o parte dintr-o instruc iune SQL.. De exemplu, SELECT employee_id, first_name,.. reprezint o clauz . O “instruc iune” este o combina ie de dou sau mai multe clauze şi cuvinte cheie. De exemplu, SELECT * FROM employee este o instruc iune SQL.

Scrierea instruc iunilor SQL Utilizând urm toarele reguli se pot construi instruc iuni valide, uşor de citit şi de editat: • • Instruc iunile SQL pot fi scrise cu litere mari sau mici, în afar cazurile indicate; Instruc iunile SQL pot fi introduse pe una sau mai multe linii; Cuvintele cheie nu pot fi abreviate sau desp r ite pe linii diferite; De obicei clauzele sunt plasate pe linii separate pentru a fi lizibile; De obicei cuvintele cheie sunt introduse cu majuscule. Toate celelalte cuvinte, cum ar fi numele de tabele şi coloane sunt introduse cu litere mici. Aceasta este doar o conven ie de NOT re, nu o regula. În cadrul SQL*Plus, instruc iunile SQL sunt introduse de la prompterul SQL, iar urm toarele linii sunt numerotate. Acesta este un buffer SQL. Doar o singura instruc iune poate fi adus la un moment dat din buffer. Executarea instruc iunilor SQL se face urmând regulile: • de

• •

• •

Pozi ionarea caracterului punct şi virgul (;) la sfârşitul ultimei clauze; Pozi ionarea unui slash (/) la sfârşitul ultimei linii din buffer; Scrierea unui slash la prompterul SQL; Comanda RUN sau @ la prompterul SQL.

5-117

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu : pentru selectarea tuturor coloanelor şi liniilor dintr-un tabel scriem select * from departments; Se pot afişa toate coloanele din tabela folosind cuvântul cheie SELECT urmat de un asterix (*). În exemplu, tabela departments con ine coloanele: DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID. Tabelul con ine linii pentru fiecare departament. Se pot afişa toate coloanele din tabela scriind toate coloanele dup cuvântul cheie SELECT. Instruc iunea SQL de mai sus afişeaz toate coloanele şi toate liniile din tabela DEPARTMENTS. 5.5 Obiective: • • • Descrierea obiectelor din baza de date; Crearea tabelelor; Descrierea tipurilor de date ce pot fi utilizate în momentul definirii specifica iilor pentru coloane; Modificarea structurii unei tabele; Ştergerea, redenumirea şi trunchierea tabelelor. Crearea şi gestionarea tabelelor

• •

Obiectele bazei de date Obiect Table View Sequence Index Synonym Descriere Unitatea de baza pentru stocare compus din linii şi coloane. Reprezentare logic tabele. a unor date dintr-una sau mai multe

Genereaz valori pentru chei primare. M reşte viteza în cazul interog rilor. Nume alternative date obiectelor.

O baza de date Oracle poate con ine structuri de date multiple. Fiecare structur trebuie definit la proiectarea bazei de date, astfel încât sa poat fi creat în momentul construirii bazei de date.

5-118

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Structura tabelelor in Oracle9i

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID -------------------------------------------------------10 Administration 200 1700 20 Marketing 201 1800 30 Purchasing 114 1700 40 Human Resources 203 2400 50 Shipping 121 1500 60 IT 103 1400 70 Public Relations 204 2700 80 Sales 145 2500 90 Executive 100 1700 100 Finance 108 1700 110 Accounting 205 1700 Tabelele pot fi create în orice moment, chiar în momentul când utilizatorul foloseşte baza de date. Nu este obligatorie specificarea m rimii unei tabele. Este important de ştiut ce spa iu va ocupa tabela dup un timp. Structura unei tabele poate fi modificat dinamic. Conven ii pentru denumirea tabelelor • • • • • • Numele trebuie sa înceap cu o liter ; Numele poate avea lungimea de 1-30 caractere; Caracterele permise sunt numai A-Z, a-z, 0-9, $ şi #; Un utilizator nu poate avea în schema sa dou tabele cu nume identice; Numele tabelei nu poate fi un nume rezervat (de exemplu: select, create, define). Se folosesc nume descriptive pentru tabele sau alte obiecte din baza de date; Se folosesc aceleaşi nume pentru aceleaşi entit i din tabele diferite. De exemplu, coloana cu num rul departamentului este denumita DEPTNO atât In tabela EMPLOYEES cât şi în tabela DEPARTMENTS.

5-119

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

5.6

Comanda CREATE TABLE

Pentru a crea o tabel utilizatorul trebuie s de in : • Drepturi pentru crearea unei tabele (drepturi Oracle); • Spa iu de stocare în Oracle (drepturi Oracle). La crearea unei tabele trebuie specificate: • Numele tabelei; • Numele coloanei, tipul de dat al coloanei şi dimensiunea maxim a acesteia. CREATE TABLE [schema.] table (column datatype [DEFAULT expr]); Sintaxa: - schema numele posesorului tabelei; - table numele tabelei; - DEFAULT specific valoarea implicit ; - column numele coloanei; - datatype tipul de dat şi lungimea. Referirea tabelelor aflate în schema unui alt utilizator Schema este o colec ie de obiecte. Obiectele din schem sunt structuri logice care se refer direct la datele din baza de date. Obiectele din schem includ tabele, view-uri, sinonime, secven e, proceduri stocate, indecşi, clustere şi leg turile bazei. Tabelele a c ror proprietar este un alt utilizator nu sunt în schema utilizatorului curent. Pentru a fi referite trebuie folosit numele proprietarului tabelei. Acesta trebuie scris înaintea numelui tabelei, urmat de punct. (exemplu: bd03.employees pentru tabela employees a utilizatorului bd03). Op iunea DEFAULT Specific valoarea implicit pentru o coloan , într-o opera ie de inserare. Select hiredate DATE DEFAULT SYSDATE from employees; • • • 5-120 Valorile permise sunt valori literale, expresii sau func ii SQL; Valorile ilegale sunt numele altor coloane sau pseudocoloane; Valoarea implicit trebuie sa aib acelaşi tip cu cel al coloanei.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Unei coloane i se poate asigna o valoare implicit utilizând op iunea DEFAULT. Aceast op iune previne atribuirea unor valori de null pentru datele inserate f r precizarea unei valori explicite. Valoarea poate fi un literal, o expresie sau o func ie SQL, cum ar fi SYSDATE sau USER, dar valoarea nu poate fi cea a unei alte coloane sau o pseudocoloane, cum ar fi NEXVAL sau CURRVAL. Valoarea implicit trebuie s fie de acelaşi tip cu tipul de data al coloanei. Exemplu : crearea tabelei departments

SQL> create table departments
2 (department_id number(4), 3 department_name varchar2(30), 4 manager_id number(6), 5 location_id number(4)); Table created. Confirmarea cre rii tabelei: SQL> desc departments; Name Null? Type ----------------------------------------- -------- -----------DEPARTMENT_ID NUMBER(4) DEPARTMENT_NAME VARCHAR2(30) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4) Exemplul anterior creeaz tabela Departments, cu coloanele: DEPARTAMENT_ID, DEPRTMENT_NAME, MANAGER_ID, LOCATION_ID. Mai departe se confirma crearea tabelei DEPT ca rezultat al comenzii DESCRIBE. Deoarece instruc iunea CREATE TABLE este una de tip DML, la rularea ei se execut în mod automat şi o instruc iune de tip COMMIT. 5.7 • Tabele din baza de date Oracle

În baza de date Oracle exista dou tipuri de tabele şi anume: Tabele utilizator ce reprezint o colec ie de tablele create şi administrate de utilizator ce con in informa iile utilizatorilor; • Dic ionarul de date ce reprezint o colec ie de tabele create şi administrate de Oracle Server ce con in informa ii despre baza de date. 5-121

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

Toate tabelele din dic ionarul de date sunt proprietatea utilizatorului SYS şi sunt accesate rar de c tre utilizatori pentru c informa iile pe care acestea le con in sunt greu de în eles. De aceea, în mod obişnuit, utilizatorii acceseaz vederile din dic ionarul de date pentru c informa iile sunt prezentate într-o forma uşor de în eles. Informa iile stocate în dic ionarul de date con in: • numele utilizatorilor bazei Oracle şi drepturile acestora ; • obiectele bazei de date – numele lor, constrângerile şi informa ii legate de audit. În dic ionarul de date exist patru categorii de view-uri, fiecare dintre ele având un prefix distinct ce reflect scopul în care poate fi folosit. • USER_View - con in informa ii despre obiectele aflate în proprietatea userului. • ALL_View - con in informa ii despre toate tipurile de tabel (obiecte tabel şi tabele rela ionale) accesibile utilizatorului. • DBA_ View - Aceste view-uri sunt restric ionate, ele putând fi accesate doar de cei care au rolul de DataBase Administrator. • V$ - Aceste view-uri sunt view-uri cu performan e dinamice, performan e ale serverului de baze de date, memorie şi bloc ri. 5.8 Interogarea dicţionarului de date

Afişarea numelor tabelelor (coloana table_name) unui utilizator, precum şi alte informa ii legate de aceste tabele: SQL> select * from user_tables; Afişarea tipurilor de obiecte ale unui utilizator: SQL> select distinct object_type from user_objects; Afişarea tabelelor, view-urilor, sinonimelor şi secven elor unui utilizator: SQL> select * from user_catalog; Pute i interoga dic ionarul de date pentru a afişa informa ii diverse despre obiectele de tip baza de date ale unui utilizator. Tabelele cele mai des utilizate din dic ionarul de date sunt USER_TABLES, USER_OBJECTS şi USER_CATALOG. Tabela USER_CATALOG are un sinonim numit CAT. Pute i folosi acest nume în loc de USER_CATALOG în comenzi. SQL> select * from cat; 5-122

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5.9 Tipul de data VARCHAR2(size) Tipuri de date Descriere Dat de tip caracter, de lungime variabil . (Trebuie specificat o lungime maxim - size, valoarea implicit este 1,maxima 4000) Dat de tip caracter de lungime fix . (Valoarea implicit este cea minim 1, maxima 2000) Num r cu p cifre şi s cifre zecimale. (p poate lua valori între 1 şi 38, s între 84 şi 127) Dat de tip dat calendaristic cuprins între Ianuarie, 1 , 4712 B.C. şi Decembrie, 31, 9999 A.D. Dat de tip caracter cu lungime variabil , pân gigabytes. Dat de pân la 4 gigabytes. Dat binar cu lungime specificat . Valoarea maxim este de 2000. Aceasta valoare trebuie specificat . Dat binar cu lungime de pân la 2 gigabytes. Dat binar cu lungime de pân la 4 gigabytes. Dat binar stocat într-un fişier extern, lungime maxim de pân la 4 gigabytes. NOT • • • • coloana de tip LONG nu este copiat atunci când la crearea tabelei se foloseşte o subinterogare; coloana de tip LONG nu poate fi inclus într-o clauza ORDER BY sau GROUP BY; într-o tabela poate s existe doar o coloana de tip LONG; Nu se pot defini constrângeri asupra unei coloane de tip LONG. la 2

CHAR(size) NUMBER(p,s) DATE LONG CLOB RAW(size) LONG RAW BLOB BFILE

Oracle9i aduce îmbun t iri asupra modului de stocare a datei şi timpului prin introducerea de noi tipuri de date pentru dat calendaristic şi timp şi corelarea cu zonele geografice TIMESTAMP. TIMESTAMP stocheaz anul, luna şi ziua din tipul de dat DATE plus valorile pentru or , minut şi secund precum şi frac iuni de secund şi reprezint o extensie a tipului de dat DATE. Specificarea acestui tip de data se face cu: 5-123

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice TIMESTAMP[(fractional_seconds_precision)] unde (fractional_seconds_precision) poate lua valori intre 0 şi 9, implicit fiind 6 Exemplu CREATE TABLE new_employees (employee_id NUMBER, first_name VARCHAR2(15), last_name VARCHAR2(15), ... start_date TIMESTAMP(7), ...); În exemplu de mai sus se creeaz tabela NEW_EMPLOYEES ce are coloana start_date de tip TIMESTAMP. Valoarea ‘7’ indica precizia frac iunilor pentru secunde. Presupunem c s-au introdus dou rânduri în tabela NEW_EMPLOYEES . Ieşirile arata diferen a de afişare dintre o valoare de tip de dat DATE, care este afişata în formatul DD-MON-YY şi una de tip TIMESTAMP. SELECT start_date FROM new_employees; 17-JUN-87 12.00.00.0000000 AM 21-SEP-89 12.00.00.0000000 AM TIMESTAMP WITH TIME ZONE este o variant a formei TIMESTAMP care include şi afişarea timpului pentru zona geografica. Afişarea cu TIME ZONE reprezint diferen a în ore minute şi secunde dintre timpul local şi UTC (Coordinated Universal Time, adic Greenwich Mean Time). TIMESTAMP[(fractional_seconds_precision)] WITH TIME ZONE Dou valori de tip TIMESTAMP WITH TIME ZONE sunt considerate identice dac ele reprezint acelaşi moment în UTC din punct de vedere al decal rii in timp a valorilor TIME ZONE stocate. De exemplu : TIMESTAMP '1999-04-15 8:00:00 -8:00' este identic cu TIMESTAMP '1999-04-15 11:00:00 -5:00' adic 8:00 a.m. Pacific Standard Time este identic cu 11:00 a.m. Eastern Standard Time. Acest lucru poate fi specificat ca : TIMESTAMP '1999-04-15 8:00:00 US/Pacific'

5-124

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice TIMESTAMP WITH LOCAL TIME ZONE este o alt variant pentru TIMESTAMP care include afişarea valorii timpului local. Data stocat în baza este normalizat într-o baza ce con ine timpul local. Timpul local nu este stocat ca parte a unei coloane de tip DATE. Atunci când se ini iaz o sesiune local serverul returneaz data în formatul ce afişeaz timpul local. TIMESTAMP WITH LOCAL TIME ZONE are urm toarea sintaxa: TIMESTAMP[(fractional_seconds_precision)]WITH LOCAL TIME ZONE Spre deosebire de TIMESTAMP WITH TIME ZONE, pute i specifica ca o coloana de tipul TIMESTAMP WITH LOCAL TIME ZONE ca fiind parte a unei chei primare sau unice. Afişarea timpului va preciza diferen a (în ore şi minute) dintre timpul local şi timpul UTC. Exemplu CREATE TABLE time_example as (order_date TIMESTAMP WITH LOCAL TIME ZONE); INSERT INTO time_example VALUES('15-NOV-00 09:34:28 AM'); SELECT * FROM time_example; order_date --------------------15-NOV-00 09.34.28 AM INTERVAL YEAR TO MONTH stocheaz o perioada de timp folosind câmpurile an şi luna din data. Sintaxa este : INTERVAL YEAR [(year_precision)] TO MONTH unde year_precision este num rul de cifre in care se va afişa anul, implicit 2. Restric ie Prima valoare trebuie s fie semnificativ mai mare decât cea de-a doua. De exemplu: INTERVAL '0-1'MONTH TO YEAR nu este valid .

5-125

valoarea implicit şi constrângerile de tip. Sintaxa: . Utilizând op iunea AS subquery se creeaz tabela şi insereaz înregistr rile furnizate de interogare.column numele coloanei. .column…)] AS subquery .subquery comanda SELECT care defineşte un set de înregistr ri ce trebuie inserate în tabela. num rul acestora trebuie sa fie egal cu num rul de coloane rezultat din subinterogare. numele coloanelor sunt identice cu cele date de subinterogare. • • • 5-126 . CREATE TABLE table [column (. • • Coloanele tabelei au numele specificate iar rândurile ce sunt inserate sunt cele rezultate din fraza SELECT din subinterogare. INTERVAL '300' MONTH(3) indica un interval de 300 luni.table numele tabelei. Num rul coloanelor tabelei trebuie sa fie egal cu num rul coloanelor din subinterogare. La definirea coloanelor se poate specifica doar numele coloanei şi valoarea implicit . . INTERVAL '312-2' YEAR(3) TO MONTH indica 312 ani şi 2 luni. Regulile de integritate nu sunt preluate de noua tabela. Dac se doreşte specificarea coloanelor. Crearea unei tabele utilizând o interogare Crea i o tabela şi insera i linii combinând comanda CREATE TABLE cu op iunea AS subquery.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: INTERVAL '312' YEAR(3) indic un interval de 312 ani şi 0 luni. Dac nu se specifica coloanele.

last_name. Table created. Pute i verifica existenta tabelei şi a defini iei coloanelor folosind comanda iSQL*Plus DESCRIBE. Observa i c datele au fost aduse din tabela EMPLOYEES. În exemplul nostru coloana SALARY*12 a fost redenumita ANNSAL.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: CREATE TABLE dept80 AS SELECT employee_id. hire_date FROM employees WHERE department_id = 80. 5-127 . Verifica i dac a i redenumit coloanele ce con in expresii. F r acest alias s-ar fi generat mesajul de eroare ERROR at line 3: ORA-00998: must name this expression with a column alias 5.10 Comanda ALTER TABLE Comanda este utila dac se doreşte modificarea structurii unei tabele. şterge coloane folosind clauza DROP. Se pot ad uga noi coloane utilizând clauza ADD. modifica coloane existente sau defini valori implicite pentru coloane utilizând clauza MODIFY. DESCRIBE dept80 În exemplu se creeaz tabela DEPT80 ce con ine date despre angaja ii ce lucreaz in departamentul 80. salary*12 ANNSAL.

• Nu pute i specifica locul de apari ie al noii coloane.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Ad ugarea unei coloane ALTER TABLE table ADD (column datatype [DEFAULT expr] (.column numele noii coloane. Dac tabela con ine înregistr ri în momentul ad ug rii unei noi coloane. Noua coloan devine automat ultima coloan . Observa ii: • Se pot ad uga. . modifica sau şterge coloane din tabela.table numele tabelei. . atunci noua coloan se ini ializeaz cu valori nule pentru toate înregistr rile. ALTER TABLE table DROP COLUMN (column). Sintaxa: . column datatype…. . ALTER TABLE table MODIFY (column datatype [DEFAULT expr] (. 5-128 . Table altered.]). EXEMPLU: ALTER TABLE dept30 ADD (job_id varchar2(10)). Facilitatea de a şterge o coloana dintr-o tabela a ap rut în versiunea Oracle 9i.datatype tipul datei şi lungimea. column datatype….DEFAULT expr specific valoarea implicit pentru coloan .]).

------------------------------------------------------114 Den Raphaely 11000 07-DEC-94 PU_MAN 115 Alexander Khoo 3100 18-MAY-95 PU_CLERK 116 Shelli Baida 2900 24-DEC-97 PU_CLERK 117 Sigal Tobias 2800 24-JUL-97 PU_CLERK 118 Guy Himuro 2600 15-NOV-98 PU_CLERK Noua coloa na JOB_ ID tabela dept30 Modificarea unei coloane Se pot modifica specifica iile coloanelor utilizând comanda ALTER TABLE.---------.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice DEPT30 EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY HIRE_DATE ----------.------------------------. Observa ii: • • Se poate mari l imea sau precizia unei coloane numerice.--------------------------114 Den Raphaely 11000 07-DEC-94 115 Alexander Khoo 3100 18-MAY-95 116 Shelli Baida 2900 24-DEC-97 117 Sigal Tobias 2800 24-JUL-97 118 Guy Himuro 2600 15-NOV-98 ad uga o nou coloana în DEPT30 EMPLOYEE_ID FIRST_NAME LAST_NAME SALARY HIRE_DATE JOB_ID ----------. Modific rile permise pot fi: schimbarea tipului de data. a m rimii şi a valorii ini iale. Table altered. Se poate micşora l imea unei coloane dac aceasta con ine numai valori nule sau dac tabela nu are rânduri. Se poate schimba tipul de dat dac coloana con ine numai valori null. cu clauza MODIFY.---------. EXEMPLU ALTER TABLE dept30 MODIFY (first_name varchar2(25)). 5-129 • .------------------------.-------------------.-------------------.

comanda SELECT nu va returna date din acest tip de coloan iar comanda DESCRIBE nu va afişa 5-130 . ea nu mai poate fi recuperat . Prin specificarea acestei clauze nu se şterg efectiv coloanele din fiecare rând ci ele sunt tratate ca şi cum ar fi şterse. Op iunea SET UNUSED marcheaz una sau mai multe coloane ca fiind nefolosite astfel încât ele s poat fi şterse atunci când resursele sistemului devin critice. Folosind aceasta comand se poate şterge doar o singur coloana odat . Table altered. Ştergerea unei coloane EXEMPLU ALTER TABLE dept30 DROP COLUMN job_id. ALTER TABLE table DROP UNUSED COLUMNS. ALTER TABLE table SET UNUSED (column). Dup ce coloana a fost marcat ca fiind nefolosit ea nu poate fi accesat . Odat ce coloana a fost ştearsa. Observa ii: • • • • • Coloana poate sau nu s con in date . sau ALTER TABLE table SET UNUSED COLUMN (column). Op iunea SET UNUSED • Pute i folosi op iunea SET UNUSED pentru a marca una sau mai multe coloane ca fiind nefolosite. Schimbarea valorii predefinite pentru o coloan afecteaz numai inser rile ulterioare în tabela. Tabela trebuie sa mai aib cel pu in o coloana în urma ştergerii efectuate .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • • Se poate converti o coloana de tip CHAR la una de tip VARCHAR2 sau invers dac aceasta con ine valori null sau dac nu se schimb l imea . Pute i folosi op iunea DROP UNUSED COLUMNS pentru a şterge coloanele marcate ca fiind nefolosite.

Aceast op iune se poate folosi atunci când se doreşte eliberarea spa iului pe disc. ALTER TABLE dept30 DROP UNUSED COLUMNS. 5. EXEMPLU SQL> DROP TABLE dept30. EXEMPLU ALTER TABLE dept30 SET UNUSED last_name. Pute i ad uga tabelei o nou coloan cu acelaşi nume pe care îl are o coloan marcat ca fiind nefolosit . împreun cu indecşii asocia i acesteia. Comanda este ireversibilă. Table altered. Când se aplic comanda DROP unei tabele.11 Ştergerea unei tabele Sintaxa: DROP TABLE table. executarea instruc iunii nu întoarce eroare. Op iunea DROP UNUSED şterge din tabel coloanele marcate ca fiind nefolosite. Informa ia dat de SET UNUSED este stocat în dic ionarul de date în view-ul USER_UNUSED_COL_TABS. Table dropped. Comanda DROP TABLE şterge defini ia unei tabele din dic ionarul de date Oracle. Table altered. baza de date pierde toate înregistr rile din tabel .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice numele şi tipul de dat pentru coloanele marcate astfel. 5-131 . Dac tabela nu are coloane marcate.

Sintaxa: RENAME old_name TO new_name. Orice view sau sinonim asociat va r mâne. eliberând spa iul folosit de tabel .new_name EXEMPLU SQL> RENAME departments TO departments_new. secven e sau sinonim se foloseşte comanda RENAME .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Observa ii: • • • • Toate datele sunt şterse. Table renamed. view. Numai utilizatorul care a creat tabela sau cel care are privilegiul DROP ANY TABLE poate şterge o tabel . 5-132 . numele nou al obiectului. 5. Observa ie: Numai proprietarul obiectului poate modifica numele obiectului. numele vechi al obiectului. Comanda DELETE şterge înregistr rile din tabel . dar va fi invalid. Orice tranzac ie în curs va fi finalizat . .13 Trunchierea unei tabele Comanda şterge toate înregistr rile din tabela specificat . dar nu elibereaz spa iu de stocare (f când astfel posibila readucerea înregistr rilor prin comanda ROLLBACK).12 Modificarea numelui unui obiect Pentru a modifica numele unei tabele.old_name . Operaţiunea este ireversibilă. 5.

Trebuie mai întâi sa dezactiva i constrângerea şi apoi lansa i comanda.14 • Includerea constrângerilor Ce fac constrângerile ? • Constrângerile for eaz regulile la nivel de tabela.table este numele tabelei. Trunchierea unei tabele nu declanşeaz triggerii tabelei. Sintaxa: . • 5. Dac tabela este de tip p rinte într-o rela ie de integritate referen ial nu pute i aplica comanda TRUNCATE.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice TRUNCATE TABLE table. Comanda TRUNCATE este mai rapida decât DELETE din urm toarele motive: • TRUNCATE este o instruc iune de tip DDL şi nu genereaz informa ii de tip rollback. Oracle lucreaz cu urm toarele tipuri de constrângeri: NOT NULL UNIQUE KEY PRIMARY KEY FOREIGN KEY CHECK 5-133 . EXEMPLU SQL>TRUNCATE TABLE department. Table truncated. Constrângerile previn ştergerea unei tabele sau a datelor din tabela dac exista dependen e.

Constrângerile sunt simplu de referit dac li se d un nume sugestiv. Toate constrângerile sunt p strate în dic ionarul de date.…]). Identific unic fiecare înregistrare Stabileşte şi for eaz o rela ie de tip cheie extern între coloan şi o coloan dintr-o tabela referit . Constrângerile trebuie s urmeze regulile standard de denumire a obiectelor.în timpul cre rii tabelei sau . unde n este un num r întreg unic. Se poate crea o constrângere: . Se pot vizualiza constrângerile create pentru o tabela dac acces m din dic ionarul view-ul USER_CONSTRAINTS. Daca utilizatorul nu d acest nume. Specific o coloan sau o combina ie de coloane a c ror valoare trebuie s fie unic pentru toate înregistr rile tabelei. serverul Oracle va genera automat un nume utilizând formatul SYS_Cn.dup ce tabela a fost creat Vizualizarea constrângerea se face doar în dic ionarul de date. PRIMARY KEY FOREIGN KEY CHECK Ghid pentru crearea constrângerilor • • • Constrângerile trebuie sa aib un nume. … [table_constraint] [.] table (column datatype [DEFAULT expr] (column_constraint]. 5-134 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Constrângerile de integritate a datelor Constrângere NOT NULL UNIQUE Key Descriere Specific faptul c aceast coloan nu poate con ine o valoare nul . Definirea constrângerilor CREATE TABLE [schema. Specific o condi ie care trebuie s fie adev rat .

CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID)). …). Constrângerile pot fi definite la unul din urm toarele doua nivele: Constraint level Column Table Descriere Refer o singur coloan şi poate defini orice tip de constrângere Refer una sau mai multe coloane şi este definit separat de defini iile coloanelor în tabela: poate defini orice tip de constrângere exceptând NOT NULL column . De obicei constrângerile sunt create în acelaşi timp cu tabela dar ele pot fi ad ugate şi dup crearea tabelei. 5-135 . First_name varchar2(20). … Job_id varchar2(10) NOT NULL. … [CONSTRAINT constraint_name] constraint_type (column.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice În sintaxa : schema table DEFAULT expr column datatype column_constraint table_constraint acelaşi cu numele proprietarului numele tabelei specific valoarea implicit numele coloanei tipul de dat şi lungimea constrângere de integritate ca parte a defini iei coloanei constrângere de integritate ca parte a defini iei tabelei Exemplu: CREATE TABLE employees( Employee_id number(6).

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice În sintax : constraint_name constraint_type este numele constrângerii este tipul constrângerii 5. OBSEVATIE: Constrângerea NOT NULL poate fi specificat numai la nivel de coloan .15 Constrângerea NOT NULL Constrângerea NOT NULL ne asigur c nu sunt permise în coloan valori null. 5-136 . Oracle Server va crea nume pentru ea. Coloanele f r constrângerea NOT NULL pot con ine implicit valori null. EMPLOYEE_ID FIRST_NAME … COMMIS SION_P CT DEPARTMENT_ID 7839 7698 7782 7566 … KING BLAKE CLARK JONES 10 30 10 20 Constrângere NOT NULL (nici o înregistrare nu poate con ine o valoare NULL pe aceasta coloana) Absen a constrângerii NOT NULL (orice înregistrare poate con ine null pentru aceasta coloan ) Constrângere NOT NULL În exemplul de mai sus se aplica constrângerea NOT NULL coloanelor last_name şi hire_date din tabela EMPLOYEES. Deoarece constrângerea pentru last_name nu are nume.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice CREATE TABLE employees( Employee_id number(6). EXEMPLU: hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL 5.16 Constrângerea UNIQUE KEY Constrângerea UNIQUE key EMPLOYEES EMPLOYEE_ID 100 101 102 103 LAST_NAME King Kochhar De Haan Hunold INSERT INTO 208 209 Smith Smith LSMITH LSMITH EMAIL SKING NKOCHHAR LDEHAAN AHUNOLD PERMIS Nu este permis – exista deja O constrângere de integritate de tip cheie unic cere ca fiecare valoare din coloana sau din setul de coloane specificat s fie unice – dou înregistr ri ale tabelei nu pot avea valori duplicat în coloana sau setul de coloane care formeaz constrângerea. Coloana (setul de coloane) inclus în defini ia cheii unice se numeşte cheie unică. hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL. Nume dat de sistem Nume dat de utilizator Numele constrângerii poate fi specificat în timpul specific rii constrângerilor.2).2). salary number (8. Dac cheia unic con ine mai multe coloane se 5-137 . last_name varchar2(25) NOT NULL. commission_pct number(2.

orice num r de înregistr ri pot include valori null în coloane f r constrângerea NOT NULL. În exemplu se aplic constrângerea de tip cheie unica coloanei EMAIL din tabela EMPLOYEES. 5-138 . CONSTRAINT emp email uk UNIQUE (email) Constrângerea cheie unica (unique key) poate fi definit la nivel de tabel sau coloan . De fapt. email varchar2(25). last_name varchar2(25) NOT NULL. Serverul Oracle for eaz implicit constrângerea de cheie unic creând un index unic dup cheia unic . Constrângerea cheie unic permite introducerea de valori null dac nu a fost definit o constrângere NOT NULL pentru acea coloan .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice numeşte cheie unică compusă. commission_pct number(2.2). Numele constrângerii este EMP_EMAIL_UK. O valoare null într-o coloan (sau în toate coloanele unei chei unice compuse) satisface întotdeauna o constrângere de tip cheie unic . Not : O cheie unica compus este creat utilizând defini ia la nivel de tabel . CREATE TABLE employees( Employee_id number(6). hire_date DATE NOT NULL ….

ea refer coloana DEPARTMENT_ID din tabela DEPARTMENTS (referit sau tabela p rinte).18 Constrângerea FOREIGN KEY Cheia externa sau constrângerea de integritate referenţială.17 Constrângerea PRIMARY KEY Pentru fiecare tabel poate fi creata doar o cheie primar . În exemplu. desemneaz o coloan sau o combina ie de coloane în func ie de cheia extern şi stabileşte o rela ie cu o cheie primar sau o cheie unic în aceeaşi tabel sau o tabela diferit . Constrângerea de tip cheie primar este format dintr-o coloana sau set de coloane care identific în mod unic fiecare înregistrare din tabel . dar difer seria şi în acelaşi timp serie sau nr_buletin nu pot avea valori nule. location_id NUMBER(4). manager_id NUMBER(6). 5. department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL. 5-139 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5. Numele constrângerii este DEPT_ID_PK. Acelaşi num r de buletin poate sa apar la mai multe persoane. Un index unic este automat creat pentru o coloan cheie primar . Exemplul defineşte o cheie primar dup coloana DEPARTMENT_ID a tabelei DEPTARTMENTS. Mai multe persoane pot avea aceeaşi serie de buletin dar nu pot avea acelaşi num rul de buletin. Un exemplu de constrângere în care cheia primara este format din dou coloane ar putea fi constrângerea pe coloanele serie şi nr_buletin. CREATE TABLE departments (department_id NUMBER(4). DEPARTMENT_ID a fost definit cheie extern în tabela EMPLOYEES (dependent sau tabela copil). CONSTRAINT dept_id_pk PRIMARY KEY (department_id)). Aceasta constrângere for eaz unicitatea coloanei sau a setului de coloane şi asigur c nici o coloan care este parte a cheii primare nu poate con ine o valoare null. Not : • • • Constrângerea de tip cheie primare poate fi definită la nivel de coloană sau tabelă. O cheie primară compusă este creată utilizând definiţia la nivel de tabelă.

Numele constrângerii este EMP_DEPT_FK. DEPARTMENT Constrângerea FOREIGN key cu o valoare PRIMARY KEY DEPARTMENT _ID DEPARTMENT_NAME Administration Marketing MANAGER_ID 10 20 200 201 FOREIGN KEY EMPLOYEES EMPLOYEE_ID 100 101 102 103 200 201 LAST_NAME King Kochhar De Haan Hunold Ford Ford DEPARTMENT _ID 90 90 90 60 9 60 Nu este permis 9 nu exista Observa ii: • • • Cheile externe sunt bazate pe valorile datelor şi sunt pointeri pur logici. 5-140 . nu fizici. Constrângerea de tip cheie extern coloan sau tabel .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Valoarea unei chei externe trebuie sa se potriveasc existent în tabela p rinte sau sa fie NULL. Exemplul de mai sus defineşte o constrângere de tip cheie externa în coloana DEPARTMENT_ID din tabela EMPLOYEES. poate fi definit la nivel de cheie extern compus este creat folosind defini ia la nivel de tabel.

Apeluri la func iile SYSDATE. rândul din tabela p rinte nu va putea fi şters dac este referit în tabela copil. UID. commission_pct number(2.2). ON DELETE SET NULL – converteşte valoarea cheii str ine pe NULL atunci când valoarea corespunz toare din tabela p rinte este ştearsa. Expresii care nu sunt permise: Referiri la pseudocoloanele CURRVAL.Permite ştergeri în tabela p rinte precum şi ştergeri de linii independente în tabela copil. ON DELETE CASCADE.19 Constrângerea CHECK Defineşte o condi ie pe care fiecare rând trebuie sa o îndeplineasc . Când rândul din tabela p rinte este şters. Department_id number (4). email varchar2(25). CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)REFERENCES departments (department_id. last_name varchar2(25) NOT NULL. USER şi USERENV . Constrângerile externe sunt definite folosind combina ii ale urm toarelor cuvinte: FOREIGN KEY. F r op iunea ON DELETE CASCADE. 5.Defineşte coloana în tabela copil la nivelul constrângerii de tabel.Identific tabela şi coloana în tabela p rinte. NEXTVAL. hire_date DATE NOT NULL …. 5-141 . REFERENCES.CONSTRAINT emp_email_uk UNIQUE (email) Cuvintele cheie ale constrângerii FOREIGN KEY Constrângerile externe sunt definite în tabela copil şi tabela care con ine coloana referit este tabela p rinte. Interog ri care fac referin e la alte valori din alte rânduri. LEVEL şi ROWID.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice CREATE TABLE employees( Employee_id number(6). rândurile independente din tabela copil sunt deasemeni şterse.

Daca nu da i nume constrângerilor.20 Adăugarea unei constrângeri …. Exemplul de mai jos creeaz o constrângere de tip extern în tabela employees. 5-142 .… Se poate ad uga o constrângere la tabelele existente folosind declara ia ALTER TABLE împreun cu clauza ADD. În sintax : table este numele tabelei ALTER TABLE table ADD [CONSTRAINT constraint] type (column). Constrângerea ne asigur de existenta manager-ului ca angajat activ în tabela employees. • Se poate ad uga o constrângere de tip NOT NULL la o coloan existent folosind clauza MODIFY din comanda ALTER TABLE. activa. • Se poate ad uga. şterge. deoarece nu se pot specifica date pentru rândurile existente în acelaşi timp în care ad ugam noi coloane. salary NUMBER (2) CONSTRAINT emp_salary_min CHECK (salary>0).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5. • Se poate defini o coloan NOT NULL doar dac tabela nu con ine rânduri. constraint type column este numele constrângerii este tipul constrângerii este numele coloanei afectate de constrângere Denumirea constrângerii este op ional şi totuşi ea este recomandat . dar nu se poate modifica structura acesteia. ALTER TABLE employees ADD CONSTRAINT emp_manager_fk FOREIGN KEY (manager_id) REFERENCES employee (employee_id). dezactiva o constrângere. sistemul va genera automat un nume.

este numele coloanei afectate de constrângere.21 Ştergerea unei constrângeri Exemplu : Ştergerea constrângerii manager din tabela EMPLOYEES. pe care îl pute i afla accesând USER_CONSTRAINS şi USER_CONS_COLUMNS. 5-143 . Table altered. Table altered. Ştergerea constrângerii de tip cheie primara din tabela EMPLOYEES. 5. Sintaxa: ALTER TABLE table DROP PRIMARY KEY | UNIQUE (column)| CONSTRAINT constraint [CASCADE}. Când se şterge o constrângere de integritate. este numele constrângerii. ALTER TABLE employees DROP PRIMARY KEY CASCADE. Op iunea CASCADE din clauza DROP are ca efect şi eliminarea tuturor constrângerilor dependente. aceasta nu mai este folosita de c tre Oracle Server şi nu mai este disponibila în dic ionarul de date. ALTER TABLE employees DROP CONSTRAINT emp_manager_fk.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5. Pentru a şterge a constrângerea trebuie identificat numele constrângerii. Apoi se foloseşte func ia ALTER TABLE împreun cu clauza DROP. • Aplicarea op iunii CASCADE pentru a dezactiva constrângeri de integritate dependente.22 Dezactivarea constrângerilor • Executarea clauzei DISABLE din func ia ALTER TABLE pentru a dezactiva o constrângere de integritate. unde: table column constraint Aten ie: este numele tabelei.

clauza CASCADE dependente.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice ALTER TABLE employees DISABLE CONSTRAINT emp_emp_id_pk CASCADE. 5. Se poate dezactiva o constrângere f r a fi necesar ştergerea acesteia sau recrearea ei. Table altered. Unde: table constraint este numele tabelei. ALTER TABLE employees ENABLE CONSTRAINT emp_emp_id_pk. este numele constrângerii. dezactiveaz constrângerile de integritate • Activarea unei constrângeri de integritate care este dezactivat clauza ENABLE în definirea tabelei. Unde: table este numele tabelei. folosind func ia ALTER TABLE împreuna cu clauza DISABLE. Sintaxa: ALTER TABLE table ENABLE CONSTRAINT constraint. Table altered. constraint este numele constrângerii. clauza DISABLE se poate folosi atât în func ia CREATE TABLE cât şi în func ia ALTER TABLE. 5-144 .23 Activarea constrângerilor folosind • Un index de tip unic sau de tip cheie primar este automat creat dac se activeaz constrângerile UNIQUE sau PRIMARY KEY. ALTER TABLE table DISABLE CONSTRAINT constraint [CASCADE]. Se poate activa o constrângere f r a o şterge sau a o recrea folosind func ia ALTER TABLE împreuna cu clauza ENABLE.

constraint_type. Toate datele din tabel trebuie sa îndeplineasc condi iile din constrângere. 5-145 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Aten ie: • Daca se activeaz o constrângere. SELECT constraint_name. search_condition FROM user_cons_columns WHERE table_name=’EMPLOYEES’. constrângerea este aplicat tuturor datelor din tabel . atunci este creat în mod automat un index de tip unic. • Daca se activeaz o constrângere de tip unic sau cheie primar . este necesar interogarea tabelei USER_CONSTRAINTS. • Clauza ENABLE se poate folosi atât în func ia CREATE TABLE cât şi în func ia ALTER TABLE. se poate confirma existen a sa prin folosirea comenzii DESCRIBE. Exemplul afişeaz toate constrângerile tabelei EMPLOYEES. Pentru a vedea toate constrângerile din tabel . Singura constrângere care poate fi verificat este constrângerea NOT NULL. Dup crearea unei tabele. Vizualizarea constrângerilor Vizualizarea constrângerilor se poate face prin interogarea tabelei USER_CONSTRAINTS pentru a putea afla toate numele şi defini iile constrângerilor.

Vizualizarea coloanelor asociate constrângerilor Vizualizarea coloanelor asociate cu numele constrângerilor se face folosind USER_CONS_COLUMNS. P de la PRIMARY KEY. SELECT constraint_name. şi U de la UNIQUE. Aceasta vizualizare este util mai ales în cazul constrângerilor asociate de c tre sistem. column_name FROM user_cons_columns WHERE table_name = 'EMPLOYEES'.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice NOT : Constrângerilor care nu primesc un nume de la posesorul tabelei li se atribuie automat de c tre sistem un nume. La numirea tipului de constrângere. R de la integritate referen ial . 5-146 . De observat faptul c constrângerea NULL este de fapt o constrângere de tip CHECK. C provine de la CHECK.

9 Ad uga i o constrângere de tip PRIMARY KEY la tabela EMP folosind coloana ID. 7.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5. Column Name Datatype Length ID Number 7 LAST_NAME Varchar2 25 FIRST_NAME Varchar2 25 DEPT_ID Number 7 4. Modifica i tabela EMP pentru a permite nume mai lungi în coloana Last_name. 5-147 . LAST_NAME. 11. Salva i instruc iunea în scriptul p1. Asigura i-v c cele dou tabele create sunt stocate de dic ionarul de date. Crea i o constrângere PRIMARY KEY în tabela DEPT folosind coloana ID. 5. Ad uga i o referin de tip cheie extern la tabela EMP care va asigura ca angaja ii nu sunt asigna i unui departament inexistent. Crea i tabela EMP bazata pe tabelul urm tor. Introduce i înregistr ri în tabela DEPT din tabela DEPARTMENT. incluzând doar coloanele EMPNO. 8. Verifica i existenta tabelei. Include i doar coloanele de care ave i nevoie. Şterge i tabela EMPLOYEE3. Column Name Datatype Length Id Number 7 Name Varchar2 25 2. 3. Crea i tabela EMPLOYEE2 bazat pe structura tabelei EMP. DEPT_ID.sql şi apoi executa i scriptul. Salva i instruc iunea într-un script p3. Constrângerea trebuie sa fie activata la creare. Crea i tabelul DEPT bazat pe structura din tabelul urm tor. 10. Redenumi i coloanele în noua tabela astfel: ID. ENAME şi DEPTNO. Constrângerea trebuie sa fie activata la creare.24 Exerciţii 1. 6. Verifica i efectuarea modific rii.sql . Redenumi i tabela EMPLOYEE2 în EMPLOYEE3. executa i scriptul şi verifica i.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 12. Confirma i modific rile efectuate prin verificarea descrierii tabelei. CONSTRAINT_NAME DEPT_ID_PK EMP_ID_PK EMP_DEPT_ID_FK P P R C 13. Şterge i coloana FIRST_NAME din tabela EMP. 16. Confirma i modific rile efectuate prin verificarea descrierii tabelei. 5-148 . Confirma i modific rile efectuate prin verificarea descrierii tabelei. precizie 7. Marca i ca fiind nefolosit coloana DEPT_ID din tabela EMP. Salva i textul într-un fişier. Afişa i numele şi tipul obiectelor din dic ionarul USER_OBJECTS al tabelelor EMP şi DEPT. Modifica i tabela EMP. OBJECT_NAME DEPT DEPT_ID_PK EMP EMP_ID_PK OBJECT_TYPE TABLE INDEX TABLE INDEX 14. Observa i numele şi tipul constrângerilor. Observa i c a fost creat un nou tabel precum şi un nou index. 15. Ad uga i o coloana SALARY de tip NUMBER. Confirma i constrângerile ad ugate interogând tabela USER_CONSTRAINTS. 17. Şterge i toate coloanele nefolosite din tabela EMP. Formata i coloanele pentru refolosirea lor.

În urma adun rii coloana rezultat (SALARY+300) nu este o coloan nou în tabela EMPLOYEES.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 6 Expresii aritmetice. salary. Implicit. separate prin virgul . salary+300 FROM employees. Operatorii aritmetici disponibili în SQL se pot folosi în orice clauza SQL exceptând clauza FROM. Restric ionarea şi sortarea datelor Instruc iunea SELECT poate fi folosit pentru a afişa anumite coloane din tabela specificând numele coloanelor. Titlul coloanelor poate fi modificat folosind un alias. Folosirea alias-urilor va fi prezentat într-un capitol ulterior. 6. În exemplul dat s-a folosit operatorul adunare pentru a m ri salariile cu 300$ pentru to i angaja ii. Operatori. În clauzele SELECT se specific coloanele dorite. Se afişeaz noua coloan SALARY+300 . constante numerice şi operatori aritmetici. Expresiile aritmetice pot con ine nume de coloane. 6-149 Descriere Adunare Sc dere Înmul ire Împ r ire . Operator + * / Exemplu: SELECT last_name. Modul implicit de afişare a informaţiilor este : • Stânga – date calendaristice şi caractere (exemplu: coloanele ename şi hiredate) • Dreapta – date numerice (exemplu: coloana sal) • Textul este scris cu litere mari (uppercase) Numele de coloan pentru date calendaristice sau caractere poate fi trunchiat. Nunele coloanelor sunt afişate implicit cu litere mari. în ordinea de afişare dorit .1 Expresii aritmetice Crearea expresiilor numerice şi de date folosind operatori aritmetici modific felul în care se afişeaz datele prin executarea de calcule. dar numele de coloan pentru datele de tip numeric nu poate fi trunchiat. aceasta este vizibil doar la afişarea rezultatelor.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice denumirea noii coloane provine de la opera ia care a generat-o. Folosirea parantezelor pentru a înt ri ordinea fireasc a opera iilor va arata astfel : (12*SALARY)+100. În exemplul dat sunt afişate câmpurile nume. Aceasta este calculat înmul ind salariul lunar cu 12 plus o prim de 100$.12*salary+100 FROM employees. înmul irea se efectueaz înaintea adun rii. opera ie care nu va schimba rezultatul. salariu şi compensa ia anual a angaja ilor. Pute i folosi parantezele pentru a for a expresia din paranteze sa fie evaluat prima. • Operatorii de aceeaşi prioritate sunt evalua i de la stânga la dreapta. Exemplu: SELECT last_name. salary. Deci. • Parantezele sunt folosite pentru a for a evalu rile prioritare şi a clarifica regulile. NOT : SQL*Plus ignor spa iile din fa a şi din spatele operatorilor aritmetici. Prioritatea operatorilor este * / + • Înmul irea şi împ r irea au prioritate fa de adunare şi sc dere. • Dac o expresie aritmetic con ine mai mult de un operator. înmul irea şi împ r irea sunt evaluate primele. evaluarea se va face de la stânga la dreapta. în acest caz SALARY+300. Dac operatorii folosi i într-o expresie sunt de aceeaşi prioritate. Folosirea parantezelor 6-150 .

totul înmul it cu 12. Valoarea nul nu este aceeaşi cu zero sau spa iu. job_id. adunarea are prioritate fa de înmul ire. salary. Exemplu: SELECT last_name. necunoscut inaplicabil .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: SELECT last_name. Se pot modifica regulile precedentei operatorilor folosind parantezele pentru a specifica ordinea în care operatorii sa fie folosi i. În exemplul dat sunt afişate numele.12*(salary+100)FROM employees. sau 6-151 .salary. Aceasta este formata din salariul lunar plus o prima.commission_pct FROM employees. Definirea valorii nule (null vallue) Valoarea null este nedisponibil . Datorit parantezelor. salariul şi compensa ia anual a salaria ilor. neatribuit .

Dac o coloan dintr-o expresie aritmetic con ine valoarea null. necunoscut sau inaplicabil . rezultatul este null sau necunoscut. Trebuie subliniat faptul ca vânz torul are comisionul 0 nu null. Valoarea nul în expresii aritmetice Expresiile aritmetice care con in valoarea null sunt evaluate ca nule. dac împ r i i un num r la valoarea null. Valoarea null nu este aceeaşi cu zero sau spa iu. rezultatul este null. 12*salary*commission_pct FROM employees. Exemplu: SELECT last_name. De exemplu. cu excep ia celor care au fost definite nenule sau chei primare. Zero este num r iar spa iul este un caracter. dac încerca i s executa i o împ r ire la zero. 6-152 . Valoarea vid reprezint un fapt în sine. Se observ c unii angaja i pot câştiga comision iar al ii nu . Oricum. neatribuit . aceasta valoare se numeşte nul .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Dac o linie nu are date pentru o coloan anume. Coloanele de orice tip de dat pot con ine valoarea vid .coloana COMMISSION_PCT din tabela EMPLOYEES. Valoarea null este nedisponibil . ob ine i o eroare.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

În exemplul de mai sus, angajatul KING nu primeşte comision. Deoarece coloana COMMISSION_PCT în expresia aritmetic este nul , rezultatul este null. 6.2 Definirea alias-urilor pentru coloane

Aliasurile redenumesc numele coloanei. Aliasurile sunt folositoare acolo unde se folosesc calcule aritmetice. • Aliasurile urmeaz imediat dup numele coloanei; op ional se poate folosi cuvântul cheie AS intre numele coloanei şi alias; • Aliasurile necesita doua ghilimele ( “ ” / dac con in spatii, caractere speciale sau au importanta literele mari (mici). La afişarea rezultatului unei interog ri SQL* Plus foloseşte în mod normal numele coloanei drept cap de tabel. În multe cazuri acest cap de tabel nu este sugestiv şi de aici dificultatea de a în elege con inutul coloanei. Numele coloanei se poate schimba folosind aliasul. Aliasul se specific dup numele coloanei în lista SELECT folosind spa iul ca separator. Implicit capul de tabel ob inut prin alias este scris cu litere mari. Dac aliasul con ine spatii, caractere speciale (ca $ sau #), sau au importanta literele mari (mici), aliasul trebuie scris între ghilimele (“”). Exemplu: SELECT last_name as name, commission_pct comm FROM employees;

6-153

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

SELECT last_name as „Name”, salary*12 „Annual Salary” FROM employees;

Primul exemplu afişeaz numele şi comisionul lunar al tuturor angaja ilor. Cuvântul cheie AS a fost folosit înainte de alias. Rezultatul interog rii trebuie s fie acelaşi indiferent dac cuvântul cheie AS este folosit sau nu. Un alt aspect ce trebuie remarcat este faptul c name şi comm au fost scrise cu litere mici iar afişarea s-a f cut cu litere mari. Deci, implicit capul de coloana apare cu litere mari. În cel de-al doilea exemplu afişam numele şi salariul anual al angaja ilor. Deoarece Annual Salary implic folosirea spa iului, aliasul trebuie scris între ghilimele. Astfel va fi afişat exact ceea ce este scris în expresia SELECT. 6.3 • • • Operatorul de concatenare

Concateneaz coloanele sau şirurile de caractere cu alte coloane; Este reprezentat de dou bare verticale (||); Rezult o coloan care este o expresie caracter.

Folosind operatorul de concatenare (||) se pot concatena coloane, expresii aritmetice sau valori constante pentru a crea expresii de tip caracter. Coloanele situate de o parte şi de alta a operatorului sunt combinate pentru a face o singur coloan de ieşire. 6-154

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: SELECT last_name ||job_id as ’Employees’ FROM employees;

În exemplul de mai sus last_name şi job_id sunt concatenate având aliasul Employees. Observa i c func ia angajatului şi numele acestuia sunt combinate pentru a rezulta o singur coloana de ieşire. Cuvântul cheie AS, folosit înaintea numelui aliasului, face mai uşor de citit instruc iunea SELECT. Şiruri de caractere Un “literal” este un caracter, o expresie sau un num r inclus în lista SELECT; Valorile literale pentru datele calendaristice şi caractere trebuie incluse între ghilimele simple; Fiecare şir de caractere este afişat odat pentru fiecare rând întors. Exemplu: SELECT last_name ||’ is a ‘||job_id as “Employee Details” FROM employees; Exemplul afişeaz numele şi meseriile tuturor angaja ilor. Coloana poart titlul Detaliile angajatului. Observa i spatiile dintre ghilimelele simple din instruc iunea SELECT care îmbun t esc lizibilitatea ieşirii.

6-155

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

În exemplul urm tor, numele şi salariul fiec rui angajat este concatenat cu un literal pentru a da rândurilor mai mult în eles. SELECT last_name ||’:1 Month salary = ‘||salary Monthly FROM employees;

Rânduri duplicate Implicit, interog rile afişeaz duplicate. toate rândurile, incluzând rândurile

Exemplu: SELECT department_id FROM employees;

6-156

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

SQL*Plus va afişa rezultatul interog rii f r a elimina rândurile duplicate dac nu se indic altfel. Exemplul de mai sus afişeaz toate numerele de departamente din tabelul EMP. Eliminarea rândurilor duplicate se face folosind cuvântul cheie DISITINCT în clauza SELECT. Exemplu:

SELECT DISTINCT department_id FROM employees; Se pot specifica mai multe coloane dup clauza DISTINCT. Aceast clauz afecteaz toate coloanele selectate şi rezultatul reprezint o combina ie de coloane distincte. SELECT DISTINCT department_id , job_id FROM employees; Afişarea structurii unei tabele

6.4

Se foloseşte comanda SQL*Plus: DESC[RIBE] tablename

6-157

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice unde tablename este numele unei tabele existente, a unei vizualiz ri sau a unui sinonim accesibil utilizatorului.

Exemplu: DESCRIBE EMPLOYEES

Se afişeaz informa ii despre structura tabelei EMPLOYEES. Null? indic dac o coloana trebuie sa con in date; NOT NULL indic faptul ca acea coloan trebuie s con in date. Type afişeaz tipul de dat al coloanei. Tip de date
NUMBER(p,s) VARCHAR2(s) DATE CHAR(s)

Descriere
Valori numerice având un num r maxim de p cifre, unde s este num rul de cifre din dreapta virgulei Şir de caractere de lungime variabila cu lungime maxima s Dat calendaristic între 1 ianuarie 4712 i.c. şi 31 decembrie 9999 d.c. Şir de caractere de lungime fix (s)

6.5

Restric ionarea şi sortarea datelor

La citirea datelor dintr-o baza de date s-ar putea sa fie necesar reducerea num rului de linii afişate sau specificarea ordinii în care acestea s fie afişate. În exemplul de mai jos se doreşte afişarea tuturor angaja ilor din departamentul 90. Setul de linii care au valoarea 90 în coloana DEPARTMENT_ID sunt singurele returnate. Aceast metod de restric ionare reprezint baza clauzei WHERE în SQL. 6-158

• Numele coloanei. În sintaxa: WHERE restric ioneaz interogarea la liniile ce îndeplinesc condi ia.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Limitarea liniilor folosind o selec ie EMPLOYEES EMPLOYEE_ID 100 101 102 103 … EMPLOYEES EMPLOYEE_ID 100 101 102 LAST_NAME King Kochhar De Haan JOB_ID AD_PRES AD_VP AD_VP … DEPARTMENT_ID 90 90 90 LAST_NAME King Kochhar De Haan Hunold JOB_ID AD_PRES AD_VP AD_VP IT_PROG … DEPARTMENT _ID 90 90 90 90 60 “… returneaz to i angaja ii din departamentul 90” 6. Clauza WHERE e compus din trei elemente . O clauza WHERE con ine o condi ie ce trebuie îndeplinit şi urmeaz imediat dup o clauza FROM. 6-159 . expresii.6 Clauza WHERE SELECT [DISTINCT] {*. expresii aritmetice sau func ii. condition e compus din nume de coloane. • Operatorul de compara ie. • Nume de coloana. Clauza WHERE poate compara valorile din coloane. Clauza WHERE urmeaz dup clauza FROM Pute i reduce num rul de linii returnate de o interogare folosind clauza WHERE. constant sau list de valori. column [alias]. constante şi operatori de compara ie. valori literale. …} FROM table [WHERE condition(s)].

minute şi secunde. În exemplul urm tor nu este returnat nici o linie deoarece tabela EMPLOYEES con ine toate datele scrise cu majuscule. Şiruri de caractere şi date • Şirurile de caractere şi datele sunt incluse între apostrof. • Valorile de tip caracter sunt case-sensitiv iar valorile de tip dat calendaristic sunt format-sensitive. zi.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: SELECT employee_id. Oracle retine datele într-un format numeric intern. first_name. ore. reprezentând secol. • Formatul implicit pentru dat calendaristic este ‘DD-MON-YY’ Exemplu: SELECT last_name. 6-160 . department_id FROM employees WHERE last_name=’WHALEN’. job_id. Afişarea implicit a datei este DD-MON-YY. Şirurile de caractere şi datele din clauza WHERE trebuiesc incluse între apostrofuri (‘ ‘). luna. department_id FROM employees WHERE last_name=’Whalen’. an. department_id FROM employees WHERE department_id=90. Toate c ut rile de tip caracter sunt case-sensitiv. Regula nu se aplic constantelor numerice. last_name. În exemplul de mai sus SELECT-ul returneaz numele şi func ia tuturor angaja ilor din departamentul 90. SELECT last_name. job_id.

Aceştia sunt folosi i în clauza WHERE în urm torul format: Sintaxa: WHERE expresie operator valoare Exemplu: WHERE hiredate=’01-JAN-95’ WHERE sal>=1500 WHERE ename=’SMITH’ Folosirea operatorilor de compara ie SELECT last_name. În exemplul de mai sus SELECT-ul returneaz numele şi salariul din tabela EMPLOYEES acolo unde salariul angajatului este mai mic sau egal cu 3000.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice NOT : schimbarea formatului implicit va fi explicat în alt capitolul. 6-161 . Cele dou valori sunt luate din coloanele SALARY respectiv LAST_NAME ale tabelei EMPLOYEES. 6.7 Operatori de compara ie Operator = > >= < <= <> != Semnifica ie Egal cu Mai mare decât Mai mare sau egal Mai mic decât Mai mic sau egal Diferit de Diferit de dou Operatorii de compara ie sunt folosi i în condi iile care compar expresii. salary FROM employees WHERE salary<=3000.

salary. Exemplul de mai sus afişeaz num rul. Prima data trebuie specificat limita inferioar .101. Folosirea operatorului IN la testarea valorilor dintr-o list .201).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Al i operatori de compara ie Operator BETWEEN …AND… IN(lista) LIKE IS NULL Semnifica ie Între dou valori (inclusiv) Potriveşte orice valoare din list Potriveşte un tip de caracter Este o valoare nul Operatorul BETWEEN Operatorul BETWEEN se foloseşte pentru afişarea valorilor cuprinse întrun interval. salariul şi num rul managerului pentru to i angaja ii ai c ror manageri au num rul 100. 6-162 . salary FROM employees WHERE salary BETWEEN 2500 AND 3500. Valorile specificate cu operatorul BETWEEN sunt inclusive. SELECT employee_id.101 sau 201. numele. SELECT last_name. SELECT-ul de mai sus returneaz liniile din tabela EMPLOYEES pentru to i angaja ii cal c ror salariu este cuprins între 2500 şi 3500.last_name.manager_id FROM employees WHERE manager_id IN (100. Limita Limita Inferioar superioar Folosind operatorul BETWEEN liniile afişate vor avea valori cuprinse în intervalul cuprins între limita inferioar şi limita superioar .

Pentru construirea şirurilor de c utare pot fi folosite dou simboluri. Folosirea operatorului LIKE Operatorul LIKE se foloseşte pentru a efectua c ut ri folosind caractere wildcard în şirurile valide de c utare. SELECT employee_id. department_id FROM employees WHERE last_name IN (’Harstein’. 6-163 . Folosind operatorul LIKE se pot selecta liniile care se potrivesc cu un anumit şablon de c tare format dintr-un şir de caractere numit wildcard.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Operatorul IN poate fi folosit cu orice tip de dat . fie numere. Nu cunoaştem întotdeauna exact valoarea pe care o c ut m.’Vargas’). Dac în list sunt folosite caractere sau date acestea trebuiesc incluse între apostrof. % înseamn zero sau mai multe caractere _ înseamn un singur caracter SELECT first_name FROM EMPLOYEES WHERE first_name LIKE ‘S%’. Urm torul exemplu returneaz o linie din tabela EMPLOYEES pentru fiecare angajat al c rui nume este inclus în lista de nume din clauza WHERE. Condi iile c ut rii pot con ine fie caractere literale.manager_id.

Op iunea ESCAPE: Când este nevoie de o potrivire exacta a caracterelor “%” şi “_” trebuie folosita op iunea ESCAPE. Exemplul afişeaz numele tuturor angaja ilor care au al doilea caracter “A”.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Simbol % _ Semnifica ie Reprezint orice secven a de dou sau mai multe caractere Reprezint un singur caracter SELECT-ul de mai sus afişeaz numele angaja ilor din tabela EMPLOYEES pentru to i angaja ii ai c ror nume începe cu “S”. Aceasta op iune specific care este caracterul ESCAPE. Numele care încep cu “s” nu vor fi returnate.last_name. hire_date FROM EMPLOYEES WHERE hire_date LIKE ‘%95’. Se pot face diverse combina ii de caractere cum ar fi : SELECT last_name FROM EMPLOYEES WHERE last_name LIKE ‘_o%’. Se poate folosi identificatorul ESCAPE pentru a c uta caracterele “%” şi “_”.job_id FROM EMPLOYEES WHERE job_id LIKE ‘%SA\_%’ ESCAPE ‘\’. 6-164 . Pentru a afişa numele tuturor angaja ilor care con ine secven a “A_B” se va folosi urm torul SELECT: SELECT employee_id. Combin ri de caractere wildcard: Simbolurile % şi _ pot fi folosite în orice combina ie cu caracterele literale. Operatorul LIKE poate fi folosit şi în compara iile ce folosesc operatorul BETWEEN. Urm torul exemplu afişeaz numele şi data angaj rii pentru salaria ii ce au fost angaja i între ianuarie 1981 şi decembrie 1981. SELECT last_name.

O valoare nul nu poate fi egal sau inegal cu orice valoare. Folosirea operatorului IS NULL la testarea valorilor nule SELECT last_name. neatribuit . Acest lucru face ca Oracle s interpreteze caracterul underscore drept literal. În tipar caracterul ESCAPE preceda caracterul underscore (_). O valoare nul este o valoare nedisponibil .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Op iunea ESCAPE identific caracterul backslash (\) ca fiind caracter ESCAPE.commission_pct FROM EMPLOYEES WHERE commission_pct IS NULL. De exemplu pentru a afişa numele. func ia şi comisionul tuturor angaja ilor care nu au dreptul la comision se va folosi urm torul SELECT: SELECT last_name.job_id. 6.8 Operator AND OR NOT Operatori logici Semnifica ie Returneaz TRUE dac ambele componente ale condi iei sunt adev rate Returneaz TRUE dac una din componentele condi iei este adev rat Returneaz TRUE dac condi ia este fals 6-165 .manager_id FROM EMPLOYEES WHERE manager_id IS NULL. Operatorul IS NULL c uta valorile nule. Din aceast cauz nu poate fi testat folosind operatorul (=). Exemplul de mai sus returneaz numele şi managerul tuturor angaja ilor care nu au manager. necunoscut sau neaplicabil .

De acea va fi selectat doar angajatul pentru care numele codului func iei începe cu MAN şi care câştig mai mult de 10000.job_id. Nu va fi returnat nici o linie dac MAN nu este scris cu majuscule. Toate c ut rile de tip caracter sunt case-sensitiv. Tabela de adev r a operatorului AND AND TRUE FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN FALSE FALSE FALSE FALSE UNKNOWN UNKNOWN FALSE UNKNOWN Folosirea operatorului OR Operatorul OR cere ca doar una din condi ii sa fie adev rat . De acea un angajat pentru care numele codului func iei începe cu MAN sau câştiga mai mult de 10000 va fi selectat.job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Un operator logic combin rezultatul a dou componente de tip condi ie pentru a produce un singur rezultat bazat pe acestea sau pentru a inversa rezultatul unei singure condi ii. În exemplul de mai sus oricare din condi ii poate fi adev rat pentru a fi selectat vreo înregistrare. last_name. În exemplul de mai sus ambele condi ii trebuie sa fie adev rate pentru a fi selectat vreo înregistrare. Şirurile tip caracter trebuiesc incluse între apostrof. Folosirea operatorului AND AND cere ca ambele condi ii sa fie adev rate.salary FROM EMPLOYEES WHERE salary>=10000 OR job_id LIKE ’%MAN%’. 6-166 .salary FROM EMPLOYEES WHERE salary>=10000 AND job_id LIKE ’%MAN%’. last_name. SELECT employee_id. SELECT employee_id.

6-167 .job_id. În exemplul de mai sus sunt afişate numele şi func ia tuturor angaja ilor a c ror func ie nu este IT_PROG.salary FROM EMPLOYEES WHERE job_id NOT IN (’IT_PROG’. ST_CLERK.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tabela de adev r a operatorului OR OR TRUE FALSE UNKNOWN TRUE TRUE TRUE TRUE FALSE TRUE FALSE UNKNOWN UNKNOWN TRUE UNKNOWN UNKNOWN Folosirea operatorului NOT SELECT last_name. ’SA_REP’). ’ST_CLERK’. SA_REP.

• Func ia trebuie s fie SA_REP. … WHERE job_id NOT în (’AC_ACCOUNT’. [NOT] IN [NOT] BETWEEN NOT AND OR Precedenta regulilor se poate schimba folosind paranteze. LIKE şi NULL. SELECT last_name. 6-168 .job_id.salary FROM EMPLOYEES WHERE job_id =’SA_REP’ OR JOB_ID=’AD_PRES’ AND SALARY>15000.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tabela de adev r a operatorului NOT NOT TRUE FALSE FALSE TRUE UNKNOWN UNKNOWN Not : operatorul NOT poate fi folosit împreun cu al i operatori SQL cum ar fi : BETWEEN. În exemplul de mai sus sunt dou condi ii ce trebuie îndeplinite şi anume: • Func ia trebuie s fie AD_PRES şi salariul sa fie mai mare de 15000.’AD_VP’) … WHERE salary NOT BETWEEN 10000 AND 15000 … WHERE last_name LIKE ’%A%’ … WHERE commission_pct IS NOT NULL Reguli de preceden Ordinea evalu rii 1 2 3 4 5 6 7 8 Operator To i operatorii de compara ie Operatori de concatenare Condi ii de comparare IS [NOT] NULL. LIKE.

unde: ORDER BY ASC DESC specific ordinea în care sunt afişate liniile. ordoneaz liniile descendent. Sintaxa: SELECT expresie FROM table [WHERE condition(s)] [ORDER BY {coloana. ordoneaz liniile ascendent – implicit. Folosi i clauza ORDER BY pentru a afişa liniile într-o ordine specific . De aceea SELECT-ul citeşte urm toarele: selecteaz linia dac angajatul este AD_PRES sau SA_REP şi dac angajatul câştiga mai mult de 15000. Dac nu este folosit clauza ORDER BY ordinea sort rii este nedefinit şi este posibil ca Serverul Oracle s nu afişeze liniile în aceeaşi ordine.” 6. ea trebuie scris ultima în fraza SELECT.job_id. de dou ori.” Folosirea parantezelor pentru a for a prioritatea: SELECT last_name.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice De aceea SELECT-ul se citeşte dup cum urmeaz : “Selecteaz linia dac un angajat este AD_PRES şi câştiga mai mult de 15000 sau dac angajatul este SA_REP.salary FROM EMPLOYEES WHERE(job_id=’SA_REP’ OR JOB_ID=’AD_PRES’)AND SALARY>15000. • Salariul trebuie s fie mai mare de 15000. În exemplul de mai sus sunt dou condi ii: • Func ia trebuie s fie SA_REP sau AD_PRES . pentru aceeaşi interogare. Clauza ORDER BY poate fi folosit pentru a sorta liniile. 6-169 . expresie} ASC|DESC]. Se poate specifica sortarea dup o expresie sau dup un alias.9 Clauza ORDER BY Ordinea liniilor returnate de o interogare nu este predefinit . Dac este folosit clauza ORDER BY.

hire_date FROM EMPLOYEES ORDER BY hire_date DESC.job_id. • Valorile numerice sunt afişate începând cu cea mai mica valoare – de exemplu 1. În exemplu rezultatele sunt sortate dup cea mai recent dat de angajare a salaria ilor. 6-170 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Sortarea în ordine descendent SELECT last_name. • • • Inversarea ordinii implicite în care sunt afişate liniile se face prin specificarea cuvântului cheie DESC dup numele coloanei în clauza ORDER BY.999. La folosirea clauzei ORDER BY valoarea implicit este cea ascendent . Valorile nule sunt afişate ultimele pentru secven e ascendente şi primele pentru secven e descendente. Datele sunt afişate începând cu cea mai timpurie – de exemplu 01JAN-92 înaintea lui 01-JAN-95. Valorile tip caracter sunt afişate în ordine alfabetic – de exemplu A înaintea lui Z.department_id.

Dac se doreşte schimbarea ordinii afiş rii unei coloane se specific DESC dup numele coloanei respective. Rezultatele s se afişeze dup num rul departamentului şi apoi în ordine descresc toare dup salariu.salary*12 annsal FROM EMPLOYEES ORDER BY annsal.department_id.salary FROM EMPLOYEES ORDER BY department_id. Se poate face sortare şi dup o coloana care nu este în lista SELECT.salary DESC . last_name. În clauza ORDER BY trebuiesc specificate coloanele separate prin virgule. SELECT last_name. Sortarea dup mai multe coloane • • • Ordinea listei scrise în clauza ORDER BY este ordinea sort rii. Exemplu: Sa se afişeze numele şi salariul tuturor angaja ilor. • 6-171 . În exemplul de mai sus datele sunt sortate dup salariul anual. Rezultatele interog rii pot fi sortate dup mai multe coloane. Limita sort rii este dat de num rul de coloane din tabela respectiv .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Sortarea dup aliasul coloanei SELECT employee_id. Se poate folosi aliasul unei coloane în clauza ORDER BY.

Afişa i structura tabelei DEPARTMENTS şi con inutul ei. 2. Afişa i structura tabelei EMPLOYEES.1985 şi 1. Instruc iunea SELECT se va executa cu succes : adev rat / fals. job_id.sql. 14.sql astfel încât sa afişa i numele şi salariul tuturor angaja ilor a c ror salarii nu intr în intervalul 15000$ şi 28500$. SELECT first_name. 13. meseria şi data de început pentru cei care s-au angajat între 20. Ini ia i o sesiune SQL*Plus. Afişa i numele concatenat cu meseria. Salva i instruc iunea în fişierul p3. Comenzile SQL*Plus acceseaz o baza de date: adev rat / fals. Afişarea va fi f cut în ordinea cresc toare a datei de angajare. Înc rca i fişierul abc. Hire Date şi apoi rula i interogarea.05. 10. Afişa i numele şi salariul angaja ilor care câştiga mai mult de 28500$. Salva i instruc iunea SQL într-un fişier p1. salary x 12 ANNUAL SALARY FROM EMPLOYEES. SELECT last_name.sql. 16. Afişa i numele. Instruc iunea SELECT se va executa cu succes : adev rat / fals. Salva i instruc iunea într-un fişier abc. 3.10 Exerciţii 1. 11. 4. Afişa i datele din tabela EMPLOYEES. 12. 8. SELECT * FROM salgrade.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 6. 7.02. Modifica i p1.sql în bufferul SQL.sql şi apoi rula i-l. meseria. data angaj rii şi num rul angajatului. 9. Afişa i meseriile distincte din tabela EMPLOYEES.1992. Crea i o interogare care sa afişeze numele angajatului. Afişa i numele angajatului cu marca 201 şi num rul departamentului în care lucreaz . Rula i interogarea din fişierul abc. separate de virgula şi un spa iu şi numi i coloana EMPLOYEES -JOB and Title. 5. Job. salary SALARY FROM EMPLOYEES. În instruc iunea urm toare sunt câteva erori.sql şi apoi rula i-l. Redenumi i numele coloanelor cu: EMPLOYEES#. 6. 17. 15. Separa i fiecare coloan cu o virgul şi numi i coloana THE_OUTPUT. Identifica i-le. Afişa i numele angaja ilor şi numerele de departament ale celor care 6-172 .

25. Afişa i numele şi meseria pentru angaja ii care nu au manager. salariul şi comisionul pentru to i angaja ii care au comision. ordona i alfabetic dup nume. Redenumi i coloanele Angajat şi Salar Lunar.sql şi afişa i numele şi salariul celor care câştiga mai mult de 15000$ şi sunt în departamentele 10 sau 30. Sorta i datele în ordine descresc toare dup salariu şi comision. Afişa i numele şi data angaj rii pentru cei care au fost angaja i în anul 1995. 21. 22. 19. 24. Afişa i numele angaja ilor care au a treia liter a numelui ‘A’.sql şi apoi rula i-l. Modifica i fişierul p3. Modifica i p6. Afişa i numele. Afişa i numele angaja ilor care au 2 de ‘L’ oriunde în numele lor şi sunt din departamentul 30 împreuna cu acei angaja i care au managerul cu marca 100. 6-173 . Salva i modific rile în fişierul p6.sql şi apoi rula i-l. 18. Afişa i numele. salariul şi comisionul pentru to i angaja ii care au comisionul mai mare decât salariul m rit cu 10%.sql şi afişa i numele. Salva i modific rile în fişierul p13. meseria şi salariul pentru to i cei care sunt func ionari sau analişti iar salariul lor nu este egal cu 10000$ sau 30000$ sau 50000$.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice lucreaz în departamentele 10 şi 30. 23. 20.

Func iile reprezint o component important a limbajului SQL şi pot fi utilizate pentru : • Calcule matematice asupra datelor. Acesta capitol este primul dintr-un set de dou capitole ce au ca obiectiv descrierea func iilor. numere şi date calendaristice cât şi de func iile ce fac conversii dintr-un tip de data în altul – de exemplu: din caracter în num r. Ea se ocup atât de func iile de un singur rând pentru caractere. Func iile SQL accepta argumente şi întorc valori. • Schimbarea tipului de dat a unei coloane.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 7 Func ii de un singur rând Func iile fac blocul de baza al interog rii mai puternic şi sunt folosite pentru a manipula date. • Modificarea unor articole individuale. • Manipularea ieşirii pentru grupuri de rânduri. • Stabilirea unui format pentru date calendaristice şi numere atunci când acestea sunt tip rite pe ecran. NOT : Majoritatea func iilor descrise în acest capitol sunt specifice versiunii SQL pentru Oracle. Func ii Func ii de un singur rând Exista dou tipuri distincte de func ii: • Func ii de un singur rând • Func ii de mai multe rânduri 7-174 Func ii de mai multe rânduri .

Ac ioneaz asupra fiec rui rând rezultat din interogare . 7. Conversie. arg2. Num r. • o expresie.1 Func ii de un singur rând Func iile de un singur: • • • • • unde: Manipuleaz articole.… este numele func iei este un nume de coloan din baza de date este orice şir de caractere sau expresie calculabil sunt argumentele utilizate de func ie Func iile de un singur rând sunt utilizate pentru a manipula date.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ii de un singur rând Aceste func ii ac ioneaz doar asupra unui singur rând şi întorc un rezultat pentru fiecare rând. Întorc un singur rezultat pentru fiecare rând. • o variabil . nume_funcţie (coloana | expresie. Pot fi imbricate. arg2. Release 9i pentru o listă completă a funcţiilor disponibile împreună cu sintaxa aferentă. Pentru mai multe detalii consultaţi lucrarea: Oracle Server SQL Reference. Data calendaristic . Caracteristici ale func iilor de un singur rând 7-175 . …] ) nume_func ie coloana expresie arg1. Acest capitol se ocupa de urm toarele tipuri: Caracter. Func ii de mai multe rânduri Aceste func ii ac ioneaz asupra unor grupuri de rânduri şi întorc un rezultat pentru fiecare grup. Pot modifica tipuri de date. O func ie poate avea ca argument unul din urm toarele: • o constanta furnizat de utilizator. • o denumire de coloan . [arg1. Exist mai multe tipuri de func ii de un singur rând. Ele accept unul sau mai multe argumente şi întorc o singur valoare pentru fiecare rând rezultat din interogare.

NVL2. CONCAT SUBSTR LENGTH INSTR LPAD.RPAD TRIM REPLACE 7-176 . WHERE şi ORDER BY.CASE. • Func ii pentru numere: accept argumente de tip numeric şi întorc rezultate de tip numeric. Func ii pentru caractere Func ii de conversie a caracterelor din litere mari in litere mici. • Func ii generale: NVL. LOWER UPPER INITCAP Func ii de manipulare a caracterelor. • Func ii pentru conversie: fac conversia dintr-un tip de data în altul. Întorc o valoare pentru fiecare rând.DECODE. • Func ii pentru date calendaristice: accept argumente de tip dat calendaristic şi întorc rezultate de tip dat calendaristic cu excep ia func iei MONTH_BEETWEEN care întoarce o valoare numeric .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • • • • • Ac ioneaz asupra fiec rui râd întors de interogare.COALSECE. Caractere Generale Funcţii de un singur rând Conversie Data calendaristică Numere Acest capitol prezint urm toarele tipuri de func ii: • Func ii pentru caractere: accept argumente de tip caracter şi întorc rezultate de tip caracter sau numeric. Se pot utiliza în SELECT. Se pot imbrica. Este posibil sa aştepte unul sau mai multe argumente.NULLIF. Pot întoarce o dat a c rui tip este diferit de tipul argumentului.

Dac n este omis atunci func ia întoarce toate caracterele de la pozi ia m pân la sfârşitul şirului. şi dac îl g seşte îl înlocuieşte cu valoarea din replacement_string. m/. trim_character. sfârşitul. trebuie inclusa intre apostrof. Întoarce pozi ia în cadrul valorii de tip caracter a caracterului specificat. Caut în search_string şirul de caractere specificat prin text. Aceasta func ie este echivalenta cu operatorul de concatenare ( || ). • Func ii de manipulare a caracterelor Func ie LOWER (expresie coloană) UPPER (expresie coloană) INITCAP (expresie coloană) Scop Face conversia caracterelor alfabetice în litere mici Face conversia caracterelor alfabetice în litere mari Face conversia pentru primul caracter din fiecare cuvânt în litera mare iar pentru restul caracterelor conversia se face în litere mici Concateneaz prima valoare de tip caracter cu a doua valoare de tip caracter. ambelor. n. CONCAT(expresie coloana1.2 Func ii pentru caractere Func iile de un singur rând pentru caractere accept argumente de tip caracter şi întorc rezultate de tip caracter sau numeric. Aliniaz valoarea de tip caracter la dreapta pe o lungime de n caractere. Trim _character este un literal. search_string. Dac m este negativ atunci pozi ia de început a num r rii se consider a fi ultimul caracter din şir. Întoarce num rul de caractere dintr-o valoare de tip caracter. Permite eliminarea caracterelor de la începutul. (expresie coloana2) SUBSTR(expresie coloana.n/) LENGTH(expresie coloana) INSTR(expresie coloana. trim_source) REPLACE (text.m) LPAD (expresie |coloana.’ sir caractere’) TRIM LENGTH(leading|trailing|both. replacement _string) 7-177 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7. Func iile pentru caractere se pot împ r i în : • Func ii de conversie a caracterelor din litere mari în litere mici. Întoarce un sir de caractere din cadrul valorii de tip caracter începând cu pozi ia m şi având lungimea n.

SELECT employee_id. INITCAP : Face conversia pentru prima liter din fiecare cuvânt în liter mare iar pentru celelalte litere ale cuvântului conversia se face în liter mic . Cele trei func ii de conversie a caracterelor sunt: LOWER. last_name. UPPER : Face conversia în litere mari pentru un text scris cu litere mari şi mici. Afişa i num rul de ordine. UPPER. 7-178 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ie LOWER (‘SQL Course’) UPPER (‘SQL Course’) INITCAP (‘SQL Course’) Rezultat sql course SQL COURSE Sql Course Func ii de conversie a caracterelor din litere mari în litere mici. LOWER: Face conversia în litere mici pentru un text scris cu litere mari şi mici. SELECT ‘The job id for ‘ || UPPER(last_name) || ‘ is ’ || LOWER(job_id) AS “EMPLOYEE DETAILS” FROM employees. No rows selected. INITCAP. department_id FROM employees WHERE last_name=’higgins’. numele şi departamentul la care lucreaz pentru angajatul Higgins.

LENGTH. Clauza WHERE din prima instruc iune SQL specific numele angajatului ca fiind higgins. numele ‘higgins’ (scris cu litere mici) nu poate fi g sit şi ca urmare nu se afişeaz nimic. Pentru a afişa numele cu prima litera convertit în litera mare iar restul în litere mici utiliza i func ia INITCAP. … WHERE (last_name)=’Higgins’ Numele angajatului din partea dreapta a compara iei este scris cu capitalizare adic aşa cum apare în tabela. se pot selecta informa iile necesare din tabel . Func ia limiteaz num rul parametrilor la 2. 7-179 .1. INSTR şi LPAD. Func ii pentru manipulat caractere FUNCTIE CONCAT (‘Good’. de aceasta dat .3) LENGTH (‘String’) INSTR (‘String’.10. department_id FROM employees WHERE LOWER(last_name)=’higgins’.’r’) LPAD (salary.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT employee_id. Clauza WHERE mai poate fi scris ca în exemplul de mai jos.’*’) REZULTAT GoodString Str 6 3 ******5000 Func iile pentru manipulat caractere prezentate în cadrul acestei lec ii sunt: CONCAT. LENGTH Întoarce lungimea şirului de caractere (întoarce o valoare numeric ). efectul instruc iunii fiind acelaşi. Clauza WHERE din cea de-a doua instruc iune SQL face mai întâi conversia numelui memorat în tabela în litere mici şi compar rezultatul ob inut cu numele ‘higgins’. În acest caz ambii termeni din compara ie sunt scrişi cu litere mici şi deci. Din moment ce toate informa iile din tabela EMPLOYEES sunt memorate ca fiind scrise cu capitalizare. SUBSTR Extrage un sir de caracter de o lungime specificat . CONCAT Concateneaz cei doi parametri. last_name. SUBSTR. INSTR G seşte pozi ia caracterului specificat.’String’) SUBSTR (‘String’.

LENGTH (last_name). LENGTH (last_name). Modifica i exemplul de mai sus astfel încât instruc iunea SQL s afişeze informa iile despre angaja i pentru acele persoane a c ror nume se termina în litera n. INSTR(last_name.’a’)”Contains ’a’? ” FROM employees WHERE SUBSTR(last_name.1)=’n’.’a’)”Contains ’a’? ” FROM employees WHERE SUBSTR(job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice LPAD Întoarce un sir de caractere rezultat prin inserarea valorii specificate în cel de-al treilea argument la stânga primului argument lungimea rezultatului având lungimea specificat de cel de-al doilea argument. pentru toate persoanele care au func ia de vânz tor.last_name) NAME. 7-180 . lungimea numelui şi pozi ia literei a în cadrul numelui. Are un comportament similar cu func ia LPAD numai c inserarea celui de-al treilea argument se face la dreapta primului argument. Job_id.last_name) NAME. RPAD Exemplul de mai sus afişeaz numele angajatului şi func ia sa împreuna. INSTR(last_name.4)=’REP’.-1. SELECT employee_id. SELECT employee_id.CONCAT(first_name.CONCAT(first_name. Job_id.

ROUND(45.923.-1) FROM DUAL. n) MOD (m.2).923. Dac n este omis num rul rezultat din conversie nu are parte zecimal .3 Func ii pentru valori numerice ROUND Rotunjeşte valoarea cu un num r specificat de zecimale.300) å 100 Func iile pentru valori numerice accept valori numerice şi întorc valori numerice. TRUNC (coloana | expresie.926. ROUND(45. n) Scop Rotunjeşte coloana.0).923.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7.923. Dac n este negativ este rotunjit num rul din partea stânga a punctului zecimal.2) å 45.2) ROUND(45. Dac n este negativ este trunchiat num rul din partea stânga a punctului zecimal câtre zero. 7-181 .2) å 45.93 TRUNC Trunchiaz valoarea TRUNC (45. Întoarce restul împ r irii dintre m şi n.92 46 50 Func ia ROUND rotunjeşte coloana.923. • Dac al doilea argument este omis sau este 0 num rul rezultat din conversie nu are parte zecimal . • Dac al doilea argument este -2 atunci se rotunjesc primele 2 cifre ale num rului de la stânga punctului zecimal. expresia sau valoarea la un num r cu n pozi ii la partea zecimal . Trunchiaz coloana. ROUND (45. • Dac al doilea argument este 2 atunci num rul rezultat din conversie are 2 cifre la partea zecimal .ROUND(45.0) ROUND(45. expresia sau valoarea la un num r cu n pozi ii la partea zecimal .923.----------------------------------------------45.926. expresia sau valoarea la un num r cu n pozi ii la partea zecimal .n) Utilizarea func iei ROUND SELECT ROUND(45.92 MOD Întoarce restul împ r irii MOD (1600. Dac n este omis num rul rezultat din conversie nu are parte zecimal . Aceasta sec iune descrie o parte din aceste func ii: Func ie ROUND (coloana | expresie.-1) --------------.-------------.

TRUNC(45. Func ia TRUNC.2). poate fi utilizat asupra datelor calendaristice. Exemplul de mai sus calculeaz restul împ r irii dintre salar şi 5000 pentru to i angaja ii care sunt agen i comerciali.923. salary.923).923) TRUNC(45.--------------45.923. expresia sau valoarea la un num r cu n pozi ii la partea zecimal . 7-182 .92 45 40 Func ia TRUNC trunchiaz coloana.-1) --------------. Utilizarea func iei MOD SELECT last_name.923. Mai multe detalii despre acest aspect vor fi oferite mai târziu.2) TRUNC(45.923. Func ia TRUNC func ioneaz cu argumente similare ca şi func ia ROUND.------------. • Dac al doilea argument este 2 atunci num rul rezultat din conversie are 2 cifre la partea zecimal . • Dac al doilea argument este omis sau este 0 num rul rezultat din conversie nu are parte zecimal . la fel ca şi func ia ROUND. Utilizarea func iei TRUNC SELECT TRUNC(45. MOD(salary.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ia ROUND poate fi utilizat asupra datelor calendaristice. Func ia MOD întoarce restul împ r irii dintre valoarea1 şi valoarea2.-1) FROM DUAL. 5000) FROM employees WHERE job_id = 'SA_REP'. NOT : DUAL este o tabela fictiv . TRUNC(45. TRUNC(45.

Exemplu: afişarea datei curente folosind tabela DUAL.C. Deasemeni se pot aduna sau sc dea constante numerice la date calendaristice. ora. Ea con ine o coloana DUMMY. Formatul implicit pentru date calendaristice este: DD-MON-YY. ora. zi. luna. Se poate folosi pentru afişarea datei tabela DUAL. Formatul datei calendaristice în Oracle Oracle memoreaz datele calendaristice într-un format numeric intern: Secol. Sc de i dou date pentru a g si num rul de zile dintre acestea. zi. 4712 B. secunde. Exist posibilitatea efectu rii urm toarelor opera ii: 7-183 . an. şi Decembrie 31. SELECT SYSDATE FROM DUAL. minute. Formatul implicit pentru date calendaristice este: DD-MON-YY. Valorile valide pentru date calendaristice se situeaz între Ianuarie 1. 9999 A. Opera ii aritmetice cu date calendaristice • • Dac aduna i sau sc de i un num r la sau dintr-o dat calendaristica ve i ob ine tot o dat calendaristic . De exemplu se poate afişa data curenta selectând SYSDATE dintr-o tabel . SYSDATE se poate utiliza identic cu orice denumire de coloan . SYSDATE este func ia care întoarce data şi timpul curent. Tabela DUAL este folositoare atunci când avem de întors o singur valoare ca de exemplul valoare unei constante. an. Din moment ce baza de date memoreaz datele calendaristice ca numere rezult c asupra acestor date se pot efectua opera ii aritmetice utilizând operatori aritmetici cum ar fi + şi-.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7. Tabela pe care o folosi i r mâne la latitudinea dumneavoastr . DUAL este o tabel fictiv utilizat pentru a vedea rezultatul întors de anumite func ii precum SYSDATE.D. SYSDATE este o func ie care întoarce data şi timpul. pseudocoloane sau o expresie care nu este derivat dintr-o tabela cu date utilizator. şi un rând cu valoarea X. minute.4 • • • • Utilizarea datelor calendaristice Oracle memoreaz datele calendaristice într-un format numeric intern: Secol. secunde. luna. Tabela DUAL este proprietatea utilizatorului SYS şi poate fi accesat de to i utilizatorii.

Exemplul de mai sus prezint o tabel cu numele angaja ilor din departamentul 90 şi de perioada în care au fost angaja i exprimat în s pt mâni. Rezultatul pe care îl ob ine i dac proba i exemplul poate s difere de rezultatul de mai sus.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Opera ie data + num r data – num r data – data data + num r/24 Rezultat dat dat num r de zile dat Descriere adun un num r de zile la o dat scade un num r de zile dintr-o dat scade o dat din cealalt adun un num r de ore la o dat SELECT last_name. NOT : SYSDATE este o func ie SQL ce întoarce data şi timpul curent. Trunchiaz data calendaristic . Adun un num r de s pt mâni la o dat calendaristic . (SYSDATE-hire_date)/7 WEEKS FROM employees WHERE department_id = 90. Întoarce ziua ce urmeaz datei specificate Ultima zi a lunii. Pentru a afişa perioada angaj rii în s pt mâni se face diferen a între data curent (data SYSDATE) şi data la care a fost angajat persoana şi apoi se împarte rezultatul la 7. . Rotunjeşte data calendaristic . 7.5 Func ie MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC 7-184 Func ii pentru date calendaristice Descriere Întoarce num rul de luni dintre dou date calendaristice.

’FRIDAY’) å ‘08-SEP-95’ LAST_DAY (‘01-SEP-95’) å ‘30-SEP-95’ Pentru toate persoanele care au fost angajate pe o perioada mai mic de 200 de luni. LAST_DAY(data): Determin data calendaristic a ultimei zile specificate. 7-185 .6774194 ADD_MONTHS (‘11-JAN-94’. din s pt mâna. SELECT employee_id. ADD_MONTHS(data. Partea neîntreaga a rezultatului reprezint o parte din lun . 6) REVIEW. NEXT_DAY (hire_date. TRUNC(data[.data2): G seşte num rul de luni dintre data1 şi data2. ADD_MONTHS (hire_date. hire_date.’char’): Determin data calendaristic a urm toarei zile specificate. data angaj rii. MONTHS_BETWEEN (‘01-SEP-95’. Dac fmt este omis atunci data este rotunjit la cea mai apropiata dat .6) å ‘11-JUL-94’ NEXT_DAY (‘01-SEP-95’. Dac fmt este omis atunci data este rotunjit la cea mai apropiat zi. Aceasta list este un subset al func iilor disponibile. prima vineri de dup data angaj rii. MONTHS_BETWEEN (SYSDATE. ‘FRIDAY’). afişa i num rul de ordine al angajatului. data reviziei care trebuie f cut peste 6 luni. care întoarce o valoare numeric . Dac data2 este mai târzie decât data1 atunci rezultatul este negativ.’fmt’]): Întoarce data rotunjit în func ie de formatul fmt. din s pt mâna. − − Dac data1 este mai târzie decât data2 atunci rezultatul este pozitiv.’11-JAN-94’) å 19. care urmeaz datei “data”. ultima zi a lunii în care s-a f cut angajarea. Toate func iile pentru date întorc o valoare de tip dat cu excep ia func iei MONTH_BETWEEN. care urmeaz datei “data”. ROUND(data[. Num rul n trebuie s fie întreg şi poate fi negativ.n): Adun un num r de n luni la data.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func iile pentru date calendaristice opereaz asupra datelor calendaristice de tip Oracle. Rezultatul poate fi pozitiv sau negativ. hire_date) TENURE. Exemplele de format sunt: month şi year. num rul de luni pe care persoana le-a acumulat ca angajat. Modelele pentru format sunt tratate mai târziu în cadrul acestui capitol. hire_date) < 36. MONTHS_BETWEEN (data1.’fmt’]): Întoarce data “data” trunchiat în func ie de formatul fmt. LAST_DAY(hire_date) FROM employees WHERE MONTHS_BETWEEN (SYSDATE. NEXT_DAY(data.

date calendaristice spre cel mai apropiat an sau cea mai apropiat lun . data angaj rii. ‘MONTH’) FROM employees WHERE hire_date like ‘%97’ .’MONTH’) å 01-JAN-96 ROUND (‘25-JUL-95’. folosind func iile ROUND şi TRUNC. de exemplu. ROUND (hire_date. SELECT employee_id. şi luna în care acesta a început sa lucreze exprimat sub forma unui interval. acestea rotunjesc sau trunchiaz data inând cont de modelul specificat.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func iile ROUND şi TRUNC pot fi utilizate atât pentru numere cât şi pentru date calendaristice.’YEAR’) Exemplu: Compara i datele în care s-au f cut angaj ri pentru toate persoanele care au început sa lucreze în anul 1997. Atunci când sunt utilizate cu date calendaristice. ‘MONTH’).’YEAR’) å 01-JUL-95 TRUNC (‘25-JUL-95’. Afişa i num rul de ordine al angajatului. hire_date.’MONTH’ å 01-JAN-95 TRUNC (‘25-JUL-95’. å 01-AUG-95 ROUND (‘25-JUL-95’. 7-186 . Astfel se pot rotunji. TRUNC(hire_date.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7. Intern server-ul Oracle face conversia din aceste tipuri de date în tipuri de date Oracle. coloanele tabelelor dintr-o baza de date Oracle pot fi definite utilizând tipuri de date ANSI.6 Func ii pentru conversia tipului de date Conversia tipului de date Conversie implicita a tipului de date Conversie explicita a tipului de date Pe lâng tipurile de date din Oracle. Func iile de conversie transforma tipul unei valori în altul. unde: tip de data1este tipul de data care trebuie transformat şi reprezint intrarea. În general func iile de conversie respect urm toarea form : tip de data1 TO tip de data2. Aceste conversii se pot face implicit efectuate de c tre server-ul Oracle sau explicit efectuate de c tre utilizator. NOT : Deşi se fac conversii de date în mod implicit atunci când este nevoie. iar tip de data2 este tipul de data spre care se face conversia şi reprezint ieşirea. Conversiile de date explicite se fac utilizând func ii de conversie. 7-187 . În unele situa ii. Conversiile de date implicite se fac conform unui set de reguli ce va fi detaliat mai târziu. DB2 şi SQL/DS. este recomandat ca aceste conversii sa fie f cute implicit de c tre utilizator pentru a asigura corectitudinea instruc iunilor. Acest lucru se întâmpla atunci când server-ul Oracle poate face automat conversia în tipul de date pe care îl aşteapt . server-ul Oracle accept anumite tipuri de date deşi în mod normal ar trebui sa primeasc alte tipuri.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Conversii de date implicite În opera ii de atribuire Oracle poate automat conversia: DIN VARCHAR2 sau CHAR (şir de caractere) VARCHAR2 sau CHAR (şir de caractere) NUMBER (valoare numeric ) DATE (data calendaristic ) IN NUMBER (valoare numerica) DATE VARCHAR2 (şir de caractere) VARCHAR2 (şir de caractere) Opera ia de atribuire are loc cu succes dac server-ul Oracle poate converti tipul de dat al sursei în tipul de dat al destina iei. Conversii de date explicite SQL pune la dispozi ie trei func ii cu ajutorul c rora se pot face conversii dintr-un tip de data în altul. 7-188 . În cazul evalu rii expresiilor. NOT : Conversia din CHAR în NUMBER are loc cu succes doar dac şirul de caractere reprezint un num r valid. Conversia din CHAR în DATE are loc cu succes doar dac şirul de caractere respect formatul implicit: DD-MON-YY. Oracle poate automat conversia: DIN VARCHAR2 sau CHAR (şir de caractere) VARCHAR2 sau CHAR (şir de caractere) IN NUMBER (valoare numeric ) DATE (dat calendaristic ) În general server-ul Oracle utilizeaz regulile de conversie pentru expresii în cazul în care regulile de conversie pentru atribuire nu acoper şi situa ia respectiv .

• Poate include orice element valid al modelului de formatare pentru date calendaristice . Pân acum toate datele calendaristice au fost afişate respectând formatul DD-MON-YY. [‘fmt’]) TO_NUMBER (caracter) Scop Face conversia dintr-un num r sau o dat calendaristic într-un şir de caractere de tipul VARCHAR2 respectând formatul fmt specificat. 7-189 .[‘fmt’]) NOT : Lista prezentat mai sus reprezint un subset din func iile disponibile pentru conversii. Face conversia dintr-un şir de caractere ce con ine cifre într-o valoare numeric . Func ia TO_CHAR permite conversia din formatul implicit într-un format specificat de dumneavoastr . (Dac fmt este omis. ‘fmt’) Modelul de formatare: Trebuie inclus intre ghilimele simple şi este: • case sensitive. Face conversia dint-un şir de caractere ce reprezint o data într-o valoare de tip DATE respectând formatul fmt specificat. • Determin afişarea datei calendaristice într-un anumit format. • Are un element fm care elimina spatiile albe sau zerourile nesemnificative. Release 9i “Conversion Function” Utilizarea func iei TO_CHAR împreun cu date calendaristice TO_CHAR (data calendaristica. Pentru mai multe detalii consultaţi lucrarea: Oracle Server SQL Reference. • Este separat de data calendaristic prin virgul . formatul implicit este DD-MON-YY) TO_DATE (caracter .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ie TO_CHAR (număr|data calendaristica.

TO_CHAR (hire_date.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Observa ii: • • Modelul de format trebuie inclus intre ghilimele simple şi este case sensitive. SELECT employee_id. 2 sau 1 cifre din an O virgula în cadrul anului Descriere . Ave i posibilitatea de a redimensiona lungimea pe care se face afişarea pentru un câmp cu ajutorul comenzii SQL*Plus COLUMN.YYY 7-190 Secolul Anul Ultimele 3. Asigura i-v c valoarea este separat de modelul de formatare prin virgul . Pentru a elimina spatiile şi zerourile nesemnificative folosi i elementul pentru modul de umplere. ‘MM/YY’) Month_Hired FROM emp WHERE ename=’Higgins’. Modelul de format poate include orice element valid al modelului de formatare pentru date calendaristice. Lungimea implicit a coloanei rezultate este de 80 caractere. Pentru numele zilelor şi al lunilor se ad uga automat spatii goale la ieşire . Elementele ale modelului de formatare pentru date calendaristice YYYY YEAR MM MONTH DY DAY Anul afişat pe 4 digi i Anul în litere Luna scris cu dou cifre Numele lunii O abrevia ie a denumirii unei zile din s pt mâna format din trei litere Denumirea completa a zilei • • • • Exemple de elementele ale modelului de formatare: Element SCC sau CC YYYY sau SYYYY YYY sau YY sau Y Y.

C. lun sau s pt mân . DD “of” MONTH 12 of OCTOBER Ad uga i sufixe pentru a scrie în litere un num r .D.D. ddspth Modele de formatare pentru timp Utiliza i elementele descrise mai jos atunci când dori i s afişa i timpul într-un anumit format sau s folosi i litere în loc de cifre.3.D. sau A. Denumirea completa a zilei completat eventual cu spa ii pân la 9 caractere.[YY.[Y. O abrevia ie a denumirii unei zile formata din trei litere Num rul de zile de la data de 31 Decembrie 4713BC Elemente ce formateaz timpul HH24:MI:SS AM 15:45:32 PM Ad uga i şiruri de caractere prin închiderea acestora între ghilimele. Dac denumirea lunii nu ocup cele 9 caractere. fourteenth 7-191 . Indicatorul B. spa iul r mas liber este automat umplut cu spatii O abrevia ie a denumirii unei luni format din trei litere Luna scris cu cifre romane S pt mâna din an sau luna Ziua din an.C. sau A. Q MM MONTH MON RM WW sau W DDD sau DD sau D DAY DY J 4.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice [YYY. Sfertul unui an Luna scris cu dou cifre Numele întreg al lunii scris pe 9 caractere.C. sau A.] SYEAR sau YEAR BC sau AD B.2 sau o cifr din an conform standardului ISO Anul în litere Indicatorul B.

M.. “of the” Specifica i sufixe : Element TH SP SPTH sau THSP Descriere indicator de meridian indicator de meridian cu puncte ora minute (0-59) secunde (0-59) Num rul de secunde începând cu miezul nop ii Descriere Punctua ia este reprodus în rezultat. Şirul încadrat între ghilimele este reprodus Descriere Num r de ordine dat în cifre (de exemplu DDTH pentru 4TH) Num r scris în litere (de exemplu DDSP pentru FOUR) Num r de ordine scris în litere (de exemplu DDSPTH pentru FOURTH) Utilizarea func iei TO_CHAR împreuna cu date calendaristice SELECT last_name. 7-192 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Element AM sau PM A.M.TO_CHAR (hire_date. HH sau HH12 sau HH24 MI SS SSSSS Alte formate: Element /. sau P. ‘fmDD Month YYYY’) HIRE_DATE FROM employees.

7-193 . denumirea lunii respect modelul pentru Utilizarea func iei TO_CHAR împreuna cu valori numerice TO_CHAR (number.) Modifica i exemplul de mai sus astfel încât data calendaristic aib urm torul format: Seventh of February 1981 08:00:00 AM.TO_CHAR (hire_date. ‘fmDdspth “of” Month YYYY fmHH:MI:SS AM’) HIRE_DATE FROM employees. De remarcat este faptul c format specificat (INITCAP).( De remarcat este formatul în care se afişeaz data. ‘fmp’) Pentru a afişa o valoare numeric sub forma unui caracter utiliza i urm toarele elemente de formatare împreuna cu func ia TO_CHAR.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplul de mai sus prezint o modalitate de a afişa numele şi data angaj rii pentru fiecare angajat. sa SELECT last_name.

Elemente de formatare pentru numere Dac trebuie s converti i un num r într-o valoare de tip caracter pute i utiliza urm toarele elemente: Element 9 0 $ L .00 1.00 7-194 . Aceasta tehnic este folositoare în cadrul unei concaten ri.99 Rezultat 1234 001234 $1234 FF1234 1234.234 1234 <1234> 1. MI PR EEEE V B Descriere Pozi ie numerica (num rul cifrelor de 9 determin lungimea pe care se face afişarea) Afişeaz zerourile nesemnificative Semnul dolar Foloseşte simbolul local pentru moned Determin afişarea unui punct zecimal în pozi ia specificat . care face conversia dintre o valoare de tip NUMBER spre o valoare de tip VARCHAR2.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9 0 $ L .999EEEE 9999V99 B9999.99 999. Determin afişarea unei virgule în pozi ia specificat .234E+03 123400 1234. Determin afişarea semnului minus în partea dreapt (pentru valori negative) Închide între paranteze numerele negative NOT ie ştiin ific (formatul impune existen a a patru litere E) Înmul ire cu 10 de n ori (n = num rul de cifre de 9 de dup litera V) Înlocuieşte valorile de 0 cu blank Exemplu 999999 099999 $999999 L999999 999999. . Reprezint un num r For eaz afişarea unei cifre 0 Semnul dolar Foloseşte simbolul local pentru moned Afişeaz un punct Tip reşte un indicator pentru mii Atunci când se lucreaz cu valori numerice drept şiruri de caractere trebuie s converti i acele numere în valori de tip caracter utilizând func ia TO_CHAR.999 999999MI 999999PR 99. .

‘fxMonth DD. Exemplu: Afişa i numele şi data angaj rii pentru toate persoanele care au fost angajate pe 24.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT TO_CHAR(sal. − Punctua ia şi textul dintre apostrof trebuie sa se potriveasc exact cu modelul din clauza de formatare.1999. Func iile TO_CHAR şi TO_DATE TO_NUMBER (char) TO_DATE (char [.'$99.999') SALARY FROM emp WHERE last_name= 'Ernst'. Server-ul Oracle rotunjeşte valoarea zecimal stocat ca o valoare cu un num r de zecimale furnizat de câtre modelul de formatare. Modelul dup care se face formatarea va trebui alc tuit pe baza elementelor pentru formatare prezentate anterior.05. 1999’. ‘ fmt ’] ) Pentru a face conversia dintr-un şir de caractere într-un num r folosi i func ia TO_NUMBER. hire_date FROM employees WHERE hire_date = TO_DATE (‘May 24. Este posibil sa ap ra o situa ie în care dori i sa face i conversia dintr-un şir de caractere într-un num r sau într-o dat calendaristic . − Nu pot s fie scrise blank-uri suplimentare. YYYY’). Pentru a face conversia dintr-un şir de caractere într-o dat calendaristic folosi i func ia TO_DATE. − Datele numerice trebuie s aib acelaşi num r de caractere ca şi modelul corespunz tor din format. 7-195 . Observa ii: Server-ul Oracle afişeaz semnul (#) în locul valorii numerice a c rei num r cifre a dep şit valoarea specificat prin model. SELECT last_name. Specificatorul fx indic potrivirea perfect dintre caracterul argument şi modelul de formatare a datei. Pentru a realiza aceste tipuri de conversii utiliza i func iile TO_NUMBER şi TO_DATE.

7 Func ii diverse Func ia NVL • Converteşte o valoare nul într-o valoare efectiv .NVL (job.NVL (comm. ‘No Job Yet) 7-196 . Tabelul urm tor descrie comportamentul elementului RR. dar permite specificarea de secole diferite. Anul curent 1994 1994 2001 Data specificata 27-OCT-95 27-OCT-17 27-OCT-17 Formatul RR 1995 2017 2017 Formatul YY 1995 1917 2017 7.’01-JAN-97’) .NVL (hire_date. caracter şi num r.0) . Exist posibilitatea folosirii elementului pentru formatarea datelor RR în locul elementului YY şi astfel secolul valorii returnate variaz în func ie de cei doi digi i specifica i în an şi de ultimii doi digi i ai anului curent. • Tipurile de date care pot fi folosite sunt: dat calendaristic . . • Tipurile de date trebuie s se potriveasc .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Formatul RR pentru date calendaristice Anul curent 1995 1995 2001 2001 Data specificata Formatul RR Formatul YY Dac cele doua cifre ale anului curent sunt: 27-OCT-95 1995 1995 27-OCT-17 2017 1917 27-OCT-17 2017 2017 27-OCT-95 1995 2095 Dac cele doua cifre specificate ale anului sunt: 0-49 50-99 Data întoars se Data întoarsa se încadreaz în 0încadreaz în secolul secolul de dinaintea celui 49 curent curent 50 99 Data întoars se încadreaz în secolul de dup secolul curent Data întoars se încadreaz in secolul curent Formatul RR pentru date calendaristice este similar cu elementul YY.

‘01-JAN-95’) NVL (coloana ce con ine o valoare de tip caracter.0). valoarea spre care se face conversia Ave i posibilitatea de a utiliza func ia NVL împreun cu orice tip de dat . (Salary*12)+(salary*12*commission_pct) AN_SAL FROM employees.‘Unavariable’) SELECT last_name. expr2) unde:expr1 este valoarea sau expresia surs care ar putea s con in o valoare nul . Pentru a calcula compensa ia anual pentru to i angaja ii. salary. expr2 este valoarea int . (Salary*12)+(salary*12+NVL (commission_pct.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Sintaxa NVL (expr1. dar tipul valorii întoarse este de fiecare dat la fel cu tipul parametrului expr1. 9) NVL (coloana ce con ine o valoare de tip dat calendaristic . trebuie s înmul i i salariul lunar cu 12 şi apoi sa ad uga i comisionul. NVL(commission_pct. Conversii NVL pentru diferite tipuri de date Tip de data NUMBER DATE CHAR sau VARCHAR2 Exemplul de conversie NVL (coloana ce con ine o valoare de tip numeric.0).0)) AN_SAL FROM employees. 7-197 . salary. SELECT last_name. NVL(commission_pct.

Func ia NVL2 Sintaxa unde: NVL (expr1.80). expr2 este valoarea returnat dac expr1 nu este null. • Dac prima expresie nu este null atunci func ia întoarce cea de a doua expresie. SELECT first_name. 7-198 . O solu ie corect pentru o astfel de problem este prezentat în exemplul precedent celui luat în discu ie. NVL2(commission_pct.’SAL’) income FROM employees WHERE department_id IN (50. Dac se întâlneşte pe coloana o valoare nul atunci rezultatul este nul.expr3) expr1 este valoarea sau expresia surs care ar putea sa con in o valoare nul . salary. ’SAL+COMM’. Pentru a calcula valorile pentru to i angaja ii trebuie s converti i valorile nule în valori numerice înainte de a aplica operatorul aritmetic. exemplul în care pentru conversia valorilor nule s-a folosit func ia NVL. Func ia NVL2 examineaz prima expresie. expr3 este valoarea returnat dac expr1 este null. expr2. commission_pct. • Dac prima expresie este null atunci func ia întoarce cea de a treia expresie.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Din exemplul precedent se poate remarca faptul c compensa ia anual se calculeaz doar pentru acei angaja i care au o valoare pentru comision nenul .

7-199 . Argumentele doi şi trei pot fi de orice tip în afar de LONG. Dac este sesizat o valoare. last_name. În cest caz nu este necesar o conversie de dat . NULLIF (LENGTH(first_name). Sintaxa NULLIF (expr1. func ia returneaz null. altfel se returneaz lungimea dat de first_name. Tipul de dat al expresiei returnate este acelaşi cu al argumentului doi numai dac argumentul doi este de tip caracter. SELECT first_name. Dac tipurile de dat pentru argumentele doi şi trei sunt diferite. expr2. func ia returneaz prima expresie. Primul argument poate avea orice tip de dat . Oracle converteşte automat tipul de dat al argumentului trei la cel de inut de argumentul doi înainte de a face compara ia. Dac ele sunt egale. dac nu. numai dac argumentul trei nu este null. În cazul în care acestea sunt egale se returneaz null. LENGTH(last_name)) result FROM employees. LENGTH(last_name) “expr2”. Nu se poate specifica literalul null pentru prima expresie. Func ia NULLIF Func ia NULLIF compar dou expresii. se returneaz expresia SAL+COMM iar dac comisionul este null se returneaz doar salariul. caz în care tipul de dat returnat este varchar2.) unde: expr1 este valoarea sau expresia surs care se compar cu expr2 expr2 este valoarea sau expresia surs care se compar cu expr1 În exemplu se compar lungimea numelui cu lungimea prenumelui pentru fiecare angajat. LENGTH(first_name) “expr1”.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice În exemplul de mai sus este analizat comisionul.

salary. expr2. 10) comm FROM employees ORDER BY commission_pct.. COALESCE(commission_pct. Func ia COALESCE întoarce prima expresie ce nu este null din list . exprn) unde : expr1 este întoarsa de func ie dac expr1 nu are valoarea null expr2 este întoarsa de func ie dac expr1 are valoarea null şi expr2 nu are valoarea null exprn este întoarsa de func ie dac precedentele expresii nu au valoarea null SELECT last_name..Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ia NULLIF are ca echivalent logic expresia de tip CASE.. func ia are ca rezultat aceast expresie altfel. SINTAXA COALESCE (expr1. Daca prima expresie nu este null. ea uneşte celelalte expresii. CASE WHEN expr1=expr2 THEN NULL ELSE expr1 END Folosirea func iei COALESCE Avantajul folosirii func iei COALESCE în locul folosirii func iei NVL este faptul c func ia COALESCE poate lua mai multe valori alternative. 7-200 .

Pentru celelalte func ii salariul r mâne neschimbat. Dac nici una din perechile WHEN… THEN nu îndeplinesc condi iile şi exist o clauz ELSE atunci Oracle întoarce else_expr. În exemplul de mai sus m rirea de salariu se aplic diferen iat pentru anumite categorii de func ii şi anume: programatorilor cu 10%. SELECT last_name. 7-201 .10*salary WHEN ’ST_CLERK’ THEN 1.20*salary ELSE salary END Revised_salary FROM employees .15*salary WHEN ’SA_REP’ THEN 1. CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_expr THEN return_expr ELSE else_expr] END unde: expr1 este valoarea sau expresia sursa care se compar cu expr2 expr2 este valoarea sau expresia sursa care se compar cu expr1 Într-o expresie simpl de tip CASE serverul verific dac prima condi ie de tip WHEN …THEN este egal cu comparison_expr şi întoarce return_expr. CASE job_id WHEN ’IT_PROG’ THEN 1. job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Expresia CASE Expresia de tip CASE ofer facilit ile date de o structur de tip IF THEN ELSE. Literalul NULL nu poate fi specificat în return_expr şi else_expr.salary. Altfel Oracle întoarce null. Toate expresiile trebuie s fie de acelaşi tip de dat . func ionarilor cu 15% iar vânz torilor cu 20%.

] [. salary. search1. DECODE(job_id. Dac valoarea default (implicit ) este omis .1.. search2. 'IT_PROG'. salary*1. 'SA_REP'.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ia DECODE Faciliteaz simularea unor structuri de tip CASE sau IF-THEN-ELSE DECODE(col/expression. Dac valoarea expresiei este identic cu valoarea con inut în search atunci este întoars valoarea result . salary *1. SALARY)REVISED_SALARY FROM employees. result2.15. default]) Func ia DECODE evalueaz o expresie într-un mod similar structurii IFTHEN-ELSE. 7-202 . result1 [.. structur folosit în multe limbaje de programare. salary *1. Func ia DECODE evalueaz expresia dup ce o compar cu fiecare valoare search.20.. 'ST_CLERK'.. SELECT job_id. func ia va întoarce o valoare nul în cazul în care valoarea expresiei nu este identic cu nici o valoare search.

SELECT last_name. .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice În exemplul de mai sus valoarea evaluat este JOB_ID. Dac JOB_ID este IT_PROG. sporul de salar este de 20%.20 ELSE salary = salary 7.Pentru celelalte func ii salariile nu se modific .1 IF job_id = ‘ST_CLERK’ THEN salary = salary * 1. NVL(TO_CHAR(manager_id).15 IF job_id = ‘SA_REP’ THEN salary = salary * 1. Evaluarea lor se face din centrul expresiei imbricate spre exteriorul acesteia.'No Manager') FROM employees WHERE manager_id IS NULL. ‘No Manager’) Denumirea coloanei este data de întreaga expresie din moment ce nu este specificat nici un alias pentru acea coloan . Evaluarea func iilor imbricate începe de la nivelul cel mai adânc. 7-203 . sporul de salar este de 15% iar dac JOB_ID este SA_REP.Rezultat1=TO_CHAR (mgr) • Evaluarea func iei din exterior care înlocuieşte valorile nule cu un text – NVL (Rezultat1.8 • • Imbricarea func iilor Func iile de un singur rând se pot imbrica de câte ori dorim. sporul de salar este de 10%. Func iile de un singur rând se pot imbrica de câte ori dorim. Exemplul de mai sus afişeaz acele persoane care nu au superior. Evaluarea instruc iunii SQL se realizeaz în doi paşi. Dac JOB_ID este ST_CLERK. Aceeaşi structura scris cu IF-THEN-ELSE are urm toarea form : IF job_id = ‘IT_PROG’ THEN salary = salary * 1. Exemplele care urmeaz va vor demonstra flexibilitatea acestor func ii. • Evaluarea func iei din interior ce face conversia dintr-o valoare numeric în una de tip caracter.

Modifica i programul salvat în fişierul p3q2. Scrie i o interogare care sa afişeze data curent . A sau M. Denumi i coloana Creştere. 8. Denumi i coloana SALARIU. Ordona i rezultatul dup num rul de luni de lucru. introduce i “No commission”. Afişa i marca. Pentru fiecare angajat afişa i numele şi calcula i num rul de luni între data de ast zi şi data angaj rii. Denumi i coloana LUNI_DE_ACTIVITATE.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 7.9 Exerciţii 1. Interogarea se face doar pentru angaja ii a c ror nume începe cu una din literele: J.sql. data angaj rii. Afişa i numele. Rula i programul salvat anterior. 10. data când se recalculeaz salariul. Denumi i coloana Salariul de vis. Afişa i valoarea salariului pe 15 caractere aliniat la dreapta iar spa iul r mas la stânga sa fie umplut cu caracterul $. 2. salariul şi salariu m rit cu 15% exprimat ca num r întreg. Exemplu: KING câştiga $5000 lunar dar ar dori $15000. Denumi i coloana REVIEW. Salva i instruc iunea într-un fişier numit p3q2. Denumi i coloana ZI. Denumi i coloana COMM.Scrie i o interogare care sa afişeze numele angajatului şi valoarea comisionului. Scrie i o interogare care sa produc urm torul afişaj pentru fiecare angajat: <nume angajat> câştig <salariu> lunar dar ar dori <3 * salariu>. data angaj rii şi ziua din s pt mâna în care angajatul a început lucrul. 1981 6. 5. 4. numele. 3. 11. Denumi i ultima coloana Salar Nou. care este prima luni dup 6 luni de servici. Dac angaja ii nu ob in comision. Formata i afişarea datei astfel încât s arate similar cu exemplul de mai jos: Sunday. 7. Scrie i o interogare care s afişeze numele şi salariul pentru to i angaja ii. the Seventh of September. Rotunji i num rul de luni. 7-204 . Ordona i rezultatul dup câmpurile coloanei ZI începând cu Monday (Luni). Afişa i numele angajatului. Rula i noul program. 9.sql astfel încât acesta s adauge o coloana în care ve i trece diferen a dintre salariul nou şi cel vechi. Scrie i o interogare care sa afişeze numele angajatului (cu litere mici cu excep ia primei litere care se va scrie cu liter mare) şi lungimea numelui. Denumi i coloana Date.

• Employee_ID exist in tabelul EMPLOYEES • Department_ID exist în ambele tabele EMPLOYEES şi DEPARTMENTS • Location_ID exist în tabelul DEPARTMENTS Pentru a se ajunge la rezultatul final tabelele EMPLOYEES şi DEPARTMENTS trebuiesc legate astfel încât accesarea datelor sa se fac din ambele tabele.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 8 Afişarea datelor din tabele multiple Obiective: • • • Scrierea expresiilor SELECT pentru a accesa date din mai multe tabele folosind leg turi (join-uri) de egalitate şi inegalitate. 8-205 . Vizualizarea datelor care în general nu se acceseaz printr-o condi ie join simpl ci folosind join-uri exterioare: Efectuarea unui join a unui tabel cu el însuşi. În exemplul de mai sus rezultatul afişeaz date din dou tabele: EMPLOYEES şi DEPARTMENTS. Câteodat este necesar afişarea datelor ce provin din mai multe tabele.

Pentru a al tura n tabele împreun este nevoie de minim n-1 condi ii de join. table2 WHERE table1.o condi ie join este omis . coloane chei primare şi chei str ine.column1 = table2.column FROM table1. pentru a al tura 4 tabele.specifica tabelul şi coloana de unde este extras data table1.1 Definirea JOIN-urilor În vederea afiş rii de date ce provin din mai multe tabele ale bazei de date se foloseşte o condi ie de join.este condi ia care al tura (leag ) tabelele împreun • Condi ia de JOIN se scrie în clauza WHERE.column. Aşadar. Aceast regul s-ar putea s nu se aplice dac tabelul are o cheie primar concatenat fiind astfel necesare mai multe coloane pentru a identifica in mod unic fiecare linie.column2 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 8. table2. SELECT table1. sunt necesare 3 condi ii de join.o condi ie join este invalid . Observa ii: • • • La scrierea unei expresii SELECT care leag tabele preceda i numele coloanei cu numele tabelului pentru claritate şi pentru a mari viteza de acces la baza de date. Produsul Cartezian Un produs cartezian se formeaz atunci când: .column1= table2. • Numele coloanei se prefixeaz cu numele tabelului când acelaşi nume de coloan apare în mai mult de un tabel. Unde : table. . 8-206 8.column2.column . Daca acelaşi nume de coloan apare în mai multe tabele numele coloanei trebuie prefixat cu numele tabelului.toate liniile din primul tabel sunt al turate la liniile din tabelul al doilea. Pentru a afişa date din dou sau mai multe tabele aflate în rela ie se scrie o condi ie simpl de tip join în clauza WHERE. . care sunt de obicei. Liniile dintr-un tabel pot fi al turate liniilor din alt tabel conform cu valorile comune existente în coloanele corespondente.2 .

Când o condi ie join este invalid sau este complet omis . Deoarece nu a fost specificat nici o condi ie de join în clauza WHERE. Un produs cartezian este generat dac o condi ie join este omis . department_name FROM employees. departments. Un produs cartezian tinde s genereze un num r mare de linii şi rezultatul sau este rar folositor. 8-207 . generând astfel un tabel de ieşire ce are 160 de rânduri.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Pentru a evita un produs cartezian trebuie s include i întotdeauna într-o clauza WHERE o condi ie de join valid . rezultatul este un produs cartezian în care vor fi afişate toate combina iile de linii. adic toate liniile din primul tabel sunt al turate la toate liniile din cel de-al doilea tabel. Întotdeauna într-o clauza WHERE trebuie inclus o condi ie de join valid . cu excep ia cazului când se doreşte în mod explicit combinarea tuturor liniilor din tabele. toate liniile din tabelul EMPLOYEES sunt al turate tuturor liniilor din tabelul DEPARTMENTS. Exemplu de generare a unui produs cartezian: SELECT last_name. Exemplul al turat afişeaz numele angajatului şi numele departamentului din tabelele EMPLOYEES şi DEPARTMENTS.

Rela ia dintre tabelele EMPLOYEES şi DEPARTMENTS este un echijoin. ECHIJOIN -urile sunt adesea numite şi simple join sau inner join. Înainte de 9i sintaxa pentru join era diferit de cea cerut de standardele ANSI.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tipuri de Join-uri Join –uri specifice Oracle (8i şi versiuni anterioare) Join-uri conforme cu SQL: 1999 Equijoin Non-equijoin Outer join Self join Cross Join Natural Join Using Clause Full or two-sided outer join Arbitrary join conditions for outer join Oracle 9i pune la dispozi ie sintaxa pentru tipuri de join care se conformeaz cu standardul SQL 1999. aceasta însemnând c valorile din coloana DEPARTMENT_ID din ambele tabele trebuie s fie egale. 8-208 . Acest tip de join-uri implic frecvent existen a cheilor primare şi str ine.3 Echi-join Pentru a determina numele departamentului în care lucreaz un angajat trebuiesc comparate valorile din coloana DEPARTMENT_ID din tabelul EMPLOYEES cu valorile din coloana DEPARTMENT_ID din tabelul DEPARTMENTS. Noua sintax conform cu SQL 1999 nu ofer beneficii majore în performan a join-urilor fa de cele scrise în sintaxa specific Oracle înainte de 9i. 8.

department_id. departments. num rul angajatului şi num rul departamentului care sunt coloane in tabelul EMPLOYEES. pentru a afişa marca angajatului Matos.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Extragerea înregistr rilor cu Echijoin-uri SELECT employees.department_id=departments.department_id. departments WHERE employees.numele angajatului. În exemplul de mai sus: • Clauza SELECT specific numele de coloane de extras .num rul departamentului.department_id. 8-209 . De exemplu. num rul departamentului şi loca ia departamentului. employees.location_id FROM employees. este nevoie de o condi ie suplimentar în clauza WHERE. Deoarece coloana DEPARTMENTS_ID este comun tabelelor ea trebuie prefixat cu numele tabelului pentru a evita ambiguitatea. departments.last_name. numele. numele departamentului şi loca ia sunt coloane în tabelul DEPARTMENTS. . Condi ii de c utare adi ionale folosind operatorul AND În plus fa de condi ia de join se pot folosi criterii adi ionale pentru clauza WHERE. employees.employee_id. •Clauza FROM specific cele 2 tabele din baza de date ce trebuiesc accesate: tabelul EMPLOYEES şi tabelul DEPARTMENTS • Clauza WHERE specific felul in care tabelele vor fi al turate.

departments WHERE employees.location_id FROM employees. Calificarea numelor de coloane ambigui • • • Folosi i prefixele tabelelor pentru a califica numele coloanelor ce sunt comune mai multor tabele. un alias de tabel îi d acestuia alt nume. Aliasurile de tabel ajut la scrierea unei linii de cod SQL mai scurte şi astfel memoria este mai pu in folosit . Distinge i coloanele care au nume identice în tabele diferite prin folosirea aliasurilor de coloane. Folosirea de aliasuri pentru tabele Folosind aliasurile de tabele se simplific scrierea interog rilor. Pentru a evita ambiguitatea trebuie s califica i numele coloanelor în clauza WHERE cu numele tabelului. interogarea va fi mai performant prin folosirea prefixului de tabel deoarece serverului Oracle i se specific exact de unde s extrag coloanele.department_id AND Last_name=’Matos’. Cererile de calificare a numelor de coloane ambigui sunt de asemenea aplicabile la coloanele care pot fi ambigui în alte clauze cum ar fi SELECT sau ORDER BY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT employees.department_id=departments. Se pot folosi aliasuri de tabele în locul numelor tabelelor. Prefixarea numelor coloanelor cu numele tabelului poate consuma mult timp. employees. mai ales dac numele tabelului este lung. Daca cele dou tabele nu au nume de coloane comune nu este necesar calificarea coloanelor. departments. 8-210 . Aşa cum un alias de coloan da unei coloane un alt nume. Îmbun t i i performanta prin folosirea prefixelor de tabele. Oricum. În exemplu. coloana DEPARTMENTS_ID ar putea fi din tabela DEPARTMENTS sau din tabela EMPLOYEES şi de aceea este necesar ad ugarea prefixului de tabel pentru a executa interogarea.last_name.employee_id.

department_id.employee_id. De exemplu. departments d WHERE e. numele tabelului este specificat în întregime fiind urmat de un spa iu şi apoi de alias. DEPARTMENTS şi LOCATIONS. atunci acel alias de tabel trebuie sa fie substituitentul pentru numele tabelului pe tot cuprinsul expresiei SELECT.location_id FROM employees e.department_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT e. Observa ii: • • • Aliasurile de tabel pot avea pana la 30 caractere lungime. • JOIN ce foloseşte mai mult de 2 tabele Uneori trebuiesc al turate (join) mai mult de dou tabele. e. cu atât mai bine. d. Tabelului EMPLOYEES i-a fost dat aliasul E. dar cu cât sunt mai scurte. pentru a afişa numele.department_id.last_name. Daca aliasul unui tabel este folosit pentru un nume de tabel particular în clauza FROM. Aliasurile de tabel trebuie s aib sens. d. iar tabelului DEPARTMENTS aliasul D. 8-211 . în clauza FROM. e. numele departamentului şi oraşul pentru fiecare angajat trebuie efectuat un join între tabelele EMPLOYEES.department_id=d. Aliasul de tabel este valid numai pentru SELECT-ul curent. În exemplul de mai sus.

city FROM employees e.last_name.n-1’.department_id and d. d. 8.location_id.department_id=d.4 Non-echi-join JOB_GRADES Salary 24000 17000 17000 9000 8000 5800 Grade A B C D E F Lowest_sal 1000 3000 6000 10000 15000 25000 Highest_sal 2999 5999 9999 14999 24999 40000 EMPLOYEES Last_Name King Kochhar De Haan Hunold Ernst Mourgos salarul din tabelul EMPLOYEES este cuprins între salarul minim şi maxim din tabelul JOB_GRADES 8-212 .department_id.department_id.employee_id. num rul condi iilor de join din clauza WHERE trebuie sa fie .location_id=l. e. d. departments d.location_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT e. dac num rul tabelelor este ‚n’. l. e. De exemplu. Observa ie: Întotdeauna num rul de condi ii de join scrise în clauza WHERE trebuie sa fie cu unu mai mic decât num rul de tabele scrise în clauza FROM. locations l WHERE e.

Nicio linie din tabelul cu gradele salariale nu con ine trepte salariale suprapuse (cu valorile pentru alte trepte salariale).salary between j.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Rela ia dintre tabelele EMPLOYEES şi JOB_GRADE este de tip nonechijoin. Astfel. Rela ia (leg tura) se ob ine folosind un operator. altul decât egal (=). 8-213 . Niciun angajat nu este repetat în list şi acest lucru are la baz dou motive: .last_name. valoarea salariului unui angajat poate oscila numai între salariul minim şi maxim din una din liniile tabelului ce con ine treptele salariale. Extragerea inregistrarilor cu Non-echijoin-uri SELECT e. Astfel. j. Salarul trebuie sa fie intre orice pereche "cel mai mic"-"cel mai mare" a intervalelor salariale. nici un angajat nu câştiga mai pu in decât cea mai mic valoare din coloana LOWEST_SAL sau mai mult decât cea mai mare valoare con inut în coloana HIGHEST_SAL. .highest_sal. e.Toate salariile angaja ilor sunt încadrate între limitele date de treptele salariale.salary. adic nicio coloan din tabelul EMPLOYEES nu corespunde direct unei coloane din tabelul JOB_GRADE.lowest_sal and j. Exemplul de sus creeaz un non-echijoin pentru a evalua gradul salarului unui angajat. Rela ia dintre cele dou tabele este astfel: valorile din coloana SAL din EMPLOYEES sunt cuprinse între valorile din coloanele LOWEST_SAL şi HIGHEST_SAL din tabelul JOB_GRADE. job_grades j WHERE e.grade_level FROM employees e. Este important de remarcat c to i angaja ii apar doar odat atunci când aceast interogare este executat .

8. Aliasurile de tabele au fost specificate din motive de performan şi nu datorit unei posibile ambiguit i. Dac o linie (înregistrare) nu satisface condi ia de join.department_id = d. e. d. table2.column(+) = table2.column. Când se foloseşte BETWEEN trebuie specificat mai întâi valoarea minim şi apoi valoarea maxim . cum ar fi <= şi >=.department_name FROM employees e.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Observa ie: Se pot folosi şi al i operatori. acea linie nu va ap rea în rezultatul interog rii.department_id. în condi ia de echijoin a tabelelor EMPLOYEES şi DEPARTMENTS. De exemplu. table2 WHERE table1.column. 8-214 .column FROM table1. departamentul OPERATIONS nu va ap rea pentru c nu lucreaz nimeni în acel departament. SELECT table1. dar este mai simplu de folosit BETWEEN.department_id.5 Outer-join Nici un angajat in departamentul 190 Returnarea înregistr rilor cu NoDirectMatch (Potrivire Indirect ) cu Joinuri externe.last_name. departments d WHERE e. SELECT e.

Plasa i simbolul join extern dup numele coloanei din tabelul deficitar în informa ii.last_name. table2 WHERE table1. table2 WHERE table1. 8-215 . dar nu în ambele par i deodat .column(+) este simbolul pentru join extern. e. În sintax : table1. SELECT table1.department_id(+) = d.column = table2. pentru fiecare linie din tabelul non-deficient. poate fi plasat în oricare parte a condi iei din clauza WHERE.column. Folosi i un join extern pentru a vedea liniile care nu îndeplinesc condi ia de join. table2. Operatorul este un semn "plus" scris între paranteze (+) care este plasat lâng tabelul ce prezint un deficit de informa ie. d.department_name FROM employees e.column.column FROM table1.department_id. Operatorul join extern este semnul plus (+).column FROM table1. table2.column(+) = table2. Linia (liniile) lips pot fi returnate dac este folosit un join extern în condi ia de join.column. departments d WHERE e. SELECT e. table2.column(+).column = este condi ia de join a tabelelor.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT table1. Acest operator are efectul cre rii a unei sau mai multe linii goale (nule).department_id.

O condi ie implicat într-un join extern nu poate folosi operatorul IN sau nu poate fi legat la o alta condi ie prin operatorul OR. Departamentul Contracting.Operatorul join extern poate s apar numai într-o singur parte a unei expresii şi anume în partea deficitar în informa ii. De exemplu. Num rul angajatului Kochhar este 101 deci Kochhar este managerul lui Whalen. Num rul managerului lui Whalen este 101. pentru a g si numele fiec rui angajat pentru un manager este necesar un self-join pe tabela EMPLOYEES. 8. care nu are nici un angajat este de asemenea afişat. pentru a g si numele managerului lui Whalen este nevoie s : o Îl g si i pe Whalen în tabelul EMPLOYEES uitându-va în coloana Last_name. 8-216 . Restric ii la Join extern . . o G si i num rul managerului pentru Whalen uitându-va în coloana Manager_ID.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplul afişeaz numele angajatului. El returneaz acele linii din tabel care nu au corespondent direct în celalalt tabel. De exemplu.6 Self – Join Uneori este necesar al turarea (join) unui tabel cu el însuşi. num rul şi numele pentru toate departamentele. o G si i numele managerului cu EMPLOYEE_ID egal cu 101 uitându-v în coloana LAST_NAME.

Exemplul de mai sus al tur tabela EMPLOYEES cu ea îns şi. employees manager WHERE worker. SELECT worker.employee_id. Pentru a simula cele doua tabele în clauze FROM se folosesc dou aliasuri. În acest exemplu clauza WHERE con ine join-ul care înseamn "unde num rul managerului pentru un subaltern este identic cu num rul angajatului pentru acel manager". 8-217 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice "MGR din tabelul WORKER este egal cu EMPNO din tabelul MANAGER" În acest proces c utarea în tabel se execut de dou ori. EMPLOYEES. numite WORKER şi MANAGER.manager_id = manager. pentru acelaşi tabel.last_name || ' works for '|| manager. A doua oar se caut în coloana EMPLOYEE_ID pentru a g si valoarea 101 pentru care în coloana Last_name se valoarea este Kochhar. Prima dat se caut în tabel angajatul Whalen în coloana Last_name şi g seşte valoarea pentru Manager_ID care este egal cu 101.last_name FROM employees worker.

table2.tabelul şi coloana de unde se extrag datele. SELECT last_name.column_name = table2.face un join pe cele dou tabele pe baza unei coloane comune.column_name execut un echi-join bazat pe coloana specificat .column_name . Crearea Cross Joins Folosirea clauzei CROSS JOIN duce la apari ia unui produs cartezian a datelor din dou tabele. CROSS JOIN .column_name)] | [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.7 Definirea join-urilor folosind sintaxa SQL 1999 SELECT table1. NATURAL JOIN .returneaz produsul cartezian a celor dou tabele.execut un join bazat pe condi ia specificat în clauza ON.column FROM table1 [CROSS JOIN table2] | [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON (table1.column_name)].column.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 8.column_name = table2. Exemplul de mai sus duce la acelaşi rezultat dat de exemplul urm tor: 8-218 . JOIN table ON table1. department_name FROM employees CROSS JOIN departments.column_name = table2. În sintax : table1.column . JOIN table USING .

department_name. department_name. Dac ar fi fost şi alte coloane care sa aib acelaşi nume în ambele tabele ar fi fost folosite şi acestea. Natural Joins cu clauza WHERE Folosind clauza WHERE se pot impune restric ii suplimentare în folosirea unui natural join. Crearea Natural Joins Clauza NATURAL JOIN are la baz toate coloanele din cele dou tabele ce au acelaşi nume. Dac coloanele ce au acelaşi nume au tipuri diferite de date apare o eroare. 50).location_id = locations. location_id. department_name FROM employees. SELECT department_id. Exemplul de mai jos limiteaz rândurile afişate la cele ce corespund condi iei ca department_ ID s fie 20 sau 50. La execu ie se selecteaz rândurile din cele dou tabele ce au valori egale în toatele coloanele comune. În exemplu tabela LOCATIONS este al turata tabelei DEPARTMENT prin coloana comun LOCATION_ID care este singura coloana ce are acelaşi nume în ambele tabele. locations WHERE departments. location_id.location_id. city FROM departments NATURAL JOIN locations WHERE department_id IN (20. Începând cu aceast versiune este posibil ca join-ul s se execute complet automat folosind cuvintele cheie NATURAL JOIN care permit executarea join-ului pe baza coloanelor celor doua tabele ce au acelaşi nume şi acelaşi tip de dat .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT last_name. city FROM departments NATURAL JOIN locations. În versiunile Oracle premerg toare Oracle9i nu se putea face un join f r a specifica coloanele pe care s se execute join-ul. SELECT department_id. city FROM departments.location_id. departments. department_name. 8-219 . Equijoins Natural join poate fi scris şi ca un equijoin: SELECT department_id. departments.

nu trebuie s folosi i numele tabelei sau aliasul.city. oriunde în instruc iunea SQL. d. clauza NATURAL JOIN poate fi modificat prin folosirea clauzei USING pentru a specifica coloanele ce trebuie folosite in equijoin. ORA-25154: column part of USING clause cannot have qualifier 8-220 . Notă: • • Când referi i coloana.location_id = 1400. d.department_name FROM locations l JOIN departments d USING (location_id) WHERE d. Clauzele NATURAL JOIN şi USING sunt mutual exclusive De exemplu urm toarea instruc iune este valid SELECT l.department_name FROM locations l JOIN departments d USING (location_id) WHERE location_id = 1400. Urm toarea instruc iune este invalid deoarece coloana LOCATION_ID este calificat în clauza WHERE: SELECT l.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Crearea de Joins folosind clauza USING Dac anumite coloane din tabele diferite au acelaşi nume dar nu au acelaşi tip de dat .city.

Pentru a specifica condi ii arbitrare sau coloanele pe care se face join-ul se foloseşte clauza ON.department_id. d.department_id. departments WHERE employees.location_id FROM employees e JOIN departments d USING (department_id).department_id.location_id FROM employees e JOIN departments d ON (e. e. SELECT e. d.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Aceeaşi restric ie se aplica şi la NATURAL JOIN.employee_id. SELECT e.department_id. Acest lucru poate fi scris şi ca un equijoin: SELECT employee_id. Crearea de Joins folosind clauza ON Condi ia de join pentru un natural join este de fapt un equijoin al tuturor coloanelor ce au acelaşi nume. Clauza ON separ condi ia de join de alte condi ii de c utare şi face codul mai uşor de în eles. employees. d. last_name. Aşadar coloanele ce au acelaşi nume în ambele tabele trebuie s fie scrise f r calificatori.department_id = departments. location_id FROM employees. În exemplu se face un join pe coloana DEPARTMENT_ID între tabela EMPLOYEES şi tabela DEPARTMENTS pentru a se afişa loca ia unde lucreaz un angajat.last_name.last_name.employee_id. e. Clauza ON poate fi deasemeni folosit pentru a al tura coloane ce nu au acelaşi nume.department_id = d.department_id). e. 8-221 .

location_id = l.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT e. Prima condi ie de join poate referen ia coloanele din EMPLOYEES şi DEPARTMENTS dar nu poate referen ia coloane din LOCATIONS. Exemplul de mai sus este de fapt un self join pe tabela EMPLOYEES bazat pe leg tura dintre coloanele EMPLOYEE_ID şi MANAGER_ID.employee_id).department_id = e. În sintaxa conforma cu SQL: 1999 join-urile sunt executate de la stânga la dreapta.last_name emp. deci primul join executat este cel dintre EMPLOYEES şi DEPARTMENTS. 8-222 . city.location_id. m. A doua condi ie de join poate referen ia coloane din toate cele trei tabele Acest lucru poate fi scris ca un echijoin pe trei tabele. Un join de tip three-way join este un join bazat pe trei tabele. department_name FROM employees e JOIN departments d ON d.last_name mgr FROM employees e JOIN employees m ON (e.department_id JOIN locations l ON d.manager_id = m. Crearea de Three-Way Joins prin folosirea clauzei ON SELECT employee_id.

department_id AND departments.department_id = departments. LEFT OUTER JOIN SELECT e.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.location_id = locations. city.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT employee_id.location_id. • Un join între doua tabele ce returneaz atât rezultatul unui inner join cât şi rezultatul unui left join şi right join este un full outer join. departments. INNER versus OUTER Joins • În SQL: 1999. e.department_id. department_name FROM employees. • Un join între dou tabele ce returneaz atât rezultatele unui inner join cât şi rândurile ce nu se potrivesc cu tabela din stânga (sau dreapta ) este un outer join la stânga (sau dreapta).department_id = d. join-ul dintre dou tabele ce returneaz doar un singur rând comun este un inner join. d.last_name. 8-223 . locations WHERE employees.department_id).

department_id (+) = e.department_id.last_name.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e. care este tabela din dreapta. RIGHT OUTER JOIN SELECT e.department_id. departments d WHERE d.department_id).department_id (+).department_name FROM employees e. Acest exemplu afişeaz toate rândurile din tabela DEPARTMENTS. e. chiar dac nu este nici o „potrivire” cu tabela EMPLOYEES. d. 8-224 .department_name FROM employees e.department_id = d. departments d WHERE d.last_name. Aceast interogare se poate scrie şi astfel : SELECT e. Aceast interogare se poate scrie şi astfel : SELECT e. care este tabele din stânga.department_id.department_id = e.d. chiar dac nu este nici o „potrivire” în tabela DEPARTMENTS.last_name.department_id. e. d.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Acest exemplu afişeaz toate rândurile din tabela EMPLOYEES. e.

location_id FROM employees e JOIN departments d ON (e. Se pot adaug în clauza WHERE condi ii suplimentare aşa cum se arat în exemplul anterior.department_id. 8-225 .department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice FULL OUTER JOIN SELECT e. Aceast interogare afişeaz toate rândurile din tabela EMPLOYEES chiar dac nu exist nici o coresponden cu datele din tabela DEPARTMENTS Deasemeni sunt afişate toate rândurile din tabela DEPARTMENTS chiar dac nu exist nici o corela ie cu datele din tabela EMPLOYEES. d.employee_id.last_name. e. d.department_id.department_id) AND e.department_id.last_name. Condi ii suplimentare SELECT e. e.department_id = d. d. e. Datele rezultate în urma join-ului dintre tabelele EMPLOYEES şi DEPARTMENTS sunt restric ionate de condi ia impus şi anume valoare coloanei manager_ID din tabela employees sa fie egala cu 149.manager_id = 149.department_id = .

Salva i tabelul SQL într-un fişier numit p4q4. 8-226 . 3. 2. Afişa i numele angajatului şi numele departamentului pentru to i angaja ii care au un „a” in numele lor.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 8. loca ia şi oraşul tuturor angaja ilor care câştiga un comision. Scrie i o interogare care sa afişeze numele.sql. Include i şi loca ia pentru departamentul 90. numele departamentului. Scrie i o interogare care afişeaz numele angajatului. 4.8 Exerciţii 1. Scrie i o interogare care s afişeze meseriile distincte (jobs) şi numele departamentului pentru to i angaja ii din departamentul 30. num rul departamentului şi numele departamentului pentru to i angaja ii.

Emp#. Afişa i numele şi marca angajatului împreuna cu numele şi marca managerului acestuia. Manager. Salva i interogarea SQL într-un fişier numit p4q6. meseria. 8-227 . 5. Eticheta i coloanele Employee. Mgr#. num rul departamentului şi numele departamentului pentru to i angaja ii care lucreaz in Toronto.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 4. Scrie i o interogare care afişeaz numele.sql.

sql pentru a afişa to i angaja ii incluzând pe King care nu are manager. num rul departamentului şi to i angaja ii care lucreaz în acelaşi departament (colegii lui). Denumi i ultima coloan Coleg. numele departamentului. 7. 8-228 . salariul şi treapta de salarizare pentru to i angaja ii. 8. Ave i grija ca în interogare s nu apar un angajat coleg cu el însuşi. Crea i o interogare care va afişa pentru to i angaja ii numele angajatului. Crea i o interogare care va afişa numele. Modifica i p4q6. Afişa i structura tabelului JOB_GRADEs. meseria.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 6.

Eticheta i coloanele Employee. 8-229 . respectiv Emp. Manager. pentru to i cei care au fost angaja i înaintea managerilor lor. 10. şi Mgr Hiredate. Hiredate. Afişa i toate numele angaja ilor şi data angaj rii împreun cu numele managerilor şi data lor de angajare.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9. Crea i o interogare care afişeaz numele şi data angaj rii pentru lucr torii angaja i dup data de angajare a lui Davies.

EMPLOYEE_AND_THEIR_SALARIES KING ************************************************* FORD ******************************** SCOTT ******************************** JONES ******************************* BLAKE ****************************** CLARK ************************* ALLEN **************** TURNER *************** MILLER ************* MARTIN ************ WARD ************ ADAMS *********** JAMES ******** SMITH ******* 14 rows selected. Crea i o interogare care afişeaz numele angaja ilor şi salariile indicate prin asteriscuri. 8-230 . Fiecare asterisc înseamn 100 $. Sorta i datele în ordinea descendent a salariilor. Eticheta i coloana EMPLOYEE_AND_THEIR_SALARIES.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11.

Spre deosebire de func iile de un singur rând. • Descrierea folosirii func iilor de grup. 9. Func iile de grup sunt urm toarele : • AVG • COUNT • MAX • MIN • STDDEV • SUM • VARIANCE Fiecare din func ii accept /primeşte un argument. Urm torul tabel identific op iunile pe care le pute i folosi în sintax . • Gruparea datelor folosind clauza Group By. 9-231 . Aceste seturi pot fi întregul tabel sau tabelul împ r it la rândul lui în grupuri. func iile de grup opereaz pe seturi de rânduri pentru a da un singur rezultat unui grup. • Includerea sau excluderea liniilor grupate folosind clauza HAVING .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 9 Folosirea func iilor de grup Obiective: • Identificarea func iilor de grup disponibile.1 Ce sunt func iile de GRUP ? Func iile de grup opereaz pe seturi de linii oferind un singur rezultat pentru tot grupul.

. Num r toate rândurile selectate folosind *. • Toate func iile de grup. ignorând valorile nule.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ie AVG([DISTINCT|ALL]n) Descriere Valoarea medie a lui ’’n’’. cu excep ia COUNT(*) ignora valorile nule. ALL ia în considera ie fiecare valoare. funcţie_de_grup(coloana) tabela condiţie] coloana ]. Pentru a înlocui o valoare cu valori nule folosi i func ia NVL. ignorând valorile nule.2 Func iile AVG sau SUM se pot folosi pentru date de tip numeric. Sfaturi pentru folosirea func iilor de grup: • DISTINCT face ca func ia s ia în considerare numai valorile distincte. Folosirea funcţiilor AVG. inclusiv valorile duble. COUNT({*|[DISTINCT|ALL] expr}) MAX([DISTINCT|ALL]expr) MIN([DISTINCT|ALL]expr) STDDEV([DISTINCT|ALL]x) SUM([DISTINCT|ALL]n) VARIANCE([DISTINCT|ALL]x) SELECT FROM [WHERE [ORDER BY coloana. Suma valorilor lui ’’n’’. SUM. ’’ALL’’ este implicit şi deci nu mai trebuie specificat. ignorând valorile nule.NVL2 sau COALESCE. ignorând valorile nule. ignorând valorile nule. MIN. Varia ia lui ’’n’’. Valoarea minim a expresiei. • Tipurile de date pentru argumente pot fi : CHAR. MAX 9. 9-232 . Valoarea maximal a expresiei. Abaterea standard a lui ’’n’’. inclusiv duplicatele şi rândurile cu valori nule. NUMBER sau DATE. VARCHAR2. ignorând valorile nule. unde expresia evalueaz altceva decât valori nule. Num rul de rânduri.

Func iile AVG.3 Folosirea funcţiei COUNT COUNT(*) returneaz num rul de linii dintr-o tabel . MAX(hire_date) FROM employees. 9-233 . SUM. MIN(salary). SELECT MIN(hire_date). minimul şi suma salariilor lunare pentru to i vânz torii. SELECT COUNT(*) FROM employees WHERE department_id = 50. SELECT MIN(last_name). MAX(salary). Exemplul urm tor afişeaz numele pentru primul şi ultimul angajat din lista alfabetic a tuturor angaja ilor.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT AVG(salary). Func iile MIN şi MAX se pot folosi pentru orice tip de date. 9. maximul. MAX(last_name) FROM employees. MIN şi MAX se pot folosi pentru coloanele care pot stoca date numerice. SUM(salary) FROM employees WHERE job_id LIKE '%REP%'. Exemplul de mai sus afişeaz media.

Exemplu: Afişa i num rul departamentelor din tabelul EMPLOYEES. • COUNT(expr) COUNT(DISTINCT expr) • Exemplul de mai jos afişeaz num rul angaja ilor din departamentul 80 care pot sa câştige un comision.întoarce num rul rândurilor unice nenule din coloana identificat prin expr. Afişa i num rul departamentelor distincte din tabelul EMPLOYEES.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Func ia COUNT are trei formate : • COUNT(*) . SELECT AVG(commission_pct) FROM employees. . 9-234 . SELECT COUNT(department_id) FROM employees. SELECT COUNT(commission_pct) FROM employees WHERE department_id = 80.întoarce num rul rândurilor nenule din coloana identificat prin expr.întoarce num rul de rânduri in tabel. SELECT COUNT(DISTINCT department_id) FROM employees.4 Funcţiile de grup şi valorile Null Func iile de grup ignor valorile null din coloan . 9. incluzând rândurile duble şi rândurile con inând valori nule. ..

Media este calculat ca un comision total pl tit tuturor angaja ilor. În exemplul de mai sus media este calculat pe baza tuturor rândurilor din tabel indiferent dac în coloana COMMISSION_PCT sunt stocate valori nule. cu excep ia COUNT(*). Uneori îns tabelul trebuie împ r it în grupuri mai mici de informa ii. împ r it la num rul angaja ilor care primesc comision. Media este calculat ca sum a comisioanelor pl tite c tre to i angaja ii. SELECT AVG(NVL(commission_pct. În exemplul de mai sus media este calculata doar pe baza rândurilor din tabel în care coloana COMMISSION_PCT con ine o valoare valid . ignor valorile nule din coloan . Func ia NVL for eaz func iile de grup s includ valori nule. 9-235 .5 Crearea grupurilor de date Pân acum toate func iile grup au tratat tabelul ca fiind un larg grup de informa ii. 0)) FROM employees.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Toate func iile grup. 9. Func ia NVL for eaz func iile grup s includ valori nule. împ r it la num rul total al angaja ilor companiei.

rândurile sunt sortate în ordinea ascendent a coloanelor incluse în lista GROUP BY. • • Toate coloanele din lista SELECT care nu sunt func ii de grup trebuie s fie men ionate în clauza GROUP BY. AVG(salary) FROM employees GROUP BY department_id. SELECT department_id. SELECT column. 9-236 . Se poate specifica o alt ordine folosind clauza ORDER BY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Aceasta se poate face folosind clauza GROUP BY. lucru ce permite folosirea func iilor de grup pentru a întoarce sumarul informa iei pentru fiecare grup. group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]. Dac coloana respectiv nu este inclus în clauza Group By va fi generat un mesaj de eroare . Clauza WHERE exclude rândurile înainte de a formarea grupurilor. coloanele ale c ror valori Clauza GROUP BY se poate folosi pentru a împ r i rândurile din tabel în grupuri. În sintax :group by expresion specific determin bazele pentru gruparea rândurilor. Implicit. • Sfaturi Dac se include o func ie de grup într-o clauza SELECT nu se pot selecta rezultatele individuale decât dac coloana individual apare în clauza GROUP BY.

con inând o clauz GROUP BY : • Clauza SELECT specific coloanele care s fie afişate. Dac nu exist nici o clauz WHERE. Clauza FROM specific tabelul pe care baza de date trebuie s -l acceseze: tabelul EMPLOYEES. implicit toate rândurile sunt incluse. declara ia SELECT de mai sus afişeaz media salariilor pentru fiecare departament f r s afişeze num rul departamentului respectiv. De exemplu. Rândurile sunt grupate dup num rul departamentului. deci func ia AVG care este aplicat coloanei salariilor va calcula media salariilor pentru fiecare departament. Iat cum este evaluat declara ia SELECT de mai sus. Clauza GROUP BY specific modul de grupare pentru rânduri. Totuşi. Coloanele GROUP BY care nu sunt in lista SELECT: SELECT AVG(salary) FROM employees GROUP BY department_id. rezultatele nu afişeaz datele în mod semnificativ. 9-237 . • • • Coloana specificat în clauza GROUP BY nu trebuie sa fie obligatoriu men ionat în clauza SELECT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplul de mai sus afişeaz num rul departamentului şi media salariilor pentru fiecare departament. Clauza WHERE specific liniile ce trebuie incluse. f r num rul departamentului. adic num rul departamentului şi media tuturor salariilor din grupul specificat în clauza GROUP BY.

AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary). SELECT department_id. din fiecare departament. De exemplu. în exemplu avg(sal). 9. Exemplul de mai sus arat un raport care afişeaz totalul salariilor ce au fost pl tite pentru fiecare nume de func ie.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Se poate folosi func ia de grupare. 9-238 . în clauza ORDER BY. Tabelul EMPLOYEES este grupat mai întâi dup num rul departamentului şi apoi aceast grupare se detaliaz dup numele func iei.6 Gruparea datelor după mai multe coloane Grupuri în grupuri Câteodat sunt necesare rezultate pentru grupuri formate din subgrupuri. doi func ionari din departamentul 20 sunt grupa i împreun şi se afişeaz un singur rezultat ( salariul total ).

Numele func iei din tabelul EMPLOYEES. job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT department_id dept_id.Num rul departamentului din tabelul EMPLOYEES. din grupurile formate dup num rul departamentului. . . Pentru o ob ine rezultatele finale pentru grupuri şi subgrupuri trebuiesc indicate mai multe coloane în clauza GROUP BY. • • 9-239 .Apoi. Clauza FROM specific tabelul pe care baza de date trebuie s -l acceseze : tabelul EMPLOYEES. Deci func ia SUM este aplicat coloanei salariilor pentru toate numele de func ii din fiecare grup format dup num rul departamentului. job_id. se grupeaz rândurile dup numele func iei. . Iat cum se evalueaz declara ia SELECT de mai sus.Rândurile se grupeaz mai întâi dup num rul departamentului. care con ine o clauza GROUP BY : • Clauza SELECT specific coloanele ce trebuie afişate: . Ordinea implicit de ordonare a rezultatelor poate fi determinat prin ordinea de scriere a coloanelor din clauza GROUP BY. SUM(salary) FROM employees GROUP BY department_id.Suma tuturor salariilor din grupul specificat în clauza GROUP BY. Clauza GROUP BY specific cum trebuie grupate rândurile : .

9-240 . SELECT department_id. atunci apare mesajul de eroare ’’not a single-group function’’ şi un asterisc (*) care indic coloana greşit . Exemplul de mai sus genereaz eroarea: SELECT department_id. Eroarea de mai sus se repar ad ugând clauza (GROUP BY). Orice coloan sau expresie din lista SELECT care nu este o func ie de grup trebuie s fie specificat în clauza GROUP BY. Dac clauza GROUP BY lipseşte. COUNT(last_name) FROM employees. COUNT(last_name) * ERROR at line 1: ORA-00937: not a single-group group function Column missing Ori de cate ori se foloseşte o combina ie de coloane individuale (department_id) şi func ii grup (COUNT(last_name)) în aceeaşi declara ie SELECT.7 Orice coloan sau expresie din lista SELECT care nu este o func ie de grup trebuie sa fie specificat în clauza GROUP BY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Interogări ilegale în folosirea funcţiilor de grup 9. SELECT department_id. trebuie inclus o declara ie (GROUP BY ) care s specifice coloanele individuale (in acest caz department_id). count(last_name) FROM employees GROUP BY department_id.

WHERE AVG(salary) > 8000 * ERROR at line 3: ORA-00934: group function is not allowed here Clauza WHERE nu poate fi folosit pentru a restric iona datele ce intra în componen a grupurilor. Declara ia SELECT de mai sus genereaz o eroare deoarece se foloseşte clauza WHERE pentru a restric iona afişarea mediei salariilor din acele departamente care au un salariu mediu mai mare de 8000 $.• • • Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Nu pute i grupurilor. SELECT department_id. Nu pute i folosi func ii de grup în clauza WHERE. folosi clauza WHERE pentru restric ionarea Folosi i clauza HAVING pentru restric ionarea grupurilor. 9-241 . AVG(salary) FROM employees WHERE AVG(salary) > 8000 GROUP BY department_id. SELECT department_id. AVG(salary) FROM employees HAVING AVG(salary) > 8000 GROUP BY department_id. Eroarea de mai sus poate fi corectat prin folosirea clauzei HAVING pentru restric ionarea datelor dup formarea grupurilor.

group condition restric ioneaz grupurile de rânduri raportate la acele grupuri a c ror condi ie specificata este TRUE ( adev rat ). Excluderea rezultatelor date de Group BY : Clauza HAVING Folosirea clauzei HAVING pentru restric ionarea datelor grupurilor presupune ca : .000 $. In sintax .8 Excluderea rezultatelor obţinute folosind clauza Group În acelaşi mod în care se foloseşte clauza WHERE pentru restric ionarea rândurile selectate se poate folosi clauza HAVING pentru restric ionarea datelor rezultate din grupuri. 2. SELECT column. G sirea salariul mediu pentru fiecare departament grupând dup num rul departamentului. group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column]. . 9-242 . sunt necesare urm toarele: 1. doar pentru departamentele care au salariul maxim mai mare de 10. Restric ionarea grupurilor la acele departamente ce au salariu maxim mai mare de 10. Pentru a afla salariul maxim pentru fiecare departament.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9. .000$.Clauza GROUP BY sa fie aplicat .Rândurile sa fie grupate.Grupurile care îndeplinesc condi ia din clauza HAVING sa fie afişate.

De aceea. Serverul Oracle desf şoar urm torii paşi la folosirea clauzei HAVING : • Se grupeaz rândurile. Grupurile sunt formate şi func iile grup sunt calculate înainte de aplicarea clauzei HAVING pentru grupurile din lista SELECT. Exemplul de mai jos afişeaz numerele departamentelor şi salariul mediu la acele departamente la care salariul minim este mai mare de 10. SELECT department_id. AVG(salary) FROM employees GROUP BY department_id HAVING max(salary)>10000.000 $. 9-243 . MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary)>10000. • Se afişeaz grupurile care îndeplinesc criteriul din clauza HAVING. Dac se restric ioneaz rândurile în baza unei func ii de grup. • Func ia de grup se aplica grupului. Exemplul de mai sus afişeaz num rul departamentului şi salariul maxim pentru acele departamente la care salariul minim este mai mare de 10. mai întâi se restric ioneaz grupurile pe baza informa iilor totale şi apoi se exclud cele ce nu corespund condi iilor din clauza HAVING. dar este recomandat scrierea mai întâi a clauzei GROUP BY deoarece este mai logic. este obligatoriu necesar o clauza GROUP BY şi o clauza HAVING. SELECT department_id. Se poate folosi clauza GROUP BY f r a se folosi o func ie de grup în lista SELECT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Clauza HAVING poate fi folosit pentru a specifica care grupuri trebuiesc afişate.000 $. Clauza HAVING poate precede clauza GROUP BY.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplul de mai jos afişeaz numele func iei şi totalul salariului lunar pentru fiecare nume de func ie. • Folosirea GROUPING SETS pentru a ob ine un singur set de date. Exemplul exclude vânz torii şi sorteaz lista dup salariul lunar total. Func iile de grup pot fi imbricate pe oricâte nivele de adâncime. 9. SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE '%REP%' GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary).9 Imbricarea funcţiilor de grup Afişarea valorii maxime a salariului mediu. • Folosirea func iei GROUPING pentru identificarea valorilor rândurilor create de ROLLUP sau CUBE. cu un total al statului de plata dep şind 13. Exemplul de mai sus afişeaz salariul mediu maxim. SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id. 9-244 . • Folosirea operatorului CUBE pentru a ob ine valori de intersec ie. SELECT job_id. 9.000 $.10 GROUP BY cu operatorii ROLLUP şi CUBE Obiective: • Folosirea operatorului ROLLUP pentru a ob ine subtotaluri.

ROLLUP este o extensie a clauzei GROUP BY. Folosirea operatorului ROLLUP duce la ob inerea unor rezultate cumulative cum ar fi subtotalurile. Gruparea cu ROLLUP duce la ob inerea unei set de rezultate ce con ine pe lâng valorile pentru rândurile grupate în mod obişnuit şi rândurile pentru subtotal. de-a lungul listei de coloane specificate în clauza GROUP BY dup care aplic func ia de agregare acestor grup ri.. Operatorii ROLLUP şi CUBE sunt disponibili începând cu versiunea Oracle8i. Operatorul ROLLUP creeaz grupuri prin mişcarea într-o direc ie. ROLLUP poate fi folosit în scrierea rapoartelor. În caz contrar operatorii vor da rezultate irelevante. unde n este num rul de coloane specificat în clauza GROUP BY f r a folosi operatorul ROLLUP. trebuie unite. Observa ii: Pentru a produce subtotaluri cu n dimensiuni. de la stânga la dreapta. motiv pentru care folosirea operatorului este foarte eficient atunci când sunt 9-245 . Operatorul ROLLUP ob ine aceste rezultate cu un singur acces la tabel. etc. Se poate folosi operatorul CUBE pentru a ob ine rânduri de tip cross-tabulation.] group_function(column). Gruparea cu folosirea operatorului CUBE duce la gruparea rândurilor selectate pe baza valorilor tuturor combina iilor posibile ale expresiilor specificate şi returneaz un singur rând cu informa ii totale pentru fiecare grup. 9. graficelor. FROM table [WHERE condition] [GROUP BY [ROLLUP] group_by_expression] [HAVING having_expression]. folosind operatorul UNION ALL n+1 fraze SELECT. pentru a ob ine elemente de statistic şi totaluri din seturile de rezultate.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Operatorii ROLLUP şi CUBE trebuie specifica i în cadrul clauzei GROUP BY.11 Operatorul ROLLUP SELECT [column. Observa ii: La folosirea operatorilor ROLLUP şi CUBE trebuie s v asigura i c acele coloane ce sunt dup clauza GROUP BY au sens. Acest lucru face ca execu ia interog rii sa fie ineficient deoarece fiecare fraza SELECT necesit un acces la tabel. [ORDER BY column]. ca exist o rela ionare real între ele..

apoi se creeaz în mod progresiv subtotalul de nivel înalt. în func ie de criteriile de grupare specificate în clauza GROUP BY. suma salariilor pe fiecare func ie în cadrul departamentului). Se calculeaz mai întâi valorile totale standard pentru grupul specificat în clauza GROUP BY (în exemplu. în func ie de job_ID (eticheta 3). Salariul total pentru toate departamentele care au ID-ul mai mic de 60. Dac pentru operatorul ROLLUP din clauza GROUP BY sunt specificate 9-246 . job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice implicate multe coloane în producerea subtotalurilor. Operatorul ROLLUP creeaz subtotaluri care se desf şoar începând de la nivelul cel mai detaliat pân la un total general. mutându-se de la dreapta la stânga în cadrul listei de valori de la clauza GROUP BY (în exemplu.sum(salary) FROM employees WHERE department_id < 60 GROUP BY ROLLUP(department_id. în conformitate cu gruparea pe departamente specificat în clauza GROUP BY (eticheta 1) Operatorul ROLLUP afişeaz : o o Salariul total pentru acele departamente care au ID-ul mai mic de 60 (eticheta 2). job_id) • • În exemplul de mai sus se afişeaz : Salariul total pentru fiecare JOB_ID din fiecare departament pentru acele departamente a c ror ID este mai mic de 60. este calculat mai întâi suma salariilor pe fiecare departament urmat de suma salariilor pentru toate departamentele). Toate rândurile etichetate cu 1 sunt rânduri „normale” iar cele indicate cu 2 şi 3 sunt rânduri „supratotalizatoare”. EXEMPLU SELECT department_id.

] group_function(column). Operatorul CUBE este un „comutator” suplimentar al clauzei GROUP BY dintr-o fraza SELECT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice n coloane. Func ia de grup specificat în list este aplicat acelor grupuri pentru a produce valori de total pentru rânduri suplimentare „supratotalizatoare”. 9-247 . Num rul grupurilor suplimentare din setul de rezultate este dat de num rul de coloane incluse în clauza GROUP BY. Coloanele incluse în clauza GROUP BY sunt referite încrucişat în vederea gener rii unui superset de grupuri. FROM table [WHERE condition] [GROUP BY [CUBE] group_by_expression] [HAVING having_expression].. vor fi 2n combina ii de supratotaluri posibile. [ORDER BY column]. Rândurile bazate pe prima expresie din cele n specificate se numesc rânduri „obişnuite” iar celelalte se numesc rânduri „supratotalizatoare”. 9. CUBE produce subtotaluri pentru toate combina iile posibile ale grup rii specificate în clauza GROUP BY precum şi un total general. MIN şi COUNT. Operatorul CUBE poate fi folosit împreuna cu toate func iile de grup inclusiv AVG. motiv pentru care operatorul este numit astfel. orice combina ie posibil a coloanelor sau expresiilor men ionate în clauza GROUP BY este folosit pentru a produce supratotaluri. aceste valori supratotalizatoare pot fi înc rcate în grafice care convertesc datele în elemente vizuale. Dac în clauza GROUP BY sunt n coloane sau expresii. Prin folosirea aplica iilor sau elementelor de programare.12 Operatorul CUBE SELECT [column. SUM.. De fapt. aceste combina ii formeaz un cub ndimensional. Pe când ROLLUP duce la ob inerea doar a unei frac iuni din num rul total de combina ii posibile pentru subtotaluri. Operatorul CUBE este folosit împreun cu o func ie de grup pentru a general rânduri suplimentare într-un set de rezultate. rezultatul opera iei va avea n + 1 grupuri (in exemplu 2 + 1 = 3 grupuri). Matematic. El este folosit pentru a ob ine seturi de rezultate care sunt în mod obişnuit folosite în rapoartele de tip „cross-tab”. MAX.

job_id. • Salariul total pentru acele departamente ce au ID-ul mai mic de 50 (eticheta 2).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: SELECT department_id. Suplimentar operatorul CUBE afişeaz salariul total pentru fiecare func ie. toate rândurile etichetate cu 2 şi 4 sunt rânduri totalizatoare iar rândurile etichetate cu 3 sunt rânduri ce con in valori „încrucişate”. indiferent de valoarea din coloana JOB_ID. ce genereaz subtotaluri pe n dimensiuni (unde n este num rul de coloane din clauza GROUP BY). • Salariul total pentru fiecare func ie indiferent de departament (eticheta 3). job_id). • Salariul total pentru acele departamente ce au ID-ul mai mic de 50. Not : Similar cu operatorul ROLLUP. În exemplul de mai sus rezultatul interog rii se interpreteaz astfel: • Salariul total pentru fiecare func ie din cadrul departamentului (pentru acele departamente ce au ID-ul mai mic de 50) este afişat de clauza GROUP BY (eticheta 1). 9-248 . Operatorul CUBE a efectuat şi opera ia pe care un operator de tip ROLLUP ar fi executat-o pentru a afişa subtotalurile şi salariul total pentru acele departamente a c ror ID este mai mic. indiferent de func ie (eticheta 4). toate rândurile etichetate cu 1 sunt rânduri obişnuite. indiferent de departament. În exemplu. SUM(salary) FROM employees WHERE department_id < 60 GROUP BY CUBE (department_id.

Func ia GROUPING poate fi folosit împreun cu operatorul CUBE sau ROLLUP pentru a ajuta la în elegerea modalit ii de ob inere a valorilor de total. • Valoarea NULL din expresia coloanei este o valoare creat de ROLLUP sau CUBE ca rezultat al grup rii. Valoarea pentru expr din sintaxa trebuie s se potriveasc cu una din expresiile scrise î clauza GROUP BY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice dac nu s-ar folosi operatorul CUBE ar fi fost necesare 2n fraze SELECT care sa fie legate cu UNION ALL. Valorile întoarse de func ia GROUPING sunt folositoare pentru a: • Determina nivelul de totalizare pentru un anumit subtotal. GROUPING(expr) FROM table [WHERE condition] [GROUP BY [ROLLUP][CUBE] group_by_expression] [HAVING having_expression].. 9. Func ia întoarce valoarea 0 sau 1. • Valoarea NULL din expresia coloanei este o valoare stocat de NULL. Func ia întoarce valoarea 0 sau 1. SELECT [column. [ORDER BY column]. o ieşire cu 3 dimensiuni ar necesita 23 = 8 fraze SELECT care s fie unite cu UNION ALL. • Valoare 0 returnat de func ia GROUPING bazat pe o expresie indic urm toarele: • Expresia a intrat în calcul unei valori totale. • valoare de NULL creat de ROLLUP/CUBE (ca rezultat a unei func ii de grup asupra acelei expresii ). 9-249 . Func ia GROUPING foloseşte o singur coloan drept argument. Astfel. Prin folosirea ei se pot crea grupuri care s formeze subtotaluri întrun rând şi se pot deosebi valorile de NULL stocate de valorile de NULL create de ROLLUP sau CUBE. adic grupul sau grupurile pe care se bazeaz subtotalul.] group_function(column). Valoare 1 returnat de func ia GROUPING bazat pe o expresie indic urm toarele: • Expresia nu a intrat in calcul unei valori totale..13 Funcţia GROUPING Func ia GROUPING poate fi folosit împreun cu operatorul CUBE sau ROLLUP. • Identific dac o valoare de NULL din coloana unui rând dintr-un set de rezultate indica: • valoare de NULL din tabela de baza (NULL stocat).

SUM(salary). Luam acum în discu ie valoarea total 4400 din cel de-al doilea rând.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice EXEMPLU: SELECT department_id DEPTID. trebuie luate în considera ie atât coloana DEPARTMENT_ID cât şi JOB_ID. FROM employees WHERE department_id < 50 GROUP BY ROLLUP(department_id. GROUPING(department_id) GRP_DEPT. Astfel este returnat valoarea 1 pentru expresia GROUPING(department_id) şi pentru GROUPING(job_id).GROUPING(job_id) GRP_JOB În exemplul de mai sus avem in primul rând valoarea însumat a salariilor şi anume 4400. Astfel. Aceast valoare este salariul total pentru job_ID=’AD_ASST’ din departamentul 10. job_id). Deoarece coloana JOB_ID nu a fost luat în considerare în calculul acestei valori. 9. Observa i valoare 23400 din ultimul rând ce reprezint salariul total pentru toate func iile şi pentru acele departamente a c ror num r este mai mic de 50. valoare 0 este întoars atât pentru expresia GROUPING(department_id) cât şi pentru GROUPING(job_id). job_id JOB.14 GROUPING SETS GROUPING SETS reprezint o extensie a clauzei GROUP BY care permite specificarea unei grup ri multiple a datelor favorizând astfel o sumare eficient şi astfel facilitând analiza datelor la folosirea mai multe dimensiuni. GROUPING(job_id) returneaz valoarea 1. astfel valoarea 0 a fost returnat de GROUPING(department_id). 9-250 . Pentru a calcula aceast valoare total nu au fost avute în vedere nici coloana DEPARTMENT_ID nici JOB_ID. Rezultate similare se pot observa în rândul al cincilea. Aceast valoare este salariul total pentru departamentul 10 şi a fost calculat luând în considerare coloana DEPARTMENT_ID. Pentru a calcula aceast valoare total .

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Serverul Oracle calculeaz toate grup rile specificate în clauza GROUPING SETS şi combin rezultatele grupurilor individuale cu o opera ie de tip UNION ALL. manager_id). manager_id) si (job_id. manager_id) şi (job_id. 9-251 . manager_id). cu cât sunt mai multe elemente în GROUPING SETS cu atât creşte beneficiul performan ei dat de instruc iune . job_id. manager_id). manager_id)). În lipsa acestei facilita i oferite de Oracle9i ar fi trebuit scrise mai multe instruc iuni SELECT combinate cu operatorul UNION ALL O abordare care foloseşte multe interog ri este ineficient deoarece necesit multiple citiri ale datelor. job_id. Compara i instruc iunea precedent cu alternativa : SELECT department_id. o o o Pentru a specifica diverse tipuri de grup ri (care pot include operatori de tip ROLLUP sau CUBE) este necesar doar o singur instruc iune SELECT care poate fi scris împreuna cu GROUPING SETS în locul unor fraze SELECT multiple combinate cu operatorul UNION ALL. manager_id). manager_id). job_id. (department_id. AVG(salary) FROM employees GROUP BY CUBE(department_id.(job_id. manager_id. Eficien a Grouping set este datorat : este necesar doar o singur citire a datelor din tabelul de baza. Instruc iunea precedent calculeaz toate cele 8 (2 *2 *2) grupuri doar prin unica grupare : (department_id. (department_id. (department_id. manager_id). Instruc iunea calculeaz suma pentru urm toarele grupuri : (department_id. AVG(salary) FROM employees GROUP BY GROUPING SETS ((department_id. nu este necesar scrierea unei expresii complexe de tip UNION . manager_id) care intereseaz . job_id. De exemplu se poate scrie: SELECT department_id. manager_id. job_id. job_id.

job_id. Aceast instruc iune necesit trei citiri ale tabelei de baz şi este deci ineficient . manager_id. AVG(salary) FROM employees GROUP BY department_id. manager_id UNION ALL SELECT NULL. job_id.job_id). AVG(salary) FROM employees GROUP BY job_id. manager_id. AVG(salary) FROM employees GROUP BY department_id. NULL.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice O alt alternativ este instruc iunea urm toare: SELECT department_id. manager_id UNION ALL SELECT department_id. job_id. CUBE şi ROLLUP pot fi gândi i ca grouping sets cu o semantic specific (echivalen a din tabelul de mai jos) Exemplu SELECT department_id.manager_id)). manager_id. (job_id. 9-252 .avg(salary) FROM employees GROUP BY GROUPING SETS ((department_id. manager_id. manager_id. job_id.

Media salariilor pentru to i angaja ii ce au job_ID=’MK_MAN’ din departamentul 20 este 13000. iar seturile de rezultate sunt afişate pentru fiecare grup. NULL as manager_id. avg(salary) as AVGSAL FROM employees GROUP BY job_id. interogarea de mai sus necesit scanarea dubl a tabelei EMPLOYEES.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Interogarea din exemplu calculeaz suma pentru dou grupuri. Manager_ID. job_id. În lista rezultatelor. job_id. ca au ca sef persoana cu manager_ID=100 este 13000. lucru ce este foarte ineficient. SELECT department_id. motiv pentru care se recomand folosirea instruc iunii GROUPING SETS. manager_id. Este calculat media salariilor pentru fiecare dintre aceste grupuri. grupul marcat cu 1 poate fi interpretat astfel: • Media salariilor pentru to i angaja ii ce au job_ID=’AD_ASST’ din departamentul 10 este 4400. Media salariilor pentru to i angaja ii ce au job_ID=’MK_REP’. AVG(salary) as AVGSAL FROM employees GROUP BY department_id. manager_id. grupul marcat cu 2 poate fi interpretat astfel: • Media salariilor pentru to i angaja ii ce au job_ID=’MK_MAN’. job_id UNION ALL SELECT NULL. ca au ca sef persoana cu manager_ID=201 este 6000 şi aşa mai departe. Tabelul este împ r it în urm toarele grupuri: Department_ID. Media salariilor pentru to i angaja ii ce au job_ID=’ST_CLERK’ din departamentul 50 este 2925 şi aşa mai departe • • • • • În lista rezultatelor. În lipsa unui element de optimizare care s caute în blocurile interog rii pentru a genera un plan de execu ie. Job_ID. Job_ID. • Exemplul de mai sus poate fi scris dup cum urmeaz : 9-253 . Media salariilor pentru to i angaja ii ce au job_ID=’ MK_REP’ din departamentul 20 este 6000.

GROUP BY ROLLUP(a. SELECT NULL. NULL. d) unde (b. CUBE sau GROUPING SETS. Dac folosi i coloane compuse pentru instruc iunile ROLLUP sau CUBE înseamn ca dori i sa trece i peste anumite nivele de însumare (b. z). şi expresia GROUP BY se reduce la GROUP BY ROLLUP(a. În general folosirea coloanelor compuse este util la scrierea instruc iunilor ROLLUP. (b. Pentru a specifica o coloana compus în clauza GROUP BY trebuie s scrie i aceste coloane în paranteze astfel încât severul Oracle s poat recunoaşte aceste coloane ca o unitate atunci când execut calculele pentru clauzele ROLLUP sau CUBE. c). c). Se foloseşte in special pentru calcularea unui total general. aggregate_col FROM <table_name> GROUP BY ( ). c UNION ALL GROUP BY a. c) sunt tratate ca o unitate iar rollup nu va fi aplicat pentru (b. Compara i sintaxa de forma. De exemplu GROUP BY ROLLUP (a. c UNION ALL GROUP BY a UNION ALL GROUP BY () Aici (b. (b.c). b UNION ALL GROUP BY a UNION ALL GROUP BY (). c) cu : GROUP BY a. b. b.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9. pentru (b.c) formeaz o coloan compus care este tratat unitar. NOT : GROUP BY( ) este de obicei o clauz tipic pentru instruc iunea SELECT cu valori de null pentru a şi b şi doar o func ie de grup. 9-254 . Este ca şi cum a i folosi un alias.15 Composite Columns O coloan compus este o colec ie de coloane care sunt tratate unitar în momentul efectu rii calculelor pentru grupuri. de exemplu: ROLLUP (a. b. c). c)) este echivalent cu: GROUP BY a. de exemplu z.

c) ar fi echivalent cu : GROUP BY a. 3.manager_id. job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Similar. job_id. Consider m exemplul: SELECT department_id. manager_id). (department_id. c UNION ALL GROUP BY a. Interogarea presupune calcularea de c tre serverul Oracle Server a valorilor pentru urm toarelor grupuri : 1. b UNION ALL GROUP BY c UNION ALL GROUP By () Tabelul urm tor ilustreaz diferen a dintre folosirea coloanelor compuse şi specifica iile pentru GROUP BY . (department_id. SUM(salary) FROM employees GROUP BY ROLLUP( department_id.(job_id. (department_id). job_id). EXEMPLU: SELECT department_id. job_id. SUM(salary) FROM employees GROUP BY ROLLUP( department_id. 9-255 . 4. 2. manager_id). manager_id)). ( ). manager_id. b.job_id. b). GROUP BY CUBE((a.

Coloanele incluse în paranteze sunt tratate unitar la execu ia instruc iunilor ROLLUP şi CUBE. job_id. Scriind coloanele JOB_ID şi MANAGER_ID în paranteze. • ( ). lucru ilustrat în figur . Exemplul calculeaz grupurile : • (department_id. TO_CHAR(NULL).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Daca sunte i interesa i În gruparea dup liniile (1). SUM(salary) FROM employees GROUP BY department_id. manager_id). drept coloan compus . si afişeaz urm toarele : • Salariul total pe fiecare departament (eticheta 1) • Salariul total pe fiecare departament.job_id. job_ID şi manager (eticheta 2) • Totalul general (eticheta 3) Exemplul de mai sus poate fi scris şi astfel : SELECT department_id. SUM(salary) FROM employees GROUP BY department_id UNION ALL 9-256 . indicam serverului Oracle faptul c trebuie s trateze coloanele JOB_ID şi MANAGER_ID unitar. nu pute i limita calculul acestor grupuri f r a folosi coloane compuse. (3) şi (4) din exemplul de mai sus. manager_id. manager_id UNION ALL SELECT department_id. job_id. Folosirea coloanelor compuse d posibilitatea de a trata coloanele JOB_ID şi MANAGER_ID unitar atunci când se executa ROLLUP.TO_NUMBER(NULL). • (department_id).

GROUPING SETS(c.SUM(salary) FROM employees GROUP BY ().TO_NUMBER(NULL). d). lucru ce este ineficient. c). Pentru a specifica seturi de grup ri concatenate trebuie sa separa i set rile de grupuri multiple şi opera iile de tip ROLLUP şi CUBE prin virgule astfel încât serverul Oracle s le combine într-o singura clauza GROUP BY. interogarea de mai sus necesita trei scan ri ale tabelei de baza. d) Concatenarea seturilor de grup ri este foarte folositoare deoarece : • uşureaz scrierea instruc iunii: nu trebuie s enumera i.CUBE(manager_id). c). job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT TO_NUMBER(NULL). EXEMPLU GROUP BY GROUPING SETS(a. prin scriere manual . pentru fiecare set de grupare definind seturile de grupare necesare pentru dimensionare. (a. d) Exemplul precedent defineşte urm toarele grupuri: (a.16 Concatenated Groupings Grup rile concatenate ofer o solu ie concis de a genera combina ii utile de grupuri. toate grupurile . • folosirea aplica iei: SQL-ul general de aplica ii OLAP include deseori concatenarea seturilor de grupare. EMPLOYEES. Rezultatul este intersec ia valorilor grupurilor din fiecare set de grup ri.ROLLUP(job_id). SUM(salary) FROM employees GROUP BY department_id. TO_CHAR(NULL). (b. b). (b. EXEMPLU: SELECT department_id. În absenta unui element de optimizare care s studieze interogarea şi s creeze un plan de execu ie a interog rii. 9-257 . manager_id. 9. De aceea se recomand folosirea coloanelor compuse.

job ID. manager ID (eticheta 2). job_id ). • (department_id. manager (eticheta 1). Se calculeaz salariul total pentru fiecare grup. manager_id). job ID (eticheta 3). exemplul afişând urm toarele : • Salariul total pentru fiecare department. 9-258 . • Salariul total pentru fiecare department. detaliile pentru departamentul 10 sunt eviden iate în figura de mai sus. job_id).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Din exemplul de mai sus rezult formarea urm toarelor grupuri : • (department_id. manager_id. • (department_id. • Salariul total pentru fiecare department (eticheta 4). • (department_id). • Salariul total pentru fiecare department. Pentru o în elegere mai uşoar .

5. Afişa i cel mai mare salar.sql. Func iile de grup includ valoarea null în calcule (adev rat/fals). Salva i instruc iunea in fişierul p4.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9. Func iile de grup ac ioneaz rezultat. (adev rat/fals). Salva i modific rile in p5.sql astfel încât s afişeze aceleaşi informa ii pentru fiecare tip de meserie. Modifica i p4. Minim. 4.17 Exerciţii asupra mai multor rânduri şi produc un 1.sql. Clauza WHERE restric ioneaz rândurile anterior includerii acestora în grupurile de calcul (adev rat/fals). 3. 2. cel mai mic salar. 9-259 . Rotunji i rezultatele (f r zecimale). Eticheta i coloanele cu Maxim. Suma şi Media. suma şi media salariului pentru to i angaja ii.

Eticheta i coloana Nr. Eticheta i coloana Diferen a. Afişa i num rul managerului şi salariul celui mai prost pl tit angajat pentru acel manager. 8.(Folosi i coloana Manager_ID). Determina i num rul managerilor f r s -i lista i (doar num rul lor).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 6. 9. 9-260 . Scrie i o interogare pentru afişarea num rului de angajai cu aceeaşi meserie. 7. Sorta i rezultatele in ordine descresc toare dup salar. Manageri. Scrie i o interogare care s afişeze diferen a dintre salariile cele mai mari şi cele mai mici. Exclude i pe cei care nu au manager. Exclude i grupurile care au salariul minim mai mic decât 1600$.

Eticheta i coloanele Dname. Vezi exemplul. Scrie i o interogare care afişeaz num rul total de angajai şi num rul total de angaja i care au fost angaja i în anii 1995. 9-261 . 12. Scrie i o interogare care s afişeze numele departamentului. 80. Eticheta i coloanele corespunz tor. Eticheta i coloanele corespunz tor. Vezi exemplul. Loc.1996.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10. num rul de angajai şi salariul mediu al angaja ilor din acel departament. 90 precum şi salariul total pentru acea meserie pentru toate departamentele. 11. suma salariilor pentru meseria respectiv din cadrul departamentelor 20. No of People şi Salary.1997 şi 1998. 50. Vezi exemplul. localitatea. Afişa i meseria.

Job_ID şi salariul total pentru fiecare job_ID pentru angaja ii care au acelaşi sef.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 13. Salariul total pe care şefii trebuie sa-l pl teasc angaja ilor . Scrie i o interogare care sa afişeze urm toarele informa ii pentru acei angajai a c ror manager_ID este mai mic de 120: Manager_ID. Salariul total pe care şefii trebuie sa-l pl teasc angaja ilor. indiferent de job_ID. 9-262 .

Scrie i o interogare folosind func ii de grupare pentru a determina dac valorile de NULL din coloanele corespunz toare expresiilor GROUP BY sunt cauzate de opera ia ROLLUP. 9-263 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 14. Observa i rezultatele de la punctul 13.

job_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 15. job_id. Salariul total pe fiecare func ie. 16. Scrie i o interogare. calculeze suma salariilor pentru fiecare dintre aceste 9-264 . . folosind GROUPING SETS. Scrie i o interogare care s afişeze urm toarele informa ii despre angaja ii a c ror manager_ID este mai mic de 120 : Manager_ID. 17. . Func ia şi salariul total pentru fiecare func ie pentru angaja ii care au acelaşi sef. Salariul total al angaja ilor ce au acelaşi sef . job_id. indiferent de sef.department_id.manager_id.department_id. Observa i rezultatele interog rii de la punctul 15. Salariul total indiferent de func ii. manager_id. Scrie i o interogare care s foloseasc func iile de grupare pentru a determina dac valorile de NULL din coloanele corespunz toare clauzei GROUP BY sunt date de operatorul CUBE. Interogarea trebuie s grupuri. pentru a afişa urm toarele grupuri: .

Scrierea subinterogarilor de un singur rând şi a celor de mai multe rânduri. În acest capitol se vor studia caracteristici mai avansate ale instruc iunii SELECT cum ar fi scrierea subinterogarilor în clauza WHERE a altei instruc iuni SQL în scopul ob inerii de valori bazate pe o valoare necunoscut a unei condi ii. Definirea subinterogarilor. 10-265 . Problema poate fi rezolvat combinând aceste dou interog ri.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 10 Obiective: • • • • Subinterogari Descrierea tipurilor de probleme pe care le pot rezolva subinterogarile. “ Cine primeşte un salariu mai mare decât cel al lui Jones ? ” Cerere principal “ Ce angajat are un salariu mai mare decât Jones ? “ Subinterogare “ Care este salariul lui Jones ? “ 10. integrând una din cereri în cealalt . Pentru rezolvarea acestei probleme este nevoie de dou interog ri: o interogare pentru a afla ce salariu câştig Jones şi o a doua pentru a determina cine câştig mai mult decât aceast sum . Enumerarea tipurilor de subinterog ri.1 Folosirea unei subinterog ri pentru a rezolva o problema S presupunem c se doreşte scrierea unei interog ri pentru a afla cine câştig un salariu mai mare decât salariul lui Jones.

SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table). <>. Prin utilizarea subinterogarilor se pot construi instruc iuni mai puternice pornind de la instruc iuni simple. 10-266 . Subinterogarile pot fi plasate in urm toarele clauze SQL: • WHERE • HAVING • FROM În sintaxa mai sus prezentat expr operator implic operatori de compara ie: >. ALL. ANY. înaintea interog rii principale. Subinterogarea este deseori referit ca fiind o instruc iune SELECT inclus . <. Rezultatul subinterog rii este utilizat de c tre cererea principal (cererea extern ). Acestea pot fi foarte folositoare în cazurile în care se doreşte selectarea unor rânduri dintr-un tabel folosind o condi ie care depinde de datele din tabelul propriu-zis. O subinterogare reprezint o instruc iune SELECT care este inclus întro clauz apar inând altei instruc iuni SELECT. = sau IN. iar rezultatul este folosit pentru a finaliza condi ia de cerere pentru interogarea principal sau extern .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice O cerere inclus sau o subinterogare returneaz o valoare care va fi folosit de c tre interogarea exterioar sau principal . Subinterogarea (cererea intern ) se execut o singur dat . sub-SELECT sau instruc iune SELECT intern . <= • operatori pentru subinterog ri de mai multe rânduri: IN. În general. Folosirea unei subinterog ri este echivalent execut rii a dou cereri secven iale şi folosirii rezultatului primei cereri ca valoare de c utare pentru cea de a dou cerere. unul din urm torii Operatorii de comparare se împart în dou clase: • operatori pentru subinterog ri de un singur rând: >=. subinterogarea se execut prima.

iar dac aceast clauza este specificat . Pentru o instruc iune SELECT poate exista doar o singur clauz ORDER BY. cererea intern determin salariul angajatului cu numele „Abel”. Cererea extern preia rezultatul cererii interne şi îl foloseşte pentru a afişa to i angaja ii care au salariul mai mare decât aceast sum . ea trebuie sa fie ultima clauz din instruc iunea SELECT principal . Subinterog rile folosesc dou clase de operatori de comparare: operatori single-row şi operatori multiple-row.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel'). Subinterogarile nu pot con ine clauza ORDER BY. 10. Reguli în utilzarea subinterog rilor • • • O subinterogare trebuie s fie inclus între paranteze. În figura anterioar .2 Tipuri de subinterog ri 10-267 . O subinterogare trebuie s apar în partea dreapta a unui operator de comparare.

Executarea unei subinterog ri single-row: 10-268 . Multiple-row : cereri care returneaz mai mult de un rând din instruc iunea SELECT intern .3 Subinterogari single-row O subinterogare single-row este acea subinterogare care returneaz un singur rând din instruc iunea SELECT intern . Acest tip de subinterogare foloseşte un operator single-row. Exemplu: SELECT last_name.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Single-row : cereri care returneaz doar un rând din instruc iunea SELECT intern . • 10. Afişarea angaja ilor care lucreaz pe acelaşi post (au aceeaşi meserie) ca şi angajatul care are num rul de marc 141. job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141).

10.4 Utilizarea func iilor de grup într-o subinterogare SELECT last_name. astfel ca aceast instruc iune SQL este denumit subinterogare singlerow. Clauza HAVING în subinterogare Server-ul Oracle execut mai întâi subinterogarile. respectiv 2600. 10-269 . Exemplul din figura precedent afişeaz numele. func ia şi salariul tuturor angaja ilor al c ror salariu este egal cu salariul minim. care este folosit de c tre interogarea principal . În interogarea principal pot fi afişate date prin utilizarea unei func ii de grup folosind o subinterogare care sa returneze un singur rând. Blocurile de cereri interne sunt executate primele. dup operatorul de comparare. salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice O instruc iune SELECT poate fi considerat ca un bloc de cereri. job_id. Func ia MIN (func ie de grup) returneaz o singur valoare (şi anume 2500). Exemplul de mai sus afişeaz angaja ii a c ror func ie este aceeaşi cu cea a angajatului cu num rul 141 şi a c ror salariu este mai mare decât cel al angajatului 143. Apoi este procesat blocul de cereri exterior care foloseşte valorile returnate de c tre cererile interne pentru a finaliza propriile condi ii de c utare. Ambele cereri interne returneaz valori singulare (FUNCTIONAR şi 2600). Exemplul este format din 3 blocuri de cereri: o cerere exterioar şi dou cereri interne. Subinterogarea se va plasa între paranteze. Interog rile exterioare şi incluse pot prelua datele din tabele diferite. Server-ul Oracle returneaz rezultatele c tre clauza HAVING a interog rii principale. producând rezultatele: FUNC IONAR (ST_CLERK).

SELECT job_id. Server-ul Oracle execut subinterogarea returnând rezultatul c tre clauza HAVING a subinterog rii principale. MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50). Exemplu: Se cere s se g seasc func ia având cel mai sc zut salariu mediu.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT department_id. AVG(salary) FROM employees GROUP BY job_id HAVING AVG(salary) = (SELECT MIN(AVG(salary)) FROM employees GROUP BY job_id). Subinterogarile pot fi folosite nu numai în clauza WHERE ci şi în clauza HAVING. 10. Instruc iunea SQL prezentat în figura de mai sus are ca scop final afişarea tuturor departamentelor la nivelul c rora salariul minim are o valoare mai mare decât valoarea salariului minim din cadrul departamentului 50.5 Erori ce pot apare la folosirea subinterog rilor 10-270 .

În acest caz.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice O eroare obişnuit la folosirea subinterog rilor o reprezint returnarea a mai mult de un rând de c tre o subinterogare dorit a fi de tip single-row. subinterogarea nu va selecta nici un rând. În instruc iunea SQL din exemplul anterior. câte unul pentru fiecare grup g sit. 2500. subinterogarea con ine o clauz GROUP BY dup num rul departamentului (department_ID). Nu exist nici un angajat cu numele de Haas. subinterogarea con ine o clauz WHERE (ename = ‘Haas’). Interogarea extern preia rezultatul subinterog rii (null. care aşteapt o singur valoare în partea sa dreapt . Interogarea extern nu g seşte nici un angajat având câmpul referitor la func ie de valoare nul şi astfel nu returneaz nici un rând. rezultatul subinterog rii va fi: 4400. Se presupune c inten ia este de a selecta angajatul cu numele Haas. O problem obişnuit legat de subinterog ri o constituie posibilitatea neselect rii nici unui rând de c tre interogarea inclus . Interogarea extern preia rezultatele subinterog rii şi le foloseşte în clauza WHERE. 10-271 . Problema este ortografierea greşit a cuvântului Haas. 17000 şi 8300. dar la execu ie nu se selecteaz nici un rând. Operatorul ‘ = ’ nu poate accepta mai mult de o valoare primit de la subinterogare şi astfel este generat eroarea. care implic selectarea mai multor rânduri. Clauza WHERE con ine operatorul egal ( = ). operator de comparare single-row. 7000. 4200. Instruc iunea pare a fi corect . 6000. în acest caz) şi foloseşte acest rezultat în propria-i clauza WHERE. În ceea ce priveşte instruc iunea SQL de mai sus. Pentru a corecta eroarea. operatorul (=) trebuie înlocuit cu operatorul IN. Astfel.

interogarea principal este privit din perspectiva server-ului Oracle astfel: SELECT last_name. 4400. 4200. 8600. Se cere s se selecteze angaja ii care câştig un salariu egal cu salariul minim la nivel de departament. 6000. salary. 8300. De fapt. SELECT last_name.6 • • Subinterogari multiple-row Selecteaz mai mult de un rând Folosesc operatori multiple-row de comparare Operator IN ANY ALL Semnifica ie Egal cu oricare din elementele listei Compar valoarea cu fiecare valoare returnat de subinterogare luat separat Compar valoarea cu toate valorile returnate de subinterogare Subinterog rile care returneaz mai mult de un rând se numesc subinterog ri multiple-row. department_id FROM employees WHERE salary IN (SELECT MIN(salary) FROM employees GROUP BY department_id). Interogarea intern va fi prima executat producând un r spuns. Blocul cererii externe este apoi procesat şi se folosesc valorile returnate de c tre interogarea inclus pentru finalizarea propriei condi ii de c utare. salary. 10-272 . department_id FROM employees WHERE salary IN (2500. 1 7000).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10. 7000. Operatorul multiple-row necesit una sau mai multe valori. În cazul subinterog rilor multiple-row se folosesc operatori multiple-row în locul celor single-row.

Exemplul de mai sus afişeaz angaja ii ale c ror salarii sunt mai mici decât al oric rui programator (IT_PROG) dar care nu sunt programatori. este echivalent cu operatorul IN. 10. < ANY > ANY = ANY înseamn mai mic decât maxim.8 Utilizarea operatorului ALL în subinterog rile multiple-row 10-273 . Salariul maxim pe care îl câştig un programator este $9000. Instruc iunea SQL afişeaz to i angaja ii care nu sunt programatori dar câştig mai pu in de $9000.7 Utilizarea operatorului ANY în subinterogarile multiple-row Operatorul ANY compar o valoare cu fiecare valoare returnat de subinterogare. înseamn mai mare decât minim.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10.

Una din valorile returnate de interogare este o valoare de null şi prin urmare întreaga interogare nu returneaz nici o linie. Motivul este c toate aceste condi ii care compar rezultatul unei valori cu null transform rezultatul în null.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Operatorul ALL compar o valoare cu toate valorile returnate de o subinterogare. Exemplul de mai sus afişeaz to i angaja ii ale c ror salarii sunt mai mici decât al oric rui programator (IT_PROG) dar care nu sunt programatori. > ALL < ALL înseamn mai mare decât maxim înseamn mai mic decât minim Operatorul NOT poate fi folosit împreun cu operatorii IN. Trebuie s ave i în vedere c valorile nulle ale rezultatului subinterog rii nu vor constitui o problem dac folosi i operatorul IN. De exemplu.employee_id NOT IN (SELECT mgr. Când exist valori de null în rezultatul subinterog rii. Operatorul IN este echivalent cu operatorul ANY. Comanda SQL de mai sus afişeaz to i angaja ii care nu au nici un subordonat. Logic. 10-274 . Operatorul NOT IN este echivalent cu <>ALL. ANY şi ALL. folosi i urm toarea exprimare SQL: SELECT last_name FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL).manager_id FROM employees mgr). Cel mai mic salariu al vreunui programator este $4200. pentru afişarea angaja ilor care nu au subordona i. acesta interogare SQL ar trebui sa returneze 12 linii dar nu se returneaz nici una. nu folosi i operatorul NOT IN. aşa c interogarea va selecta acei angajai ale c ror salarii sunt mai mici decât $4200.last_name FROM employees emp WHERE emp. 10.9 Returnarea valorilor nule în rezultatul subinterog rii SELECT emp.

10 Subinterogari de coloane multiple Pân acum am scris subinterog ri ce returnau una sau mai multe linii dar care comparau valorile pentru o singur coloan în clauza WHERE sau HAVING a instruc iunii SELECT. Un exemplu de compara ie nepereche este dat mai jos.. Toate rândurile afişate trebuie s satisfac .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10.. salariul şi comisionul oric rui angajat a c rui salariu şi comision se potrivesc cu salariul şi comisionul oric rui angajat din departamentul 30. fiecare valoare a coloanelor din clauza WHERE a interog rii principale va fi comparat în mod individual cu valorile multiple returnate de subinterogare. column. În cazul unei compara ii nepereche. Fiecare linie returnat de comanda SELECT trebuie s aib aceeaşi valoare atât în coloana MANAGER_ID cât şi în coloana DEPARTMENT_ID cu cele ale angajatului cu num rul 178 sau 174. clauza WHERE con ine o compara ie pereche. num rul departamentului. Folosirea subinterog rilor de coloane multiple ofer posibilitatea îmbin rii condi iilor din dou clauze WHERE în una singur . SELECT column. 10. Afişa i numele.. Exemplul de mai sus foloseşte o subinterogare de coloane multiple (care returneaz mai mult de o coloan ) pentru a compara sariul şi comisionul. toate condi iile multiple din interogarea principal .) IN (SELECT column.. Coloanele individuale pot s se potriveasc cu orice valoare returnat de subinterogare.11 Compararea coloanelor (pereche şi nepereche) Compararea coloanelor într-o subinterogare de coloane multiple poate fi f cut în dou moduri: pereche sau nepereche. Dac se doreşte compararea uneia sau a mai multor coloane... 10-275 . în mod colectiv. column. FROM table WHERE condition).. column. În exemplul urm tor.. la scrierea condi iilor pentru clauza WHERE trebuie folosi i operatorii logici.. FROM table WHERE (column.

department_id FROM employees WHERE (manager_id.141)) AND department_id IN (SELECT department_id FROM employees WHERE employee_id IN (174.141).174). salariul.141)) AND employee_id NOT IN(174. department_id FROM employees WHERE manager_id IN (SELECT manager_id FROM employees WHERE employee_id IN (174.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Compara ie pereche SELECT employee_id. num rul departamentului şi media salariilor pentru to i angaja ii care câştig mai mult 10-276 . Exemplul urm tor afişeaz numele angaja ilor. department_id) IN (SELECT manager_id. department_id FROM employees WHERE employee_id IN (178.174)) AND employee_id NOT IN (178. manager_id. 10.12 Folosirea unei subinterog ri în clauza FROM Se poate folosi o subinterogare şi în clauza FROM a instruc iunii SELECT. Compara ie nepereche SELECT employee_id. manager_id.

a.department_id = b. Exemplu SELECT a. 10-277 . În Oracle9i. – În partea stâng a unui operator în clauza SET şi WHERE a unei instruc iuni UPDATE. (SELECT department_id. nu sunt calificate ca subinterog ri scalare. – listele de valori din instruc iunea INSERT .department_id. AVG(salary) salavg FROM employees GROUP BY department_id) b WHERE a.13 Expresii scalare returnate de subinterog ri O expresie scalar returnat de o subinterogare este o subinterogare care returneaz valoarea exact a unei coloane aferent unui singur rând.salary. subinterog rile scalare pot fi folosite în : – Condi ii şi expresii ce fac parte din instruc iuni ca DECODE şi CASE.department_id AND a.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice decât salariul mediu din departamentul în care lucreaz .salavg FROM employees a.salavg.last_name. Subinterog rile de mai multe coloane scrise pentru a compara dou sau mai multe coloane. 10. În Oracle8i subinterog rile scalare erau suportate doar în câteva cazuri similare cum ar fi: – instruc iunea SELECT ( clauza FROM. a. în scrierea c rora se folosesc la clauza WHERE condi ii compuse şi operatori logici.salary > b. WHERE). b. – Toate clauzele SELECT cu excep ia GROUP BY.

care este ID–ul departamentului pentru care location ID este 1800. condi ii pentru WHEN. constrângeri CHECK. Dac subinterogarea nu întoarce nici un rând. last name.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Valoarea expresiilor scalare ale subinterog rii este valoarea elementului returnat de subinterogare. Dac subinterogarea întoarce mai mult de un rând. Exemplu Primul exemplu de mai sus demonstreaz faptul c subinterog rile scalare pot fi folosite în expresii de tip CASE. şi valoarea Canada sau USA. Rezultatul exemplului este urm torul : 10-278 . • clauza HAVING. Expresia CASE din interogarea principal foloseşte rezultatul subinterog rii pentru a afişa employee ID. dac acesta este sau nu 20. • in clauzele START WITH şi CONNECT BY. Subinterogarea returneaz valoarea 20. cum ar fi CREATE PROFILE. valoarea expresiei scalare este NULL. • în clauza GROUP BY. Expresiile scalare date de subinterog ri nu sunt valide în urm toarele cazuri: • ca valori implicite pentru coloane şi expresii pentru clustere. • ca baz a unei func ii de baz pentru index. în func ie de num rul departamentului. • în instruc iuni care nu sunt în leg tur cu interog ri. serverul Oracle returneaz o eroare. • în clauza RETURNING a unei instruc iuni DML .

Acest exemplu foloseşte o subinterogare corelat .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Cel de al doilea exemplu ordoneaz rezultatele în func ie de DEPARTMENT_NAME prin potrivirea valorilor pentru DEPARTMENT_ID din tabela EMPLOYEES cu valorile pentru DEPARTMENT_ID din tabela DEPARTMENTS. Aceast comparare este f cut prin folosirea subinterog rii scalare din clauza ORDER BY. 10-279 . Fiecare subinterogare este executat odat pentru fiecare rând al interog rii principale. Într-o subinterogare corelat .14 Subinterogări corelate Subinterog rile corelate sunt folosite pentru procesare rând cu rând. 10. subinterogarea refer o coloan dintr-o tabel referit în subinterogarea principal . Rezultatul este afişat mai jos.

Se execut odat interogarea principal folosind valoarea dat de subinterogare. valoarea întoars fiind folosit de interogarea principal . Cu alte cuvinte. Se repet procedura pân la epuizarea rândurilor candidat. O subinterogare corelat este executat odat pentru fiecare rând candidat dat de interogarea principal . dat de interogarea principal . O subinterogare corelat este evaluat de fiecare dat pentru fiecare rând procesat de interogarea principal . 10-280 . Subinterog ri imbricate versus subinterog ri corelate Într-o subinterogare imbricat normal . interogarea SELECT interioar este executat mai întâi odat . subinterogarea este condus de interogarea principal . Interogarea principal poate fi o instruc iune SELECT. Executarea subinterog rii corelate • • • • Se ia un rând candidat.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Extrage rândul candidat din interogarea principal Execut subinterogarea folosind valoarea din rândul candidat Foloseşte valoarea subinterog rii pentru califica sau descalifica rândul candidat Serverul Oracle execut o subinterogare corelat atunci când o subinterogare refer o coloan dintr-un tabel referit în interogarea principal . Executarea subinterog rii imbricate • • Se execut mai întâi subinterogarea şi este returnat o valoare. Se foloseşte valoarea dat de subinterogare pentru a califica sau descalifica rândul candidat. Se execut subinterogarea folosind valoarea din rândul candidat. UPDATE sau DELETE.

deoarece subinterogarea nu ar putea s fac diferen a dintre coloana din interogarea principal şi cea din subinterogare. Exemplu: Afişa i datele angaja ilor care şi-au schimbat func ia de cel pu in dou ori.expr2). Exemplu: G si i to i angaja ii care câştig mai mult decât salariul mediu din departamentul în care lucreaz .. department_id FROM employees outer WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = outer.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT column1.department_id). SELECT e. column2. Deoarece atât interogarea principal cât şi subinterogarea folosesc tabela EMPLOYEES în clauza FROM. Operatorii ANY şi ALL pot fi folosi i în subinterog ri corelate.. 10-281 . acesteia i se atribuie un alias în interogarea principal . nu doar pentru claritatea citirii ci şi datorit faptului c f r acest alias interogarea nu ar func iona corect.e.. FROM table1 WHERE column1 operator (SELECT colum1. column2 FROM table2 WHERE expr1 = outer. SELECT last_name. salary.job_id FROM employees e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e. last_name.employee_id). În acest caz subinterogarea coreleaz salariul mediu din fiecare departament cu salariul fiec rui angajat.employee_id.

) Procedura se repet pentru urm toarele rânduri candidate pân la finalul tabelei. Dac subinterogarea întoarce un rând atunci: – Condi ia de c utare nu mai continu în interogarea principal . Condi ia de c utare continu în interogarea principal . Suplimentar se poate folosi operatorul EXISTS.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice • Serverul Oracle evalueaz subinterogarea corelat astfel: Selecteaz un rând din tabele specificat în interogarea principal .) Execut subinterogarea cu condi ia dat de valoarea rândului candidat din interogarea principal (în exemplu. 10-282 . evaluat de subinterogare este comparat cu acel 2 din clauza WHERE a interog rii principale. operatorul întoarce valoarea TRUE.15 Folosirea operatorului EXISTS Operatorul EXISTS verific existen a unei valori în setul de rezultate al unei subinterog ri. Dac valoarea nu exist . Evalueaz clauza WHERE a interog rii principale pe baza rezultatului dat de subinterogare ob inut în pasul 3. Acest lucru determin dac rândul candidat va fi selectat pentru afişare sau nu. întoarce FALSE. – Condi ia este marcat ca fiind TRUE. În acest sens operatorul NOT EXISTS testeaz dac o valoare g sit de interogarea principal este sau nu parte a setului de rezultate dat de subinterogare. coloana este E. num rul de schimb ri ale func iei pentru un salariat. Memoreaz valoarea din rândul candidat pentru coloana referit în subinterogare (în exemplu. Dac subinterogarea nu întoarce niciun rând atunci: – – Condi ia este marcat ca fiind FALSE. (în exemplu. rândul respectiv. Dac subinterogarea întoarce cel pu in un rând. În instruc iunile SELECT imbricate sunt accepta i to i operatorii logici. este afişat. Dac condi ia este îndeplinit de acel angajat. adic un rând candidat. • • • • 10.EMPLOYEE_ID ob inut la punctul 2).EMPLOYEE_ID. Acest operator este folosit în mod frecvent în subinterog rile corelate pentru a testa dac o valoare returnat de interogarea principal exist sau nu în setul de rezultate dat de interogarea secundar . func ia de grup COUNT(*) este evaluat pe baza valorii coloanei E.

10-283 . Prin înlocuirea ei cu constanta X. job_id. last_name. Operatorul EXISTS asigur asupra faptului c reg sirea datelor în subinterogare nu continu atunci când s-a g sit cel pu in un rând care s satisfac condi ia: WHERE manager_id = outer. performan ele se îmbun t esc. De notat faptul c subinterogarea nu trebuie s întoarc o coloan anume aşa c poate fi aleas o constant . Având coloana EMPLOYEE_ID în clauza SELECT a subinterog rii ar trebui parcurs tabela pentru aceast coloan . Din punctul de vedere al performan ei este mai rapid selectarea unei constante. department_id FROM employees outer WHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: G si i angajatul care are cel pu in un subaltern.job_id. aşa cum demonstreaz exemplul de mai jos: SELECT employee_id.employee_id).last_name. sau oricare alta. acesta fiind un mod eficient de folosire a operatorului IN. Operatorul IN poate fi folosit ca modalitate alternativ pentru operatorul EXISTS.department_id FROM employees WHERE employee_id IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL). SELECT employee_id.employee_id.

aşa cum arat exemplul de mai jos. department_name FROM departments WHERE department_id NOT IN (SELECT department_id FROM employees). Acest lucru duce la creşterea performan elor. Clauza WITH (cunoscut formal ca subquery_factoring_clause) permite refolosirea aceluiaşi bloc într-o instruc iune SELECT atunci când apare de mai multe ori într-o interogare complex . 10-284 . Se poate folosi o construc ie de tip NOT IN drept alternativ operatorul NOT EXISTS. • clauza este evaluat o singur dat chiar dac apare de mai multe ori în interogare.17 Clauza WITH Folosind clauza WITH pute i defini un bloc pentru interogare înainte de a îl folosi în aceasta. pentru Dealtfel NOT IN evalueaz FALSE dac oricare membru al setului este o valoare de NULL. pute i refolosi aceeaşi interogare atunci când costul evalu rii blocului interog rii este mare şi apare de mai multe ori într-o interogare complex . Cu atât mai mult interogarea nu va returna niciun rând chiar dac sunt rânduri în tabel care s satisfac condi ia din clauza WHERE. 10.16 Folosirea operatorului NOT EXISTS Exemplu : Afişa i toate departamentele ce nu au angaja i.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10. SELECT department_id. Folosind clauza WITH. În mod particular acest lucru este folositor atunci când exist multe referin e la acelaşi bloc şi sunt multe join-uri şi calcule. Folosind clauza WITH serverul Oracle reg seşte rezultatele unui bloc şi le stocheaz în spa iul de memorie temporar . beneficiile fiind: • interogarea devine uşor de citit.department_id). department_name FROM departments d WHERE NOT EXISTS (SELECT 'X' FROM employees WHERE department_id = d. SELECT department_id.

clauza WITH clause este rezolvat fie printr-un view in-line sau printr-o tabel temporar .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: scrie i o interogare. Intern. Compararea salariului total calculat la pasul unu cu media calculat în pasul doi. care s afişeze numele departamentului şi salariile totale pentru acele departamente în care salariul total este mai mare decât media salariilor pe departamente. Dac salariul total pentru un departament anume este mai mare decât media salariilor pe departamente. folosind clauza WITH. 10-285 . se afişeaz numele departamentului şi salariul total pe acel departament. Elementele de optimizare sunt cele care decid în func ie de costurile sau beneficiile de moment ale stoc rii temporare a datelor la folosirea acestei clauze. Calculul mediei salariale pe departamente şi stocarea rezultatului folosind clauza WITH. • Problema ar putea necesita calcule intermediare şi anume: Calculul salariului total pentru fiecare departament şi stocarea rezultatelor folosind clauza WITH. • • Interogarea de mai sus creeaz un bloc numit DEPT_COSTS şi altul numit AVG_COST pe care le foloseşte apoi în interogarea principal .

10-286 . pute i observa în tabelul Employees c cei ce au job_ID-urile egale cu AD_VP. ST_MAN. O interogare ierarhic este posibil atunci când exist o rela ie între rândurile tabelului. fiecare interogare fiind separat de o virgul . creat între rândurile dintr-un tabel.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Not : Subinterogarea din clauza FROM a unei instruc iuni SELECT se numeşte şi in-line view. De exemplu. Imagina i-v o familie în care cei mai vârstnici membri se afl aproape de baza trunchiului arborelui iar cei mai tineri membri reprezint ramurile arborelui. numele blocului precedând numele tabelei. Formatarea datelor ierahice. Clauza WITH poate suporta mai mult de o interogare. Crearea unui raport cu structur arborescent . Atunci când numele interog rii este identic cu cel al unei tabele existente parserul caut de la interior spre exterior. SA_MAN şi MK_MAN sunt direct subordona i preşedintelui companiei. Ramurile pot avea alte ramuri şi aşa mai departe. pe o rela ie • • Folosind interog ri ierarhice pute i reg si date bazându-v ierarhic natural . Excluderea unor ramuri din structura arborescent .18 Interogări ierahice Obiective: • • Interpretarea conceptului de interogare ierarhic . Numele interog rii este vizibil tuturor elementelor WITH ale blocurilor subinterog rilor (inclusiv subinterog rilor acestora) definite dup acestea şi blocului principal în sine (incluzând subinterog rile). care este de fapt valoarea coloanei employee_ID pentru preşedintele companiei (AD_PRES). O baz de date rela ional nu stocheaz înregistr rile în mod ierarhic. Clauza WITH se foloseşte numai la instruc iuni SELECT. Dealtfel. 10. pute i construi o ierarhie folosind procesul numit parcurgerea arborelui. Ştim acest lucru deoarece coloana MANAGER_ID pentru aceste înregistr ri are valoarea 100. O interogare ierarhic este o metod de afişare a ramurilor unui arbore în ordine. acolo unde exist o rela ie ierarhic între rândurile dintr-un singur tabel.

column. Structura natural a arborelui Tabelul EMPLOYEES are o structur arborescent construit în func ie de subordonarea angaja ilor fa de şefii lor. FROM table [WHERE condition(s)] [START WITH condition(s)] [CONNECT BY PRIOR condition(s)]. produc ie (asamblarea componentelor într-un produs finit).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Not : interog rile ierarhice pot fi folosite în diverse cazuri cum ar fi: genealogia uman (arborele genealogic al unei familii). Coloana MANAGER_ID con ine num rul de marc al şefului respectivului angajat. Rela ia p rinte-copil a unei structuri ierarhice v permite s controla i: • • Direc ia în care se parcurge arborele... expr. Ierarhia poate fi creat prin cercetarea valorilor echivalente din coloanele EMPLOYEE_ID şi MANAGER_ID. Punctul din cadrul ierarhiei de la care se pleac . cercetarea evolu iei (dezvoltarea speciilor) şi cercetare ştiin ific . managementul companiilor (managementul ierarhic). Aceast rela ie poate fi folosit folosind un self-join pe acest tabel. NOT : Figura de mai sus prezint modul de organizare ierarhic al angaja ilor din tabelul EMPLOYEES. Interog ri ierarhice SELECT [LEVEL]. WHERE condition: expr comparison_operator expr 10-287 .

Aceast clauz este obligatorie pentru o interogare ierarhic . specific tabelul sau vederea ce con ine coloanele. restric ioneaz rândurile date de interogare f r a afecta alte rânduri ale ierarhiei.. începe i cu King care este 10-288 .START WITH last_name = 'Kochhar' Clauza START WITH precizeaz rândurile ce vor fi folosite ca baz a arborelui.19 Parcurgerea arborelui – punctul de start • Se specific condi iile ce trebuiesc îndeplinite. specific rândurile r d cin ale arborelui. Exemple: Folosind tabela EMPLOYEES. etc. 10. Aceast clauz este obligatorie pentru o interogare ierarhic adev rat . . Acestea pot fi selectate doar dintr-un singur tabel. este compararea cu o expresie. Aceast clauz poate fi folosit în conjunc ie cu orice alt clauz valid . s se parcurg arborele începând cu angajatul al c rui nume este Kochhar. pseudocoloana LEVEL întoarce 1 pentru un rând r d cin . pentru fiecare rând returnat de o interogare ierarhic . • Se poate folosi în conjunc ie cu orice alt condi ie valid . 2 pentru un copil al unei r d cini.. În sintax : SELECT LEVEL este o instruc iune SELECT standard. START WITH column1 = value De exemplu. Instruc iunea SELECT nu poate con ine un join sau o interogare bazat pe un view care con ine un join. pentru tabela EMPLOYEES. FROM table WHERE Condition START WITH CONNECT BY specific coloanele care con in elementele ce definesc PRIOR rows rela ia dintre p rinte şi copil.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Interog rile ierarhice pot fi identificate prin prezen a clauzelor CONNECT BY şi START WITH. adic punctul de plecare. preşedintele companiei.

ceea ce nu reflect o ierarhie real . parcurgerea arborelui are la baz toate rândurile din tabel. START WITH employee_id = (SELECT employee_id FROM employees WHERE last_name = 'Kochhar') Dac se omite clauza START WITH.. Serverul Oracle selecteaz întotdeauna copii prin evaluarea condi iei CONNECT BY din punctul de vedere al îndeplinirii cerin ei legate de rândul p rinte. CONNECT BY PRIOR column1 = column2 Parcurgerea tabelei EMPLOYEES de sus în jos CONNECT BY PRIOR column1 = column2 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice . . Rândurile pentru care condi ia este îndeplinit sunt copii pentru p rinte.. CONNECT BY PRIOR employee_id = manager_id Direc ia de parcurgere arborelui De sus în jos De jos în sus Column1 = Cheia p rinte Column2 = Cheia copil Column1 = Cheia copil Column2 = Cheia p rinte Direc ia de parcurgere a arborelui. este determinat de modul de scriere al coloanelor în clauza CONNECT BY PRIOR.. 10-289 . Operatorul PRIOR se refer la rândul p rinte. Pentru a determina un copil pentru un rând p rinte. Condi ia pus în clauza START WITH poate con ine o subinterogare.. acestea fiind luate în considerare drept puncte de pornire.. Dac este folosit o clauz WHERE. parcurgerea arborelui începe de la toate rândurile care satisfac condi ia WHERE. fie c este de la p rinte la copil sau de la copil la p rinte.. începe i cu angajatul Kochhar. START WITH manager_id IS NULL Folosind tabela EMPLOYEES. NOT : Clauzele CONNECT BY PRIOR şi START WITH nu sunt ANSI SQL standard. serverul Oracle evalueaz expresia PRIOR pentru rândul p rinte şi cealalt expresie pentru fiecare rând din tabel.

CONNECT BY employee_id = PRIOR manager_id Aten ie : Clauza CONNECT BY nu poate con ine o subinterogare. acel rând trebuie s aib valoarea din coloana MANAGER_ID egal cu valoarea coloanei EMPLOYEE_ID din rândul 10-290 ... manager_id FROM employees START WITH employee_id = 101 CONNECT BY PRIOR manager_id = employee_id. În urm torul exemplu. Pentru a fi calificat drept rând copil. Exemplul afişeaz lista şefilor începând cu angajatul al c rui ID este 101. De exemplu expresia din exemplul de mai sus poate fi scris şi sub forma de mai jos.. în mod special. CONNECT BY PRIOR employee_id = manager_id AND salary > 15000. imediat dup CONNECT BY. valorile pentru EMPLOYEE_ID sunt evaluate pentru rândul p rinte şi MANAGER_ID iar valorile salariilor sunt evaluate pentru rândurile copil. CONNECT BY PRIOR manager_id = employee_id Operatorul PRIOR nu necesit cod.. Operatorul PRIOR este aplicat doar asupra valorilor din coloana EMPLOYEE_ID.. last_name. . .. job_id... rezultatul fiind acelaşi. Parcurgerea arborelui de jos în sus SELECT employee_id. .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: defini i o rela ie ierarhic parcurgând tabelul EMPLOYEES de sus în jos. CONNECT BY PRIOR employee_id = manager_id Pentru a parcurge tabela de jos în sus condi ia devine : . astfel încât valoarea pentru EMPLOYEE_ID din rândul p rinte s fie egal cu cea pentru MANAGER_ID din rândul copil.

Locurile unde 10-291 . Aceasta va face ca raportul dvs. Folosirea pesudocoloanei LEVEL pentru clasificarea rândurilor Pute i afişa în mod explicit rangul sau nivelul unui rând în ierarhie folosind pseudocolana LEVEL. s fie mult mai explicit. Parcurgerea arborelui de sus în jos SELECT last_name||' reports to '|| PRIOR last_name "Walk Top Down" FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice p rinte şi trebuie s aib salariul mai mare de $15.000.

Matos. Lorentz. King este r d cina sau nodul p rinte (LEVEL = 1). Formatarea rapoartelor ierarhice folosind LEVEL şi LPAD Crea i un raport care s afişeze nivelele de management ale companiei începând de la nivelul cel mai înalt şi identifica i fiecare nivel de subordonare. Mourgos.LENGTH(last_name)+(LEVEL*2)-2. etc. Kochhar. COLUMN org_chart FORMAT A12 SELECT LPAD(last_name. Abel. Valorile pseudocoloanei LEVEL sunt: • Nod r d cin . 10-292 caractere folosind secven a de caractere din char2. Vargas. aliniat la stânga pe lungime de n În exemplul de mai sus : • LPAD(last_name. Grant şi Goyal sunt copii şi frunze (LEVEL = 3 şi LEVEL = 4). Taylor.n [. Un nod p rinte este un nod care are copii. . Diagrama de mai sus prezint nodurile unui arbore întors precum şi valorile pentru fiecare nivel. De exemplu. Ernst. În exemplu. LENGTH(last_name)+(LEVEL*2) -2. angajatul Higgens este şi p rinte şi copil pe când angajatul Davies este doar un copil şi o frunz . Un nod copil este un nod care nu este r d cin . • Copil al unui copil . Num rule nivelelor ce este returnat de o interogare ierarhic poate fi limitat de memoria disponibil . Un nod frunz este orice nod care nu are copiii. Zlotkey. Gietz. Argumentul n reprezint lungimea total a valorii returnate aşa cum este afişat pe ecran. Not : un nod rădăcină este nodul de cel mai înalt nivel dintr-un arbore inversat.char2]) întoarce char1. Hartstein. De Hann. • LPAD(char1. Whalen. Davies. Rajs.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice una sau mai multe ramuri se despart dintr-o ramur mare sunt numite noduri iar locul unde o ramur ia sfârşit se numeşte frunz sau frunza nodului.'_') AS org_chart FROM employees START WITH last_name='King' CONNECT BY PRIOR employee_id=manager_id Se asigneaz nodurilor arborelui câte un num r de nivel folosind func ia LPAD împreun cu pseudocoloana LEVEL pentru a afişa un raport ierarhic sub forma unui arbore identat. Higgens şi Hunold sunt copii şi deasemeni p rin i (LEVEL = 2).'_') defineşte formatul de afişare. • Copil al unui nod r d cin .

Celelalte rânduri sunt afişate dup acelaşi principiu. acesta înseamn c pute i controla care noduri şi rânduri vor fi afişate.2. LEVEL = 2 deci (2 * 2)-2 = 4-2 = 2 aşadar Kochhar va avea 2 caractere '_' şi este afişat identat.• char1 este LAST_NAME . Pentru King. Pentru Kochhar. 10-293 . CONNECT BY PRIOR employee_id = manager_id AND last_name != Higgins' Pute i folosi clauzele WHERE şi CONNECT BY pentru a t ia arborele. Predicatul pe care îl folosi i ac ioneaz ca o condi ie Boolean . n este lungimea total a valorii returnate. adic lungimea lui LAST_NAME +(LEVEL*2)-2 iar char2 este '_'. WHERE last_name != 'Higgins' Folosi i clauza CONNECT BY pentru a elimina o ramur . Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice T ierea ramurilor Folosi i clauza WHERE pentru a elimina un nod. LEVEL = 1 deci (2 * 1)-2 = 22 = 0. Cu alte cuvinte i se spune motorului SQL s scrie la stânga valorii LAST_NAME atâtea caractere '_' câte sunt date de valoarea lui LENGTH(last_name)+(LEVEL*2). aşadar King nu va avea niciun caracter '_' şi este afişat în coloana 1.

last_name. employee_id. job_id. Pornind de la r d cin .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu: Pornind de la r d cin . employee_id. parcurge i arborele de sus în jos şi elimina i angajatul Higgins din rezultat procesând îns rândurile copil. salary FROM employees WHERE last_name != 'Higgins' START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id.last_name. SELECT department_id. parcurge i arborele de sus în jos şi elimina i angajatul Higgins din rezultat şi toate rândurile copil. salary FROM employees START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id AND last_name != 'Higgins'. 10-294 . SELECT department_id. job_id.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 10. excluzând-ul pe Zlotkey. Sorta i rezultatele în ordinea descresc toare a salariului. 3. 10-295 . Scrie i o interogare pentru a afişa num rul angajatului şi numele s u pentru to i angaja ii care câştig mai mult decât salariul mediu. Scrie i o interogare care s afişeze num rul şi numele angajatului pentru to i cei care lucreaz într-un departament care de ine cel pu in un angajat al c rui nume con ine litera ‘ u ‘. 4. num rul departamentului şi func ia pe care lucreaz acesta pentru to i angaja ii al c ror ID de departament este 1700. Afişa i numele angajatului. Scrie i o interogare care s afişeze numele angajatului şi data angaj rii pentru to i angaja ii din acelaşi departament ca Zlotkey. 2. Salva i instruc iunea într-un fişier denumit pq3.sql.20 Exerci ii 1.

Afişa i numele şi salariul tuturor angaja ilor subordona i lui King. Afişa i num rul departamentului.sql pentru a afişa num rul. Executa i interogarea din nou. 8. num rul departamentului şi salariul oric rui angajat al c rui num r de departament şi salariu s se potriveasc cu num rul departamentului şi salariul oric rui angajat care câştig comision.sql. 7. 6.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 5. 10-296 . Scrie i o interogare care s afişeze numele. numele şi salariul tuturor angaja ilor care câştig mai mult decât salariul mediu şi totodat lucreaz într-un departament care de ine cel pu in un angajat ce con ine în numele sau litera ‘ u ‘. Modifica i pq3. Salva i fişierul ca pq7. numele şi func ia tuturor angaja ilor din departamentul numit „Executive”.

salary. data angaj rii şi salariul pentru to i angaja ii care au acelaşi salariu şi comision ca al lui Kochhar. Folosi i alias-uri pentru coloanele returnate de interogare. Scrie i o interogare care s afişeze to i angaja ii care câştig mai mult decât salariul mediu din departamentul lor. Afişa i numele. numele departamentului şi salariul oric rui angajat al c rui salariu şi comision se potrivesc cu salariul şi comisionul oric rui angajat care lucreaz în location ID=1700. 10-297 . 10.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 9. Afişa i coloanele last_name. 12. Afişa i coloanele employee_ ID. 13. Scrie i o interogare care s afişeze angaja ii care câştig un salariu mai mare ca al oric rui angajat cu JOB_ID = 'SA_MAN'. exclusiv Kochhar. Afişa i salariile ordonat de la cel mai mare la cel mai mic. department_ID şi media salarial pentru departament. dup exemplul de mai jos. Ordona i datele dup salariul mediu. 11. Scrie i o interogare care s afişeze numele. last_ name şi department_ID pentru acei angaja i care locuiesc în oraşe a c ror nume începe cu T.

sau de ce nu ? 15. b. Folosi i operatorul NOT EXISTS. mai 16. Se poate folosi operatorul NOT IN ? Cum. Scrie i o interogare care s afişeze numele angaja ilor care câştig pu in decât media salarial din departamentul lor. Afişa i to i angaja ii ce nu sunt supervisors. a.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 14. Scrie i o interogare care s afişeze numele angaja ilor care au unul sau mai 10-298 .

Scrie i o interogare care s afişeze numele de departament pentru acele departamente al c ror cost total cu salariile este peste 1/8 din costul total cu salariile al întregii companii. last_name şi department_name pentru to i angaja ii. Scrie i o interogare care s afişeze coloanele employee _ID. DEPARTMENT_NAME DEPT_TOTAL -----------------------------. Numi i interogarea SUMMARY. Folosi i clauza WITH. Folosi i în instruc iunea SELECT o subinterogare scalar pentru a g si numele departamentului. 18.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice mul i colegi de departament care s angajare mai târzii. aib salarii mai mari şi date de 17.---------Executive 58000 Sales 37100 10-299 .

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 19. Sunt acestea rezultate în urma proces rii unei subinterog ri ierarhice ? Explica i r spunsul dat. 10-300 . Privi i rezultatele de mai jos.

exclude i to i angaja ii ce au job_ ID egal cu IT_PROG şi exclude i-l pe De Haan şi to i subordona ii lui. Începe i cu persoanele de la nivelul superior. 23. Afişa i structura organizatoric a companiei afişând ierarhia managerial . Crea i un raport care s afişeze ierarhia managerilor pentru angajatul Lorentz.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 20. Crea i un raport identat care s afişeze ierarhia managerial începând de la angajatul cu numele Kochhar. Afişa i structura organiza ional a departamentului lui Mourgos specificând numele de familie. manager_ ID şi department_ID. Afişa i coloanele last_name. 10-301 . salariul şi id-ul departamentului. Afişa i mai întâi pe şeful s u direct. 22. Da i aliasuri coloanelor ca în exemplu. 21.

• Inserarea de înregistr ri într-un tabel (INSERT). din anumite cauze. Atunci când un client al b ncii doreşte s transfere bani dintr-un depozit într-un cont curent. Când se doreşte ad ugarea. SAVEPOINT şi ROLLBACK). .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 11 Instruc iuni pentru Manipularea Datelor Obiective: • Descrierea fiec rei comenzi DML(Data Manipulation Language). Atunci când.Se şterg înregistr ri existente dintr-o tabel . Imaginea de mai jos ilustreaz ad ugarea unui nou departament în tabelul DEPARTMENTS. . O comand DML este executat atunci când: . înregistrarea tranzac iei în jurnalul de tranzac ii. modificarea sau ştergerea datelor dintr-o baza de date. Ad ugarea unei noi înregistr ri într-un tabel. 11-302 . Serverul Oracle trebuie s garanteze c toate cele 3 comenzi SQL sunt executate în aşa fel încât sa men in echilibrul necesar între conturi. atunci celelalte comenzi ale tranzac iei trebuie s fie anulate. se execut o comand DML. Exemplu: Considera i o baz de date din domeniul bancar. dintr-o colec ie de comenzi DML care formeaz o Limbajul de manipulare a datelor (DML) este partea de baza a SQL.Se ad uga noi înregistr ri în tabel . O tranzac ie const unitate logic de lucru. creşterea sumei din contul curent. • Ştergerea înregistr rilor dintr-un tabel (DELETE): • Al turarea rândurilor unei tabele (MERGE): • Controlul tranzac iilor (COMMIT. • Actualizarea înregistr rilor dintr-un tabel (UPDATE).Se modifica înregistr rile existente într-o tabel . una dintre comenzile tranzac iei de mai sus nu se execut . tranzac ia ar putea consta în 3 opera ii separate: sc derea sumei din depozit. O colec ie de comenzi DML care formeaz o unitate logic de lucru se numeşte tranzacţie.

'Public Relations'. precizarea coloanelor fiind op ional . 11-303 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11. valoare este valoarea corespunz toare coloanei.]). INSERT INTO departments(department_id. manager_id. value.])] VALUES (value [.. În descrierea sintaxei: tabel este numele tabelului din baza de date. coloana este numele coloanei din tabelul respectiv. department_name. 1700). valorile se dau în ordinea prestabilit a coloanelor din tabel. La inserarea unei noi înregistr ri con inând valori pentru fiecare coloan . location_id) VALUES (70. 100.. column..1 Introducerea datelor-comanda INSERT Folosind comanda INSERT se pot ad uga noi înregistr ri într-un tabel. Not : Folosind aceast sintax pentru comanda INSERT se adaug numai câte un rând odat la un tabel.. INSERT INTO table [(column [.

Inserarea de înregistr ri cu valori de NULL Metoda implicit : Omiterea coloanei din list . de domeniu şi tip pentru date. 'Finance'. NULL). NULL. Serverul Oracle aplic automat toate constrângerile de integritate. Valori care duc la înc lcarea constrângerii de tip CHECK . Tip de data eronat. Valori care duc la înc lcarea constrângerii de tip cheie str in . INSERT INTO departments VALUES (100. 'Purchasing'). • Erorile uzuale ce apar la introducerea datelor sunt : Lipsa unei valori obligatoriu a fi introdus pentru o coloan ce nu admite valori de NULL . va primi o valoare nul în noua înregistrare. Valori multiple care încalc constrângerea de unicitate. • • • • • 11-304 . Orice coloan care nu este specificat explicit în list . Metoda explicit : • Specificarea cuvântului cheie NULL în lista de la clauza VALUES. Valoare mai mare decât maxima admis pentru acea coloan . Asigura i-v c pentru coloana vizat este permis valoarea NULL. preciza i lista coloanelor în sintaxa INSERT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice DESCRIBE departments Pentru claritate. • Specifica i şirul vid (‘’) în lista VALUES (numai pentru şiruri de caractere şi pentru valori de tip dat calendaristic ). INSERT INTO departments (department_id. department_name ) VALUES (30. Încadra i între ghilimele simple doar şirurile de caractere şi datele calendaristice nu şi valorile numerice.

secolul este implicit cel curent. commission _pct FROM EMPLOYEES WHERE EMPLOYEE_id = 113. NULL. phone_number. ora implicit este 00:00:00. În exemplu se înregistreaz informa ia despre angajatul Raphealy în tabela EMPLOYEES.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Inserarea unor valori speciale Func ia SYSDATE furnizeaz data şi timpul curent. hire_date. 100. YYYY'). last_name. Func ia USER furnizeaz numele utilizatorului curent. job_id. 'MON DD.email. Cu acest format.hire_date. 11000. 'AC_ACCOUNT'. trebuie folosit func ia TO_DATE. 1999.commission_pct. 'AC_ACCOUNT'. 205.first_name. manager_id. Dac o dat calendaristic necesit specificarea altui secol sau or . Exemplul de mai sus înregistreaz informa ia pentru angajatul Popp în tabela EMPLOYEES. job_id. 'Raphealy'. last_name.127. Inserarea unor valori specifice de tip dat calendaristic Exemplu: Ad ugarea unui nou angajat INSERT INTO EMPLOYEES VALUES (114. Deoarece data con ine de asemenea informa ii despre timp. '515.department_id) VALUES (113.NULL.'LPOPP'. Verificarea datelor ad ugate în tabel: SELECT EMPLOYEE_id. 1999'. Formatul DD-MON-YY este de obicei folosit pentru a insera o valoare de tip dat calendaristic . '515.124.'Louis'. SYSDATE. Inserarea de valori folosind variabile de substitu ie Se poate scrie o comand INSERT care s permit utilizatorului s 11-305 . Pentru a introduce data şi ora curent în câmpul HIREDATE este folosit func ia SYSDATE. 100). INSERT INTO EMPLOYEES (EMPLOYEE_id. TO_DATE ('FEB 3. Câmpul HIREDATE primeşte valoarea February 3.4561'.'Den'.'DRAPHEAL'.4567'. 'Popp'. 30). Se poate de asemeni folosi func ia USER la introducerea de valori într-un tabel. salary. 6900.

Acesta poate fi executat şi la fiecare execu ie sunt cerute valori noi pentru variabile. valorile date variabilelor pot fi diferite. location_id) VALUES (&department_id. department_name. deci se poate folosi acelaşi script pentru a introduce valori diverse în tabel .&location).&location). INSERT INTO departments (department_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice adauge valori în mod interactiv folosind variabilele de substitu ie SQL*Plus. Pentru a continua o comanda SQL*PLUS pe linia urm toare se foloseşte caracterul -. location_id) VALUES (&department_id. Crearea unui script Un script este un fişier cu extensia sql în care sunt memorate instruc iuni. Parametrul de substitu ie SQL*Plus nu trebuie precedat de & când este referit într-o comanda ACCEPT. se introduc informa iile pentru un nou departament în tabelul DEPARTMENTS. numele şi loca ia sunt cerute interactiv utilizatorului. ACCEPT expr PROMPT ’textul specificat’ Comanda ACCEPT memoreaz valoarea introdus variabila expr iar PROMPT afişeaz ’textul specificat’. Comenzile. Copierea înregistr rilor dintr-un alt tabel folosind comanda INSERT cu o subinterogare 11-306 . pot fi salvate într-un fişier. Num rul departamentului. Pentru valori de tip dat calendaristic sau şir de caractere. de utilizator în ACCEPT department_id PROMPT 'Introduceţi numărul departamentului:' ACCEPT department_name PROMPT 'Introduceţi numele departamentului:' ACCEPT location_id PROMPT 'Introduceţi oraşul:' INSERT INTO departments (department_id. ampersandul (&) şi numele variabilei sunt încadrate de ghilimele simple (apostrof). '&department_name'. care pot sa con in şi variabile de substitu ie. department_name. La execu ia comenzii SQL*Plus ACCEPT. De exemplu. '&department_name'.

email. Pentru ca INSERT s fie executat satisf c tor trebuie s ine i cont de toate regulile care se aplic asupra coloanelor din tabelul de baz . valorile pentru câmpuri fiind extrase dintr-un tabel existent. Instruc iunea SELECT a subinterog rii trebuie s aib acelaşi num r de coloane ca şi cel din clauza VALUES. salary.salary. department_id FROM employees WHERE department_id = 50) VALUES (99999. INSERT INTO tabel [ coloana ( . subinterogare este subinterogarea care returneaz înregistr rile în tabel. 'DTAYLOR'. nu pute i introduce valori duplicat sau nu este permis lipsa unei valori pentru o coloan care este obligatoriu NOT NULL. 4 rows created. În cadrul comenzii INSERT se poate folosi o subinterogare în locul numelui tabelului. 'Taylor'. 11-307 .hire_date. Pentru aceasta se foloseşte în locul clauzei VALUES o subinterogare.'ST_CLERK'. name. 50). Folosirea subinterogarilor în comanda INSERT INSERT INTO (SELECT employee_id.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Comanda INSERT poate fi folosit pentru a adaug înregistr ri într-un tabel. commission_pct) SELECT EMPLOYEE_id. coloana ) ] Subinterogare. INSERT INTO sales_reps(id. 1 row created. salary. unde: tabel este numele tabelului din baza de date coloana este numele coloanei din tabelul în care se face inserarea. 5000. commission_pct FROM EMPLOYEES WHERE job_id LIKE '%REP%'. last_name. Num rul şi tipul câmpurilor (coloanelor) din lista specificat în comanda INSERT trebuie s corespund num rului şi tipului valorilor din subinterogare. TO_DATE('07-JUN-99'. 'DD-MON-RR').last_name. De exemplu.job_id.

] [WHERE condition]. constante. În sintaxa de mai sus: tabel este numele tabelului. nume de coloane.. UPDATE table SET column = value [. coloana este numele coloanei din tabelul în care se face modificarea. subinterog ri şi operatori de comparare.. Pute i avea confirmarea execut rii opera iei de modificare prin interogarea 11-308 . Folosind comanda UPDATE se pot modifica simultan valorile pentru unul sau mai multe rânduri din tabel .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11.comanda UPDATE Figura de mai sus arat modificarea num rului departamentului pentru cei din departamentul 60 în 30.. Înregistr rile existente pot fi modificate folosind comanda UPDATE. column = value. Condiţie identific înregistr rile care trebuie modificate şi este alc tuita din expresii. Valoare este noua valoare sau o subinterogare ce produce noua valoare pentru coloana ce se modific .2 Modificarea datelor .

Actualizarea înregistr rilor folosind subinterog ri dup mai multe câmpuri În clauza SET a unei comenzi UPDATE pot fi implementate subinterog ri dup mai multe câmpuri.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice tabelului. UPDATE table SET column = (SELECT column FROM table WHERE condition) [ . sunt modificate toate înregistr rile dintr-un tabel. 22 rows updated. Exemplul urm tor transfer angajatul cu num rul 113 în departamentul 70. identificarea unei singure înregistr ri în tabelul EMPLOYEES prin nume poate fi periculoas . UPDATE copy_emp SET department_id = 110. Folosirea altor coloane poate determina modificarea mai multor înregistr ri. column = (SELECT column FROM table WHERE condition)] [WHERE condition ] . Dac omite i clauza WHERE. 11-309 . De exemplu. afişând rândurile modificate. NOT : În general. UPDATE employees SET department_id = 70 WHERE employee_id = 113. Modific pentru angajatul cu num rul 114 func ia şi salariul astfel încât ele s coincid cu cele ale angajatului num rul 205. 1 row updated. Comanda UPDATE modific anumite înregistr ri dac este specificat clauza WHERE. folosi i cheia primara pentru a identifica o singur înregistrare. deoarece pot exista mai mul i angaja i cu acelaşi nume.

DEPARTMENTS. Dac încerca i s atribui i unui câmp o valoare care este legat de o constrângere de integritate. Actualizarea înregistr rilor folosind valori dintr-un alt tabel Exemplul de mai jos arat cum se pot folosi subinterog ri în comenzi UPDATE pentru a actualiza înregistr rile dintr-un tabel pe baza valorilor din alt tabel. UPDATE employees * ERROR at line 1: ORA-02291: integrity constraint (HR. Un capitol urm tor va dezvolta acest subiect mai pe larg. 1 row updated. va rezulta o eroare. 11-310 . departamentul cu num rul 55 nu exista în tabelul p rinte. 1 row updated. În exemplul de mai sus. Înc lcarea constrângerii de integritate UPDATE employees SET department_id = 55 WHERE department_id = 110.EMP_DEPT_FK) violated-parent key not found NOT : Constrângerile de integritate asigur faptul c datele ader la un set predefinit de reguli. salary = (SELECT salary FROM employees WHERE employee_id = 205) WHERE employee_id = 114.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice UPDATE employees SET job_id = (SELECT job_id FROM employees WHERE employee_id = 205). UPDATE copy_emp SET department_id = (SELECT department_id FROM employees WHERE employee_id = 100) WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 200). şi astfel ve i ob ine eroarea parent key violation ORA02291 aşa cum se arata mai jos.

SELECT * FROM departments WHERE department_name = 'Finance'. 1 row deleted. V pute i asigura c ştergerea s-a f cut corect. DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%'). În sintaxa: tabel este numele tabelei. DELETE FROM copy_emp. Dac se omite clauza WHERE se vor şterge toate rândurile din tabela. subinterog ri şi operatori de comparare. Ştergerea înregistr rilor folosind valori dintr-un alt tabel Folosi i subinterog ri în comanda DELETE pentru a şterge înregistr rile dintr-un tabel pe baza valorilor din alt tabel. 1 row deleted. DELETE FROM departments WHERE department_name = 'Finance'. no rows selected. 11-311 . Condiţie identific înregistr rile care trebuie şterse şi este alc tuit din expresii. Se pot şterge doar anumite înregistr ri prin specificarea clauzei WHERE în comanda DELETE. încercând afişarea rândurilor şterse printr-un SELECT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11. nume de coloane.comanda DELETE Folosind comanda DELETE se pot şterge înregistr ri dintr-un tabel.3 Ştergerea datelor . constante. DELETE [FROM] table [WHERE condition]. Exemplul de mai jos arat cum se procedeaz pentru a şterge departamentul 'Finance' din tabelul DEPARTMENTS.

job_id. email. last_name. Subinterogarea caut în tabela DEPARTMENTS num rul de departament pentru 'Public'.'ST_CLERK'. 'DD. 'Smith'. folosind informa iile din alt tabel.hire_date. Ştergerea provoac o eroare deoarece num rul de departament este folosit ca şi cheie extern în tabelul EMPLOYEES. Dac înregistrarea p rinte pe care încerca i s o şterge i are înregistr ri copil. DELETE FROM departments WHERE department_id = 60. 5000).TO_DATE('07-JUN-99'. ve i ob ine o eroare. 11-312 . 'JSMITH'.EMP_DEPT_FK) violated-child record found Nu pute i şterge o înregistrare care con ine o cheie primar folosit ca cheie extern în alt tabel.MON-RR'). salary FROM employees WHERE department_id = 50 WITH CHECK OPTION) VALUES (99998. atunci ve i primi un mesaj de eroare: child record found violation ORA-02292. DELETE FROM departments * ERROR at line 1: ORA-02292: integrity constraint (HR. Exemplul de mai sus şterge to i angaja ii care sunt în departamentul ce con ine în numele sau şirul 'Public'.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Pute i folosi subinterog ri pentru a şterge înregistr ri dintr-un tabel. INSERT INTO (SELECT employee_id. Folosirea sintagmei WITH CHECK OPTION în instruc iuni de tip DML În exemplul de mai jos se foloseşte o subinterogare pentru a identifica tabelul şi coloanele pentru instruc iunea DML. Înc lcarea constrângerii de integritate Dac încerca i ştergerea unei înregistr ri care con ine un câmp cu o valoare legat de o constrângere de integritate. În exemplul de mai jos se încearc ştergerea departamentului cu num rul 60 din tabelul DEPARTMENTS. care şterge înregistr ri din EMPLOYEES pe baza acestuia. apoi furnizeaz num rul de departament interog rii principale. Sintagma WITH CHECK OPTION împiedic schimbarea rândurilor care nu sunt în subinterogare.

Dac nu exist o valoare implicit se va folosi valoarea NULL. ar duce la înserarea unei valori care nu este în subinterogare. instruc iunea INSERT foloseşte o valoare implicit pentru coloana MANAGER_ID. DEFAULT). Subinterogarea identific rândurile care sunt în departamentul 50. Ea permite utilizatorului s controleze locul şi timpul la care op iunea DEFAULT va fi aplicat datelor. UPDATE sau DELETE nu sunt permise nici un fel de schimb ri asupra rândurilor care nu sunt în subinterogare. 'Engineering'. Folosirea op iunii DEFAULT explicit Folosind op iune DEFAULT explicit pute i s folosi i cuvântul cheie DEFAULT drept valoare pentru o coloan acolo unde aceasta este necesar . manager_id) VALUES (300. care are pentru department_ID valoarea null.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice INSERT INTO * ERROR at line 1: ORA-01402: view WITH CHECK OPTION where-clause violation Specifica i WITH CHECK OPTION pentru a indica faptul c . Dac nu este definit nicio valoare implicit pentru aceast coloana se va insera o valoare de NULL. Înserarea acestui rând. Introducerea acestei op iuni a fost f cut în scopul alinierii la cerin ele standardului SQL: 1999. Cel de-al doilea exemplu foloseşte instruc iunea UPDATE pentru a atribui coloanei MANAGER_ID valoarea implicit pentru cei din departamentul 10. În primul exemplu. dac se foloseşte o subinterogare în locul numelui tabelului într-o instruc iune de tip INSERT. DEFAULT cu INSERT INSERT INTO departments (department_id. 11-313 . Op iunea DEFAULT explicit poate fi folosit în instruc iunile INSERT şi UPDATE pentru a identifica o valoare implicit pentru coloan . În exemplu este folosit sintagma WITH CHECK OPTION. dar department_ID nu este în lista de la SELECT deci nu este prev zut o valoare pentru department_id în lista clauzei VALUES. department_name. DEFAULT cu UPDATE UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10.

De exemplu.4 Instrucţiunea MERGE • • • • Prevede posibilitatea de a introduce sau modifica datele din tabel în mod condi ionat. unele dintre ele putând fi duplicate. Instruc iunea MERGE este determinist . Instruc iunea MERGE este potrivit pentru unele aplica ii de tip warehousing. Este uşor de folosit şi duce la creşterea performantelor: Este folositoare în aplica ii ce gestioneaz volum mare de date. Folosind aceasta instruc iune se pot modifica sau insera rânduri într-o tabel în mod condi ionat ceea ce previne scrierea mai multor instruc iuni UPDATE. O abordare alternativ ar fi folosirea buclelor PL/SQL şi mai multe instruc iuni DML. 11. Previne scrierea mai multor instruc iuni UPDATE . Decizia de a modifica sau introduce rânduri în tabela inta se bazeaz pe clauza condi ional ON. 11-314 . • SQL a fost extins în vederea introducerii instruc iunii MERGE. trebuie s ave i drepturi pentru modificarea sau ad ugarea de rânduri în tabela int şi dreptul de a selecta datele din tabela surs . Execut un UPDATE dac rândul exist şi un INSERT dac este un rând nou. într-o asemenea aplica ie s-ar putea s fi i nevoi i s lucra i cu date ce provin din mai multe surse. valoarea pentru coloana MANAGER_ID va fi NULL. Nu pute i s face i UPDATE de mai multe ori asupra aceluiaşi rând din tabela folosind aceeaşi instruc iune MERGE. Folosind instruc iunea MERGE pute i ad uga sau modifica rândurile în mod condi ionat. Valoarea implicit pentru o coloan se specific în momentul cre ri tabelei. Instruc iunea MERGE este dealtfel uşor de folosit şi mult mai simplu de scris fiind o singur instruc iune de tip SQL.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Dac nu este definit o valoare implicit . Deoarece instruc iunea MERGE combin instruc iunile INSERT şi UPDATE.

first_name = e. WHEN MATCHED d instruc iuni serverului asupra felului în care s Sau r spund la rezultatul condi iei de join. . e. e. ON clauz condi ional pe baza c reia MERGE execut fie modificarea fie inserarea datelor . e. e.first_name.employee_id. USING identific sursa datelor ce vor fi modificate sau inserate.phone_number. aceste rânduri din tabela COPY_EMP ar fi modificate pentru a con ine valori identice cu cele din tabela EMPLOYEES. c. e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id. 11-315 . În exemplul de mai sus este evaluat condi ia c.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice MERGE INTO table_name AS table_alias USING (table|view|sub_query) AS alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = col_val1.employee_id = e. view sau subinterogare . WHEN NOT MATCHED MERGE INTO copy_emp AS c USING employees e ON (c. e.department_id).department_id = e.email. poate fi o tabel . condi ia returneaz false deci se execut clauza WHEN NOT MATCHED iar instruc iunea MERGE insereaz rândurile din tabela EMPLOYEES în tabela COPY_EMP.employee_id) WHEN MATCHED THEN UPDATE SET c. În sintaxa : INTO specific tabela inta pe care se face UPDATE sau INSERT ... Dac tabela COPY_EMP ar con ine rânduri care ar avea în coloana employee_ID valori egale cu cele din tabela EMPLOYEES. e.hire_date.salary.employee_id = e.last_name = e.last_name.first_name. e.last_name.job_id. col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values). Deoarece tabela COPY_EMP nu are înregistr ri. e. c.manager_id.commission_pct. e.

Tranzac iile constau din comenzi DML care realizeaz o schimbare consistenta asupra datelor. . . Rezultatele unei comenzi 11-316 . Tranzac iile ofer mai mult flexibilitate şi control la modific ri aduse datelor şi asigur consisten a datelor în eventuala c dere a sistemului sau în cazul unei erori a procesului utilizator.Deconectarea utilizatorului. urm toarea tranzac ie va începe automat la prima comanda SQL executabila întâlnit .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11. Opera ia de creditare nu ar trebui sa poat fi efectuata f r ca cea de debitare sa fie executat cu succes.C derea sistemului. O comanda DDL. Se termin la apari ia unuia dintre urm toarele evenimente: . fie sa eşueze împreun . un transfer de fonduri între dou conturi ar trebui sa includ modificarea debitului unui cont şi creditului celuilalt cont cu aceeaşi sum de bani. Serverul Oracle asigur consisten a datelor pe baza tranzac iilor. . Dup ce se încheie o tranzac ie. De exemplu. Const dintr-o singur comand DDL Const dintr-o singur comand DCL Tranzac ii în baze de date: • Încep odat cu execu ia primei comenzi SQL executabile.COMMIT sau ROLLBACK. O comanda DCL. Ambele ac iuni ar trebui fie s reuşeasc împreun .Execu ia unei comenzi DDL sau DCL ( automatic commit). Tipuri de tranzac ii: Tip Limbaj de manipulare a datelor (DML) Limbaj de definire a datelor (DDL) Limbaj de control al datelor (DCL) • Descriere Consta din orice num r de comenzi DML pe care serverul Oracle le trateaz ca o singur entitate sau unitate logic de lucru.5 Tranzacţii • • • Tranzac iile constau dintr-un grup format din urm toarele comenzi: Comenzi DML care duc la o schimbare consistent a datelor.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice DDL sau DCL sunt salvate automat (automat commit) motiv pentru care tranzac ia se încheie în mod implicit. COMMIT. Controlul tranzac iilor Comenzi pentru controlul explicit al tranzac iilor Pute i controla logica tranzac iilor folosind comenzile. Controlul tranzac iilor INSERT COMMIT UPDATE Savepoint A INSERT DELETE Savepoint B ROLLBACK to Savepoint B ROLLBACK to Savepoint A ROLLBACK 11-317 . • Grupeaz opera ii rela ionate logic. • Ofer posibilitatea revederii schimb rilor f cute înainte de a le salva.SAVEPOINT şi ROLLBACK. Avantajele comenzilor COMMIT şi ROLLBACK: • Asigur consisten a datelor.

Procesarea implicit a tranzac iilor Un commit (salvarea modific rilor) automat are loc în urm toarele circumstan e: • Este dat o comanda DDL. Rollback complete. f r a da explicit o comand COMMIT sau ROLLBACK.. pierzându-se toate modific rile temporare (pending changes) asupra datelor. Un rollback automat are loc în condi iile unei termin ri anormale a sesiunii SQL*Plus sau în cazul unei 'c deri' de sistem.. INSERT. ROLLBACK TO update_done. f r o comand COMMIT sau ROLLBACK explicit Terminare anormal a SQL*Plus sau c dere sistem Rollback automat 11-318 . SAVEPOINT nume ROLLBACK [TO SAVEPOINT name] Not : SAVEPOINT nu este ANSI standard SQL.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Comanda COMMIT Descriere Încheie actuala tranzac ie f când ca toate modific rile s devin permanente (salveaz modific rile) Marcheaz un punct de întoarcere (savepoint) în cadrul tranzac iei curente Comanda ROLLBACK încheie tranzac ia curent . • O p r sire normal a mediului SQL*Plus. SAVEPOINT update_done. Savepoint created. UPDATE. • Este dat o comanda DCL.. ROLLBACK TO SAVEPOINT name şterge savepoint-ul şi toate schimb rile de dup el (temporare).. Stare Commit automat Circumstan e Comanda DDL sau DCL Ieşire normal din SQL*Plus.

Astfel. starea ini ial a datelor poate fi ref cut . To i utilizatorii pot vedea rezultatele. Starea datelor înainte de un COMMIT sau ROLLBACK Opera iile de manipulare a datelor afecteaz ini ial buffer-ul bazei de date. Comanda SQL*Plus AUTOCOMMIT poate fi setat ON sau OFF. Înregistr rile afectate sunt protejate (locked). SQL*Plus p streaz integritatea tabelelor (bazelor de date). Serverul Oracle instituie o consisten la citire pentru a se asigura c fiecare utilizator vede datele aşa cum existau ele în momentul ultimei salv ri. C derile sistemului: Când o tranzac ie este întrerupt de o c dere a sistemului. Înregistr rile protejate (locked) sunt deblocate pentru modificare şi pot fi schimbate de al i utilizatori.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Not : În SQL*Plus mai este disponibil şi o a treia comand . COMMIT poate fi dat explicit. Dac este setat pe OFF. Starea datelor dup COMMIT • • • • Modific rile asupra datelor din baza de date devin permanente. Dac este setat pe ON. Salvarea modific rilor Fiecare modificare efectuat în timpul tranzac iei este temporar pân la apari ia unui 'commit' (pân la 'salvarea' tranzac iei). fiecare comand DML individual duce la salvarea modific rilor. de aceea. 11-319 • . De asemeni. al i utilizatori nu pot face modific ri asupra lor. Starea anterioar a datelor nu mai poate fi ref cut . imediat ce este executat . Nu se mai poate reveni la situa ia dinainte (un rollback nu mai este posibil). întreaga tranzac ie este automat pierdut (este 'rolled back'). Utilizatorul curent poate urm ri schimb rile f cute prin interogarea tabelelor. Al i utilizatori nu pot vedea modific rile f cute de utilizatorul curent. COMMIT este executat odat cu o comanda DDL sau la ieşirea din SQL*Plus. Toate savepoint-urile sunt şterse. Aceasta împiedic ca eroarea s determine schimb ri nedorite asupra datelor şi reface starea bazelor din momentul ultimului COMMIT (explicit sau implicit).

Starea datelor dup ROLLBACK Pentru a anula modific rile temporare f cute folosi i comanda ROLLBACK.000 rows deleted. Pute i corecta greşeala. Astfel. 11-320 . 'Corporate Tax'. 1 row deleted. 1700). Rollback complete. iar apoi s da i comenzile corecte şi s salva i modific rile. ROLLBACK. Commit complete. SELECT * FROM test WHERE id = 100. tranzac ia poate fi împ r it în sec iuni mai mici. Commit complete. 1 row inserted. DELETE FROM test WHERE id = 10 1 row deleted. Dac crea i un al doilea savepoint cu acelaşi nume ca unul anterior. 25. Exemplu: Încercând s şterge i o înregistrare din tabelul TEST. NULL. COMMIT. Anularea modific rilor pana la un savepoint Pute i crea un marcaj în cadrul tranzac iei curente folosind comanda SAVEPOINT. • Starea anterioar a datelor este ref cut . INSERT INTO departments VALUES (290. Prin folosirea comenzii COMMIT modific rile devin permanente. No rows selected. • Protec ia asupra înregistr rilor implicate este ridicat . Exemplul de mai sus şterge din tabelul EMPLOYEES rândul ce are employee_id egal cu 99999 şi apoi introduce în tabela DEPARTMENTS un rând nou. DELETE FROM test. Salva i modific rile COMMIT. pute i şterge accidental întreg tabelul. Pute i apoi anula modific rile temporare pân la acel marcaj folosind comanda ROLLBACK TO SAVEPOINT. • Modific rile aduse datelor sunt pierdute.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu : Faceţi modificările: DELETE FROM employees WHERE employee_id = 99999.

dar schimb rile f cute de comenzile DML anterioare în tranzac ie nu vor fi anulate. Consisten a la citire este necesar pentru ca: . 11-321 . chiar dac comanda DDL nu se execut cu succes.Schimb rile f cute de un utilizator s nu intre în conflict sau s afecteze schimb rile f cute de un altul. Asigur c . . efectul ei este anulat printr-un rollback la nivel de comand . . nu pute i anula comenzile anterioare pentru c serverul a executat un commit (a salvat modific rile).Cei care citesc/modific datele s aib o vedere consistent a datelor.Cei care modific datele s aib siguran a c schimb rile în baza de date se fac în mod consistent. Este bine ca tranzac iile s fie explicit finalizate prin executarea unei comenzi COMMIT sau ROLLBACK. Oracle execut o comanda COMMIT implicit înainte şi dup orice comanda DDL.Cei care modific datele s nu trebuie s îi aştepte pe cei care le citesc. • • Utilizatorii bazei de date acceseaz tabelele din baza în dou moduri: . pentru aceleaşi date: . DELETE).Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice savepoint-ul anterior este şters. Schimb rile f cute de un utilizator nu intr în conflict cu schimb rile realizate de un altul.Opera ii de citire (comanda SELECT). Rollback la nivel de comand Se poate anula o parte din tranzac ie printr-un rollback implicit dac este detectat o eroare la execu ia unei comenzi. Scopul consisten ei la citire este s asigure c fiecare utilizator vede datele în starea în care erau la ultima salvare. Ele pot fi salvate (commited) sau anulate (rolled back) în mod explicit de c tre utilizator.Cei care citesc datele s nu vad datele care sunt în curs de modificare. Dac o singur comanda DML eşueaz în timpul execu iei unei tranzac ii. Deci. .6 Consistenţa la citire • Consistenta la citire garanteaz o vedere consistent datelor în fiecare moment. UPDATE.Cei care citesc datele nu trebuie s îi aştepte pe cei care le modific . 11. înainte s înceap o opera ie DML. .Opera ii de scriere (comenzile INSERT. .

schimb rile sunt la rândul lor anulate. serverul Oracle scrie o copie a datelor dinainte de modificare într-un segment rollback. Dac tranzac ia este anulat . Versiunea original mai veche a datelor din segmentul rollback este scris înapoi în tabel. ei vad datele din segmentul rollback. Spa iul ocupat de 'vechile' date din segmentul rollback este eliberat pentru a fi reutilizat. Exista dou modalit i de protec ie : Exclusiv şi Partajat . Protec ia la scriere (locking) Protec ia Oracle: • Previne interac iunile destructive între tranzac ii concurente. 11-322 . numai utilizatorul care modific datele vede baza de date modificat . • Foloseşte în mod automat cel mai mic nivel de restric ionare.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Consisten a la citire este implementat în mod automat. Aceasta garanteaz c utilizatorii citesc consistent datele care nu sufer schimb ri chiar în acel moment. • Este valabil pe durata unei tranzac ii. v d baza de date în starea de dinaintea începerii modific rii. fie obiecte sistem care nu sunt vizibile utilizatorilor (de exemplu structuri de date partajate şi înregistr ri "data dictionary"). • Nu necesit ac iuni din partea utilizatorului. To i utilizatorii. to i ceilal i v zând datele din segmentul rollback. Înainte ca schimb rile s fie salvate în baza de date. Protec iile (locking) sunt mecanisme care previn interac iunea destructiv între tranzac ii ce acceseaz aceeaşi resurs : fie un obiect utilizator (de exemplu tabele sau înregistr ri). cu excep ia celui care a ini iat modificarea. actualizare sau ştergere asupra bazei de date. Când o comand DML este salvat . To i utilizatorii v d baza de date aşa cum era înainte de a începe tranzac ia. Este p strat o copie par ial a bazei de date în segmente rollback. Când se realizeaz o opera ie de ad ugare. schimbarea f cut în baza de date devine vizibil oricui execut o comanda SELECT.

ALTER TABLE employees ADD(department_name VARCHAR2(14)). Implicit.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Cum protejeaz Oracle datele Protejarea unei baze de date Oracle este automatizat în întregime şi nu necesit ac iuni din partea utilizatorului.department_id = d. protejarea are loc pentru toate comenzile SQL cu excep ia lui SELECT. partajat (share lock) 11.7 Correlated UPDATE În cazul instruc iunii UPDATE se poate folosi o subinterogare corelat pentru a modifica rândurile dintr-un tabele pe baza valorilor dintr-un alt tabel. Prima tranzac ie care blocheaz resursa în mod exclusiv este singura tranzac ie care poate modifica resursa pân când protec ia exclusiv este anulat . Mecanismul implicit de protec ie în Oracle foloseşte în mod automat cel mai mic nivel aplicabil de restric ionare. Mai mul i utilizatori care citesc datele le pot folosi în comun prin crearea unor protec ii partajate ce împiedic accesul concurent pentru scriere (care necesit o protec ie exclusiv ).column = alias2. Oracle foloseşte dou moduri de protec ie într-o baz de date multiutilizator. UPDATE employees e SET department_name = (SELECT department_name FROM departments d WHERE e. precum şi integritatea maxima a datelor. Permite partajarea resursei. Mod de protec ie exclusiv (exclusiv lock) Descriere Împiedic partajarea unei resurse. Mai multe tranzac ii pot ob ine protec ii partajate pentru aceeaşi resurs . 11-323 . UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.department_id). furnizând astfel cel mai mare grad de concuren existent. Oracle permite şi protejarea manual a datelor de câtre utilizator.column).

column).EMPLOYEE_id)) WHERE EMPLOYEES. Tabela REWARDS poate con ine mai multe rânduri care s aib aceeaşi valoare pentru câmpul EMPLOYEE_ID. 11.EMPLOYEE_id AND payraise_date = (SELECT MAX(payraise_date) FROM rewards WHERE EMPLOYEE_id = EMPLOYEES.column = alias2. coloana SALARY din tabela EMPLOYEES este actualizat astfel încât s reflecte ultima creştere salarial primit de un angajat. Acest lucru se realizeaz prin ad ugarea la salariul actual a m ririi de salariu corespunz toare din tabela REWARDS. În cazul unei instruc iuni DELETE se poate folosi o subinterogare corelat pentru a şterge acele rânduri care exist şi într-o alt tabel .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplul de mai sus ad ug o coloana la tabelul EMPLOYEES pentru numele departamentului şi apoi introduce valori în aceast coloana folosind un UPDATE corelat.salary + rewards. Acest exemplu foloseşte tabela REWARDS care are coloanele EMPLOYEE_ID. UPDATE EMPLOYEES SET salary = (SELECT EMPLOYEES.8 Correlated DELETE DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1. PAY_RAISE şi PAYRAISE_DATE. Folosi i o comanda UPDATE corelat pentru a modifica rândurile din tabela EMPLOYEES pe baza valorilor din tabela REWARDS. Coloana PAYRAISE_DATE are menirea de a identifica cea mai recent creştere salarial primit de un angajat.EMPLOYEE_id IN (SELECT EMPLOYEE_id FROM rewards). 11-324 . valoarea creşterii salariale şi data la care a fost executat . În exemplu. De fiecare dat când un angajat primeşte o creştere de salariu se înregistreaz în aceast tabel un rând ce con ine valoarea pentru EMPLOYEE_ ID.pay_raise FROM rewards WHERE EMPLOYEE_id = EMPLOYEES.

EMPLOYEE_id = E.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice De exemplu. aşa c ar fi o greşeal dac aceleaşi înregistr ri despre un angajat ar exista în ambele tabele. • Tabela EMPLOYEES_HISTORY care con ine detalii despre func iile anterior de inute de angaja i. atunci când un angajat se transfer pe o a cincea func ie. Instruc iunea Multitable INSERT ofer o îmbun t ire semnificativ performan elor din urm toarele puncte de vedere: 11-325 a .EMPLOYEE_id). dac decide i ca în tabela JOB_HISTORY s p stra i doar ultimele patru înregistr ri pentru un angajat. Folosi i o subinterogare corelat pentru a şterge doar acele rânduri din tabela EMPLOYEES care exist şi în tabela EMPLOYEES_HISTORY. Exemplul ilustreaz rezolvarea acestei probleme folosind un DELETE corelat. DELETE FROM job_history JH WHERE EMPLOYEE_id = (SELECT EMPLOYEE_id FROM EMPLOYEES E WHERE JH. ve i şterge cel mai vechi rând din tabel privitor la angajatul în discu ie prin c utarea valorii MIN(START_DATE).EMPLOYEE_id GROUP BY EMPLOYEE_ID HAVING COUNT(*) >= 4)). Instruc iunile Multitable INSERT Instruc iunea INSERT…SELECT poate fi folosit pentru a introduce rânduri în mai multe tabele ca parte a unei singure instruc iuni DML. În acest exemplu se folosesc dou tabele: • Tabela EMPLOYEES care con ine detalii despre to i angaja ii. DELETE FROM EMPLOYEES E WHERE EMPLOYEE_id = (SELECT EMPLOYEE_id FROM EMPLOYEES_history WHERE EMPLOYEE_id = E.EMPLOYEE_id AND START_DATE = (SELECT MIN(start_date) FROM job_history JH WHERE JH.EMPLOYEE_id) AND 5 > (SELECT COUNT(*) FROM job_history JH WHERE JH.EMPLOYEE_id = E. Instruc iunea Multitable INSERT poate fi folosit în sistemele de tip data warehousing pentru a transfera date de la una sau mai multe surse opera ionale c tre un set de tabele int .EMPLOYEE_id = E.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice – o singur instruc iune DML versus multiple instruc iuni INSERT.. SELECT ; – o singur instruc iune DML versus o procedur care s execute mai multe instruc iuni INSERT folosind sintaxa IF...THEN. Într-o instruc iune multitable INSERT insera i în una sau mai multe tabele rândurile calculate derivate din rândurile returnate în urma evalu rii datelor furnizate de o subinterogare. Instruc iunea multitable INSERT poate juca un rol deosebit de folositor într-un scenariu pentru data warehouse. Presupunem c trebuie s înc rca i în mod regulat datele în baza pentru a facilita analiza afacerii. Pentru a face asta trebuie s extrage i datele din unul sau mai multe sisteme opera ionale şi s le copia i în depozitul de date. Procesul de extragere a datelor din surse şi aducerea lor în depozit se numeşte de ETL (Extraction, Transformation, and Loading). În timpul extragerii, datele necesare trebuie identificate şi extrase din mai multe surse diferite cum ar fi sisteme de baze de date şi aplica ii. Dup extragere, datele trebuie transportate fizic c tre sistemul int sau un sistem intermediar pentru a fi procesate. În func ie de modul ales pentru transport pot fi executate unele transform ri în timpul acestui proces. De exemplu, o instruc iune SQL care acceseaz direct o inta la distanta printr-un gateway poate concatena doua coloane ca parte a instruc iunii SELECT. Odat ce datele sunt înc rcate în baza Oracle9i transformarea lor poate fi f cut folosind opera ii SQL. Instruc iunea multitable INSERT este una dintre tehnicile implementate în Oracle9i pentru transformarea datelor. Instruc iunea Multitable INSERTS ofer beneficiile date de instruc iunea INSERT... SELECT atunci când sunt folosite mai multe tabele drept inta. Înainte de Oracle9i trebuia s folosi i mai multe instruc iuni independente de tipul INSERT... SELECT pentru a procesa aceeaşi data surs de mai multe ori, timpul aferent şi munca necesara fiind indubitabil mai mari. Fiecare înregistrare dintr-un şir de intrare, cum ar fi o tabel nonrela ional poate fi acum convertit în mai multe înregistr ri pentru mai multe tabele rela ionale. Oracle 9i introduce urm toarele tipuri de instruc iuni multitable INSERT : • Unconditional INSERT (INSERT necondi ionat); • Conditional ALL INSERT (Insearea tutore datelor în mod condi ionat); • Conditional FIRST INSERT (Primul INSERT condi ionat); • Pivoting INSERT (INSERT condus). Trebuie s folosi i diferite clauze pentru a indica tipul de INSERT ce va fi executat.

11-326

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice INSERT [ALL] [conditional_insert_clause] [insert_into_clause values_clause] (subquery) conditional_insert_clause[ALL] [FIRST] [WHEN condition THEN] [insert_into_clause values_clause] [ELSE] [insert_into_clause values_clause] Sintaxa de mai sus red formatul generic pentru instruc iunea multitable INSERT. Unconditional INSERT clauza ALL Specifica i clauza ALL urmat de mai multe clauze insert_into pentru a executa un insert necondi ional în mai multe tabele. Serverul Oracle execut fiecare clauza INSERT odat pentru fiecare rând returnat de subinterogare. Conditional INSERT: conditional_insert_clause Specifica i clauza pentru conditional_insert_clause în vederea execut rii unui insert condi ionat. Serverul Oracle filtreaz fiecare clauz insert_into_clause c utând coresponden a cu condi ia de la clauza WHEN care determin execu ia ei. O singur instruc iune multitable insert poate con ine pân la 127 clauze WHEN. Conditional INSERT: ALL Dac specifica i ALL, serverul Oracle evalueaz fiecare clauza WHEN cu privire la rezultatul evalu rii altor clauze WHEN. Pentru fiecare clauza WHEN a c rei condi ie este evaluat ca fiind adev rat serverul Oracle execut lista corespunz toare din instruc iunea INSERT. Conditional FIRST: INSERT Dac specifica i FIRST, serverul Oracle evalueaz fiecare clauza WHEN în ordinea în care sunt scrise în instruc iune. Dac primul WHEN este evaluat ca fiind adev rat, serverul Oracle execut clauza INTO corespunz toare, în caz contrar trecând peste urm toarea clauz WHEN pentru acel rând. Conditional INSERT: clauza ELSE Pentru un anumit rând, dac nici o clauza WHEN nu este evaluat ca fiind adev rat : • dac specifica i clauza ELSE, serverul Oracle execut lista de la clauza INTO asociat clauzei ELSE. • dac nu specifica i clauza ELSE, serverul Oracle nu execut nici o ac iune pentru acel rând.

11-327

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice

Restric ii pentru instruc iunea Multitable INSERT • Instruc iunea multitable insert poate fi executat numai asupra tabelelor nu şi asupra view-urilor sau tabelelor la distan (remote table); Nu pute i specifica o expresie format dintr-o colec ie de tabele când folosi i instruc iunea multitable insert; La folosirea instruc iunii multitable insert nu pot fi specificate mai mult de 999 tabele int , luând în calcul toate clauzele insert_into.

Exemplu: Unconditional INSERT ALL Selecta i valorile pentru EMPLOYEE_ID, HIRE_DATE, SALARY şi MANAGER_ID din tabela EMPLOYEES pentru acei angaja i care au EMPLOYEE_ID> 200. Insera i valorile în tabela SAL_HISTORY şi în tabela MGR_HISTORY folosind un INSERT multitabel. INSERT ALL INTO sal_history VALUES (EMPLOYEESID, HIREDATE, SAL) INTO mgr_history VALUES (EMPLOYEESID, MGR, SAL) SELECT EMPLOYEE_id EMPLOYEESID, hire_date HIREDATE, salary SAL, manager_id MGR FROM EMPLOYEES WHERE EMPLOYEE_id > 200; În exemplu se insereaz rânduri atât în tabela SAL_HISTORY cât şi în tabela MGR_HISTORY tables. Instruc iunea SELECT extrage datele din tabela EMPLOYEES, coloanele EMPLOYEE_ID, hire_date, salary şi manager_ID pentru acei angaja i a c ror EMPLOYEE_ID este mai mare de 200. Aceste valori sunt inserate în tabela SAL_HISTORY şi în tabela MGR_HISTORY. Acest INSERT este necondi ionat deoarece ulterior nu se aplica restric ii asupra rândurilor extrase de instruc iunea SELECT. Toate rândurile reg site de instruc iunea SELECT statement sunt inserate în cele dou tabele, respectiv SAL_HISTORY şi MGR_HISTORY. Clauza VALUES de la instruc iunea INSERT specific coloanele ce vor fi inserate în tabele. Fiecare rând returnat de instruc iunea SELECT duce la dou inser ri, una în tabela SAL_HISTORY şi alta în tabela MGR_HISTORY. În total au fost inserate 8 rânduri în cele dou tabele. 11-328

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Exemplu-Conditional INSERT ALL Selecta i valorile coloanelor EMPLOYEE_ID, HIRE_DATE, SALARY şi MANAGER_ID din tabela EMPLOYEES pentru acei angaja i a c ror id este mai mare 200. Dac SALARY este mai mare de 10,000, insera i aceste valori în tabela SAL_HISTORY folosind o instruc iune multitable INSERT condi ional . Dac valoarea pentru MANAGER_ID este mai mare de 200 atunci insera i aceste valori în tabela MGR_HISTORY folosind o instruc iune multitable INSERT condi ional . INSERT ALL WHEN SAL > 10000 THEN INTO sal_history VALUES(EMPID,HIREDATE,SAL) WHEN MGR > 200 THEN INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID,hire_date HIREDATE , salary SAL , manager_id MGR FROM employees WHERE employee_id > 200; 4 rows created. Exemplul este similar cu cel anterior deoarece se introduc date în dou tabele şi anume SAL_HISTORY şi MGR_HISTORY. Instruc iunea SELECT extrage din tabela EMPLOYEES datele despre angaja ii (ID, hire date, salary, and manager_ID) a c ror employee_ID este mai mare decât 200. Valorile coloanelor employee_ID, hire_date şi salary sunt inserate în tabela SAL_HISTORY iar cele din coloanele employee_ID, manager_ID şi salary sunt inserate în tabela MGR_HISTORY. Aceast instruc iune INSERT este referit ca „conditional ALL INSERT” deoarece sunt aplicate restric ii dup extragerea rândurilor de c tre instruc iunea SELECT. Numai acele rânduri care au valoarea din coloana SAL mai mare de 10000 sunt inserate în tabela SAL_HISTORY şi similar, numai acele rânduri care au valoarea din coloana MGR mai mare de 200 sunt inserate în tabela MGR_HISTORY. Fa de exemplul precedent, de aceast dat sunt inserate numai patru rânduri în cele dou tabele SAL_HISTORY şi MGR_HISTORY.

11-329

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Conditional FIRST INSERT INSERT FIRST WHEN SAL > 25000 THEN INTO special_sal VALUES(DEPARTMENTSID, SAL) WHEN HIREDATE like ('%00%') THEN INTO hiredate_history_00 VALUES(DEPARTMENTSID,HIREDATE) WHEN HIREDATE like ('%99%') THEN INTO hiredate_history_99 VALUES(DEPARTMENTSID, HIREDATE) ELSE INTO hiredate_history VALUES(DEPARTMENTSID, HIREDATE) SELECT department_id DEPARTMENTSID, SUM(salary) SAL, MAX(hire_date) HIREDATE FROM EMPLOYEES GROUP BY department_id; În exemplu instruc iunea SELECT extrage valorile pentru coloanele department_ID, salariul total şi valoarea maxim pentru hire_date pentru fiecare departament din tabela EMPLOYEES. Aceasta instruc iune INSERT este referit ca „conditional FIRST INSERT”, deoarece atunci când salariul total este mai mare de 25,000 apare o excep ie. Expresia condi ional WHEN ALL > 25000 este prima evaluat . Dac salariul total pentru un departament este mai mare de 25,000 atunci articolul este inserat în tabela SPECIAL_SAL în func ie de valoarea coloanei hire_date. Dac prima clauz WHEN este evaluat ca fiind True, serverul Oracle execut clauza corespondent INTO şi trece peste urm toarele clauze WHEN pentru acest rând. Pentru rândurile care nu satisfac condi ia WHEN SAL > 25000, restul condi iilor sunt evaluate ca fiind o instruc iune de tip „conditional INSERT” şi rândurile date de SELECT sunt inserate în tabela HIREDATE_HISTORY_00 sau HIREDATE_HISTORY_99 sau HIREDATE_HISTORY în func ie de valoarea din coloana HIREDATE. Se execut 8 inser ri în tabelele SPECIAL_SAL, HIREDATE_HISTORY_00, HIREDATE_HISTORY_99 şi HIREDATE_HISTORY.

Pivoting INSERT • Presupunem c primi i un set de date despre vânz ri dintr-o baz de date nerela ional , SALES_SOURCE_DATA in urm torul format : EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE, SALES_WED, 11-330

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SALES_THUR, SALES_FRI şi dori i s p stra i aceste înregistr ri în tabela SALES_INFO într-un format rela ionat cum ar fi : EMPLOYEE_ID, WEEK, SALES. Folosind o instruc iune de tip „pivoting INSERT”, transforma i setul de date primit în formatul de date rela ional dorit.

Pivotarea este opera ia prin care crea i o transformare astfel încât fiecare înregistrare din orice şir de intrare, cum ar fi o baz de date care nu este rela ionat , trebuie s fie convertit în mai multe înregistr ri pentru o baz de date rela ionat . Pentru a solu iona acesta problem trebuie s construi i o transformare astfel încât fiecare înregistrare din tabela original din baza de date nerela ionat , SALES_SOURCE_DATA, s fie convertit în cinci înregistr ri pentru tabela SALES_INFO din baza de date rela ionat . Aceast opera ie este numit de obicei „pivoting”. INSERT ALL INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_MON) INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_TUE) INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_WED) INTO sales_info VALUES (EMPLOYEE_id,week_id,sales_THUR) INTO sales_info VALUES (EMPLOYEE_id,week_id, sales_FRI) SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE, sales_WED, sales_THUR,sales_FRI FROM sales_source_data;

DESC SALES_SOURCE_DATA

SELECT * FROM SALES_SOURCE_DATA;

11-331

11-332 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice DESC SALES_INFO SELECT * FROM sales_info.

9. De data aceasta. prin intermediul scriptului creat. 11-333 . numele de familie (LAST_NAME) şi salariul fiec rui angajat. first_name. 3. 5. Şterge i şi modifica i date în tabelul 10. Ad uga i prima înregistrare a tabelului din exemplul de mai jos. Concatena i prima liter a prenumelui şi primele 7 caractere ale numelui de familie pentru a crea userid. Insera i date în tabelul MY_EMPLOYEE. Descrie i structura tabelului MY_EMPLOYEE pentru a identifica numele câmpurilor. Modifica i numele de familie al angajatului cu ID = 3 în Drexler. 7. Crea i tabela MY_EMPLOYEE care are urm toarele coloane : id. Verifica i ad ug rile. Introduce i în tabelul MY_EMPLOYEE şi al doilea rând de date din exemplul de mai sus. Crea i un script numit load_EMPLOYEES. 6. Salva i modific rile. specifica i coloanele explicit în clauza INSERT.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 11. salary.9 Exerciţii 1. Insera i urm toarele dou înregistr ri în tabel. Cere i utilizatorului prenumele (FIRST_NAME). ID 1 2 3 4 5 LAST_NAME Patel Dancs Biri Newman Ropeburn FIRST_NAME Ralph Betty Ben Chad Audry USERID rpatel bdancs bbiri cnewman aropebur SALARY 795 860 1100 750 1550 4. userid. Verifica i dac au fost ad ugate în tabel.sql pentru a insera înregistr ri în mod interactiv în tabelul MY_EMPLOYEE. last_name. Nu folosi i lista coloanelor în clauza INSERT. 8. 2. MY_EMPLOYEE. 11. Modifica i salariul la 1000 pentru to i cei cu salariul mai mic decât 900.

Verifica i c rândul nou este intact. f când-o permanent . Insera i în tabel ultima înregistrare rulând scriptul creat la punctul 6. tabelul mgr_history şi tabelul special_sal cu structurile de mai jos: sal_history mgr_history special_sal 11-334 . Salva i toate modific rile temporare. 17. Verifica i c tabelul este gol. Controla i tranzac iile de date asupra tabelului MY_EMPLOYEE. Şterge i toate înregistr rile din tabel. 15. Anula i cea mai recent opera ie DELETE f r anterior. Şterge i-o pe Betty Dancs din tabelul MY_EMPLOYEE. Verifica i ad ugarea. Salva i ad ugarea. 14. 16. 19. 21.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 12. Verifica i modific rile. 18. Verifica i modific rile f cute. Crea i tabelul sal_history. 13. 20. 23. Marca i un savepoint în cadrul tranzac iei. a anula şi INSERT-ul 22.

Afişa i rândurile din tabela SPECIAL_SAL. Scrie i o interogare care s execute urm toarele: • S afişeze EMPLOYEE_ID. şi manager_ID pentru acei angaja i pentru care EMPLOYEE_ID este mai mic de 125 (din tabela EMPLOYEES). manager_ID şi salary în tabela MGR_HISTORY • • • b. insera i datele despre angaja i (EMPLOYEE_ ID şi salary) în tabela SPECIAL_SAL. hire date. Insera i valorile pentru EMPLOYEE_ID. c. Afişa i rândurile din tabela SAL_HISTORY.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 24. a. salary.000. Dac salariul este mai mare de 20. d. salary în tabela SAL_HISTORY. 11-335 . Afişa i rândurile din tabela MGR_HISTORY. hire_date . Insera i valorile pentru EMPLOYEE_ID.

week_ID şi vânz rile din fiecare zi a s pt mânii (din tabela SALES_SOURCE_DATA). Crea i tabela sales_source_data cu structura de mai jos şi introduce i câteva datele prezentate în figur .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice 25. Scrie i o interogare care s afişeze EMPLOYEE_ID. b. Construi i o transformare astfel încât fiecare rând din tabela SALES_SOURCE_DATA s fie convertit în mai multe înregistr ri pentru tabela SALES_INFO şi afişa i datele ob inute. 11-336 . Crea i tabela sales_info cu structura de mai jos: c. a.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Capitolul 12 Anexa 1 Structura tabelelor folosite în carte şi datele standard con inute de acestea Tabela COUNTRIES DESCRIBE countries SELECT * FROM countries. Tabela DEPARTMENTS DESCRIBE departments 12-337 .

Tabela EMPLOYEES DESCRIBE employees 12-338 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT * FROM departments.

Tabela JOBS DESCRIBE jobs 12-339 .Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT * FROM employees.

12-340 . Tabela JOB_GRADES DESCRIBE job_grades SELECT * FROM job_grades.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice SELECT * FROM jobs.

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tabela JOB_HISTORY DESCRIBE job_history SELECT * FROM job_history. 12-341 .

Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Tabela LOCATIONS DESCRIBE locations SELECT * FROM locations. 12-342 . Tabela REGIONS DESCRIBE regions SELECT * FROM regions.

Botez. D. ISBN: 973-86741-0-7 4. H. S. Buzea. Fourth Edition. 12-343 . Arot ri ei. 3.Silberschatz. ISBN: 0-07-112268-0. Cârlig. I. D. Editura Medex 2005. Introduction to SQL Student Guide Volume 1 and 2. McGraw-Hill Higher Education. Nancy Greenberg.2002. A. C. 2001. Visual FoxPro ®. 2. Oracle Corporation. Priya Nathan. Baze de date – Lucr ri de laborator.F. Korth.Sudarshan.Facultatea de Automatică şi Calculatoare Iaşi Baze de date – lucrări practice Bibliografie 1. Database System Concepts.

Sign up to vote on this title
UsefulNot useful