Limbajul Bazelor de Date Relation Ale SQL

download Limbajul Bazelor de Date Relation Ale SQL

of 56

Transcript of Limbajul Bazelor de Date Relation Ale SQL

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    1/56

    Limbajul bazelor de date relaionale SQL

    Limbajul bazelor de date relaionale SQLLecia 13. Limbajul SQL. Funciile i posibilitile de baz.13.1. SEQUEL/SQL SGBD System R

    Limbajul de interaciune cu BD SQL a aprut la mijlocul anilor 70 i a fost elaborat pebaza proiectului SGBD System R relaionale experimentale. Denumirea primar a limbajuluiSEQUEL(Structured English Query Language) reflect doar parial esena acestui limbaj.Desigur, n mod general, limbajul a fost orientat spre o formulare mai comod i mai neleas aadresrilor ctre BD relaionale, dar n realitate era de acum un un limbaj complet de BD,coninnd, n afar de operaiile formulrii adresrilor i manipulrilor BD, mijloace demanipulare i determinare cu schema BD: determinarea limitelor integritii i a trigherilor,afirii BD, posibilitile determinrii structurilor nivelului fizic, care determin executareaefectiv a adresrilor; autorizaiile accesului la relaii i la cmpurile lor; a punctelor de salvare atranzaciilor. n limbaj lipseau mijloacele de sincronizare a accesului la obiectele BD din parteatranzaciilor efectuate paralel: de la bun nceput se presupunea c sincronizarea neapratesteexecutat de SGBD.

    S analizm posibilitile acestui limbaj un pic mai amnunit.

    13.1.1. Adresrile i operatorii de manipulare cu dateleDup cte tim, dou limbaje de baz de adresare ctre BD relaionale sunt limbajul

    algebrei relaionale i a calculului relaional. Cu toat stricteea i statornicia sa teoretic acestelimbaje se utilizeaz rar n SGBD relaionale moderne, n calitate de mijloace a interfeeiutilizatorului. Adresrile n aceste limbaje snt greu de formulat i de neles. SQL reprezint ocombinaie oarecare a calculului relaional combinaional a cortejelor i a algebrei relaionale, nafar de aceasta nc nu este clar cror din cele clasice acest limbaj este mai apropiat. Cu toate

    acestea limbajul SQL are posibiliti mai largi, ca limbajele relaionale de baz, de exemplu, ncaz general este imposibil translarea adresei, formulat n SQL, ntr-un cuvnt a algebreirelaionale, este nevoie de o oarecare lrgire. Proprietile de baz a sublimbajului de adresriSQL sunt posibiliti de a formula uor adresrile cu legtura ctorva relaii i subadreselordepuse n predicatele alegerii. Deci posedarea concomitent a ambelor mijloace este extensiv,dar acest fapt d posibilitatea utilizatorului, n timpul formulrii adresrii, de a alege variantacea mai clar neleas.

    n predicatele cu subadresrile depuse n SQL System R este posibil de a utiliza teoretic omulime de operatori de comparaie, ceea ce permite de a formula adresri cuantificate(ceea cede obicei, cel mai greu este neles de utilizatori, de aceea n SQL au aprut predicatecuantificabile).

    O deosebire principal a limbajului SQL este posibilitatea prezenta n adresarenecesitatea gruprii apartenenei-rezultatului pe cmpurile determinate, cu ajutorul condiiilor deselectare a ntregii grupe. Aa fel de condiii de selectare pot conine funcii de agregat, calculate

    pe grup. Aceast posibilitate a SQL n mod principal deosebete acest limbaj de limbajelealgebrei relaionale i a calculului relaional, care nu conine surse analogice.

    O alt deosebire a limbajului SQL nu este tergerea neaprat a cortejelor-dublicate nrelaii rezultatele finale sau intermediare. Altfel spus, rezultatul operatorului tergerii nlimbajul SQL este mulimea cortejelor i nu a relaiilor. n cazurile cnd semantica adresrilorcere prezena relaiei, distrugerea predicatelor are loc neclar.

    Cel mai general tip de adresare n limbajul SQL este expresia algebric alctuit dinadresri elementare. n SQL System R erau admise toate operaiile de baz(UNION,

    INTERSECT i MINUS).Lucrul cu expresiile nedeterminate n SQL System R nu a fost gndit pn la urm, cu

    toate c se presupunea utilizarea logicii cu trei simboluri, n cazul determinrii expresiilor logice.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    2/56

    Operatorii de manipulare cu datele UPDATE i DELETE sunt construite pe bazaacelorai principii ca i operatorul de selecie a datelor SELECT. Colectarea cortejurilor relaieidate, care aparin modificrii sau tergerii, se determin cu ajutorul expresiei logice care face

    parte din operatorul dat i care poate conine predicate compuse i de asemenea cu subadresridepuse.

    n operatorul de includere a cortejurilor n relaia dat, cortejul ce se va include poate fi

    definit att n form literar, ct i cu ajutorul suboperatorului interior de selecie.

    13.1.2. Operatori de manipulare i determinare a schemei BDDin componena operatorilor de determinare a schemei BD SQL System R fceau parte

    operatorii de creare i distrugere a relaiilor pstrate permanent i temporar(CREATE TABLE iDROP TABLE) i crearea i distrugerea relaiilor afiabile(CREATE VIEW i DROP VIEW). nlimbaj i n realizarea System R nu se interzicea utilizarea operatorilor de utilizare a schemei nlimitele tranzaciei, care conine operatorii de selecie i de manipulare cu datele. Se permitea, deexemplu, utilizarea operatorilor de selecie i de manipulare cu datele, n care se accentuieazrelaia neexistent n baza de date n timpul compilrii operatorului. Desigur, aceast posibilitatengreuna considerabil realizarea i n fond i utilizarea foarte rar.

    Operatorul de manipulare cu schema BD ALTER TABLE avea posibilitatea de a adugacmpurile selectate la relaie existent. n descierea limbajului se determina, c execuia acestuioperator nu trebuie s aduc la faptul c compilarea operatorilor asupra relaiei s nu fieadevrat, relaie schema creia se schimb i c sensul cmpurilor din nou determinate ncortejele existente a relaiei devin nedeterminate.13.1.3. Determinarea limitelor integritii i a trigherelor

    Limbajul SQL System R includea surse foarte puternice de control i meninere aintegritii BD. Sursele de control se bazau pe aparatul de limite a integritii(ASSERTIONS).Dup ideie, limita integritii este expresia logic, determinat pe starea actual a BD,neadevrul creia corespunde cu starea neintegr a BD. Expresia logic a limitei integritii

    poate conine orice predicat admisibil n limbaj.Mai precis, limitele integritii se mpart n dou clase: controlabile n urma executrii

    operatorului de manipulare cu datele i controlabile la sfritul tranzaciei sau la executareaoperatorului special INFORCE INTEGRITY. Tipurile predicatelor ce pot fi utilizate n noperatorii de determinare a limitelor integritii de clase diferite, difer. n operaiile din primaclas se controleaz cortejul actual, cu care are loc manipularea. n cazul doi se controleazrelaiile accentuate n limitele integritii, adic toate cortejele lor. Se deosebete i reaciadeterminat n limbaj, reacia sistemului la nclcarea limitelor integritii diferitor clase. n

    primul caz nclcarea limitelor integritii aduce la napoierea tranzaciei n punctul care eneaprat premrgtor operaiilor de manipulare cu datele, ndeplinirea cruia a dus la nclcarealimitei integritii. n cazul doi se efecuieaz napoierea tranzaciei pn la nceputul ei. Un

    mecanism important determinat n SQL System R este mecanismul trigherilor. n contextulSystem R acest mecanism era privit n mod principal ca surs de meninere automat aintegritii BD. La determinarea trigherului se spunea de condiia de control a utilizriitrigherului(numele relaiei i tipul operaiei de manipulare cu datele). Condiia de utilizare atrigherului(expresia logic, construit construit dup regulile apropiate de regulilepentrulimitele integritii primei clase) i funcia, cre trebuie s fie ndeplinit asupra bazei de date ncaz c condiiile aplicaiei sunt adevrate. Aa funcie putea fi exprimat cu ajurtoruloperatorului de sine stttor de manipulare cu date. n timpul execuiei funciei puteau snceap i alte trighere, .a.

    Mecanismul de limitare a integritii i trigherelor n System R erau foarte puternice icomune, dar realizarea lor eera grea(dup cum s-a mai spus, trigherele aa i nu au mai fost

    realizate n System R). O greutate adugtoare n realizare a fost faptul c se permitea(n totcazul nu se interzicea de ctre limbaj) determinarea limitelor integritii i a trigherilor n limiteleaceleieai tranzacii, n care se ndeplinesc operatorii de manipulare cu datele. n cazul unei

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    3/56

    realizrim mai ample, ar fi fost nevoie de un numr mai mare de aciuni adugtoare n timpulexecuiei tranzaciei. n afar de aceasta, n multe cazuri absena semanticii fixate a construciilorcorespunztoare a limbajului, aduc la o nelegere sinonim a ndeplinirii tranzaciei.

    13.1.4. Configuraiile bazelor de daten limbaj se permitea utilizarea relaiilor memorabile i a relaiilor dispuse a BD.

    Varianta cea mai bun era utilizarea operatorilor de selecie pentru determinarea cionfiguraieisau afirii nfirii aparatului comun. Orice operator de selecie poate fi utilizat pentrudeterminarea configuraiei.

    n limbaj lipsesc oarecare limite n introducerea utilizrii configuraiilor: n orice operatorSQL n care se permite utilizarea numelui relaiei memorabile, se permite i utilizarea numeluiconfiguraiei a tabloului. n SQL System R nu se vorbete nimic despre metoda recomandabilde realizare a accesului ctre tablouri, dar n orice metod efectul trebuie s fie n aa mod, cacnd s-ar fi realizat materializarea total a tabloului pn la execuia operatorului.

    Un ir de probleme, cercetri i propuneri a nscut posibilitatea potenial de execuie aoperatorilor de manipulare cu datele asupra tablourilor. Este clar c aceast posibilitate este uorde realizat pentru tablourile simple, dar n cazurile mult mai complicate, nu numai realizarea, dar

    i semantica operaiilor devine netrivial. Apropo, n System R operatorii de manipulare cudatele, se admiteau numai asupra tablourilor simple.

    13.1.5. Determinarea strucurilor de comandIntroducerea n limbajul relaional, precum este SQL, operaiile de creare i tergere a

    nivelului fizic, care menin efecuarea efectiv a adresrilor ctre BD, a aprut n SQL System Rca o rezolvare pragmatic, care asigura posibilitatea tuturor tipurilor de lucru cu BD cu ajutorulunui singur limbaj.

    n SQL System R se vorbete despre dou tipuri de aa structuri: indexurile ilegturile(links).

    Indexul, n nchipuirea lingvistic, abstract a sa este un fiier invertit, care asiguraccesul ctre cortejurile relaiei corespunztoare, pe baza sensului dat de una sau mai multecoloane, care reprezint cheiea indexului. Operatorii limbajului permiteau de a crea i a distrugeindexii, dar n nici un caz nu permiteau de a arta necesitatea utilizrii indexului existent ncazul execuiei operatorului de selecie, hotrrea despre aceasta se apela la realizare.

    Cu ajutorul operatorului de determinare a indexului era posibil de a exprima douafirmaii adugtoare referitor la schema logic a relaiei i la structura fizic a pstrrii sale. Ladeterminarea indexului, utilizarea cuvntului cheie UNIQUE nseamn c cheiea acestui indexeste cheiea posibil a relaiei corespunztoare. n fond aceasta demonstreaz existenamecanismului adugtor de determinare a limitelor integritii relaiei. Unul din indexii relaieidate putea fi determinat cu ajutorul cuvntului cheie CLUSTERING. Aceasta arat necesitatea

    clasterizrii fizice n memoria extern a cortejurilor relaiei cu sensuri apropiate sau egale cu celeale indexului.Operatorii de determinare a legturii, permiteau, n stilul modelului de reea a datelor,

    organizarea n memoria extern a listelor cortejurilor relaiei date. Ca i n cazul indexilor,operatorii permiteau de a crea i de a distruge aa liste, dar nu includeau posibilitatea de a artaclar necesitatea utilizrii listelor externe la execuia operatorilor de manipulare cu datele idificultatea efecturii calculelor preului utilizrii lor la execuia operatorului de selecie, auadus la aceea c mecanismul de legturi a disprut din limbaj, de acum n stadia trzie dendeplinire a proiectului System R. De atunci, acest mecanism, dup cum tim, nu a aprut nicintr-unul din variantele SQL.

    13.1.6. Autorizarea accesului la relaie i cmpurile eiO deosebire de baz a limbajului SQL, care a aprut n el de la bun nceput estendestularea proteciei accesului la date de ctre sursele limbajului. Ideiea principal a acestui

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    4/56

    pas const n faptul c, pentru atrnarea fa de orice relaie a BD i fa de orice coloan arelaiei se introduce un set definit de privilegii. Cu fiecare tranzacie se face indirect legtura cuidentificatorul utilizatorului, de la numele cruiea ea se ndeplinete(metodele de legtur i deidentificare a utilizatorilor nu se fixeaz n limbaj i se determin de realizare).

    Dup crearea relaiei noi toate privilegiile legate de aceast relaie i de toate coloanelesale, aparin doar utilizatorului creator al acestei relaii. n componena privilegiilor intr i

    privilegia de a transmite toate sau o parte din privilegii altui utilizator, inclusiv i privelegia de atransmite privilegii. n mod tehnic transmiterea privilegiilor are loc la ndeplinirea operatorilorSQL GRANT. Exist i privilegia de a extrage o parte sau toate privilegiile de la un utilizator,caruiea acestea i-au fost transmise mai devreme. Aceast privilegie de asemenea poate fitransmis. n mod tehnic extragerea privilegiilor poate fi nfptuit la aplicarea operatorului SQLREVOKE.

    Controlul mputernicirii accesului la date are loc pe baza informaiei despremputernicirile existente n timpul compilrii operatorului SQL corespunztor. Asemntor cuceea ce am spus despre limitele integritii i trighere, n SQL System R lipseau careva limite nlegtur cu utilizarea operatorilor GRANT i REVOKE. Acest fapt aducea la dificulti tehniceimpuntoare n realizare, dar cte o dat i la o nelegere nesimilar a comportrii.

    Un timp ndelungat pasul spre protecia datelor de la accesele nesancionate era nfptuit practic fr critic, ns n legtur cu utilizarea rspndit a SGBD relaionale n adugrilenetradiionale, tot mai des apare critica. Dac, de exemplu, n sistema BD trebuie s se menin o

    protecie a mai multor nivele de date, aa sistem de mputerniciri corespunztoare este foartegreu, dar cte o date e i imposibil de a construi pe baza surselor SQL.

    13.1.7. Punctele de salvare, memorare i napoierea tranzaciilorn SQL System R au existat doi operatori speciali pentru implimentarea aa numitelor

    puncte de salvare, memorare a tranzaciilor i de napoiere a tranzaciilor spre punctul de salvareimplimentat mai devreme. n literatura referitoare la System R cercetarea acestor posibiliti

    practic nu se gsete, de unde rezult c ele nu au fost realizate.Realizarea liniar a acestor posibiliti nu duce la careva dificultitehnice, dar i nu-i

    chiar de folos, deoarece dup execuia parial a napoierii tranzaciei pentru prelungirea cusucces a lucrului programului adugtor, ar fi fost nevoie i de restabilirea strii lui n punctulcorespunztor, ceea ce nicidecum nu se menine. Este clar c, n cazul unei analize maiamnunite trebuie s fie legate mecanismele punctelor de salvare i control a integritii. Deexemplu ar fi natural ca n timpul execuiei operatorului ENFORCE INTEGRITY, dac carevalimite a integritii se ncalc, s-ar produce napoierea automat a tranzaciilor ctre punctul desalvare cel mai apropiat, n care nclcarea integritii BD nu s-a depistat. Acest fapt ar fi ngrelatrealizarea, dar ar fi de folos.

    Analog s-ar fi putut de utilizat mecanismul punctelor de salvare n cazul napoierii

    automate a tranzaciilor din cauza apariiei impasurilor sincronizate.S accentum nc dou proprieti principale a limbajului SQL System R, care nmodaliti diferite sunt prezente n toate variantele dezvoltate, postmergtoare ale limbajului.

    13.1.8. SQL implantatn SQL System R sunt prezeni operatori speciali, care menin implantarea operaiilor

    SQL n limbajele tradiionale de programare(n System R un aa limbaj era PL/1).Problema fundamental de implementare a lui SQL n limbaj de programare const n

    faptul c SQL este un limbaj relaional, adic operatorii lui n cea mai mare parte lucreaz cumulimile, n timp ce n limbajul de programare, operaiile scalare sunt de baz. Hotrrea luiSQL const n faptul c n limbaj se includ adugtor operatorii, care vor permite accesul pe

    corteje a rezultatului adresrii la BD.Pentru aceasta n limbaj se introduc sensul de cursor, cu care se leag operatorul deselecie. Asupra unui cursor dat se poate efectua operatorul OPEN, care indic materializarea

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    5/56

    relaiei rezultatul adresrii, operatorul FETCH, care permite alegerea sfritului de lucru cucursorul dat.

    La realizarea unor programe adugtoare, cu SQL implantat, o elasticitate adugtoareeste dat de posibilitatea de parametrizare a operatorilor SQL cu sensul variabilelor programuluide conectare.

    13.1.9. SQL dinamicPentru simplificarea cererii SQL interactiv sistemelor orientate n SQL System R aufost inclui operatorii, care permit n timpul efecturii tranzaciei, compilarea i efectuareaoricrui operator SQL.

    Operatorul PREPARE induce compilarea dinamic a operatorului SQL, textul cruia seconine n rndul simbolic schimbtor al programului de conectare.

    Operatorul DESCRIBE slujete pentru primirea informaiei despre operatorul SQL dat,pregtit mai nainte de operatorul PREPARE. Cu ajutorul acestui operator, putem afla mai nti,este operatorul pregtit un operator de selecie i n al doilea rnd dac acesta e operator deselecie, de primit informaia ntreag despre numrul i tipurile coloanelor relaiei rezultante.

    Pentru ndeplinirea operatorului SQL pregtit mai devreme, care nu este un operator de

    selecie, este operatorul EXECUTE. Pentru ndeplinirea operatorului de selecie pregtit dinamic,se utilizeaz aparatul de cursoare cu careva deosebiri n ceea ce privete exercitarea adreselorvariabilelor programului de conectare, n care trebuie s fie incluse sensul coloanelor cortejuluirezultant actual.

    Concluzionnd aceast scurt descriere a calitilor de baz a SQL System R, saccentum, c nectnd la pregtirea tehnic nesatisfctoare, dup ideie limbajul coninea toatemijloacele necesare, care permiteau utilizarea lui ca limbaj de baz a SGBD.

    13.2. Limbajul SQL n realizri comerciale

    13.2. Limbajul SQL n realizri comercialen timpul actual SQL e realizat practic n toate SGBD relaionale comerciale, toate

    firmele i proclam corespunderea realizrilor sale la standartul SQL, i ntr-adevr dialectelerealizate sunt apropiate. Aceasta a avut loc nu deodat i nu uor.

    Cele mai apropiate de System R erau dou sisteme ale firmei IBM SQL/DS i DB2.dup cum se pare(demonstrri documentale la aceasta autorul nu are) ambele aceste sistemeutilizau direct realizarea System R. De unde i apropierea limitat a dialectelor realizate SQL iSQL System R. Din SQL SystemR au fost excluse doar acele pri, care nu erau ndeajuns

    prelucrate( de exemplu punctele de salvare) sau reaalizarea crora ducea la dificulti foartemari(de exemplu limitele integritii i trigherele). Putem numi aceast cale spre realizareacomercial a SQL micare de sus n jos.

    O alt apropiere se utiliza n aa sisteme ca Oracle i Informix. Nectnd la deosebirile nmetodele de realizare a acestor sisteme, realizarea SQL avea loc de jos n sus. n primelerealizri SQL ieite pe pia, n aceste sisteme se utilizeaz numrul minimal i foarte limitat asubmulimilor SQL System R. n parte, n prima realizare cunoscut autorului a SQL SGBDOracle n operatorii de selecie nu se admitea utilizarea subntrebrilor implimentate.

    Cu toate acestea, nectnd la aceste limite i la eficacitatea slab n primele stadii,orientarea firmelor la meninerea diferitor platforme de aparate i de cointeresarea utilizatorilorn trecerea la sistemele relaionale a permis firmelor s dobndeasc succes comercial spre

    perfecionarea realizrilor sale. n versiunile actuale Oracle i Informix se menin dialecte SQLdestul de puternice, cu toate c realizarea cte o dat induce ndoieli.

    O deosebire a majoritii SGBD comerciale actuale, care ngreuneaz analiza dialectelor

    existente SQL, este aparena descrierii ntregi a limbajului. De obicei descrierea este mprtiatpe diferite manuale i este amesticat cu descrierea limbajelor surs, specifice pentru sistemadat, care nu au legtur cu SQL. Dar putem spune c, colecia de baz a operatorilor SQL,

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    6/56

    incluznd operatorii de determinare a schemei BD, de selecie i de manipulare cu dateleautorizaiei accesului la date, meninerea implantrii SQL n limbajele de programare ioperatorii SQL dinamic, n realizrile comerciale s-a meninut i mai mult sau mai puincorespunde standartului.

    13.3. Standartizarea SQL

    13.3. Standartizarea SQLLucrrile pentru standartizarea limbajului SQL au nceput practic concomitent cu apariia

    primelor realizri comerciale ale lui. Primul din volumul de documente, ce aparineau autorului,dateaz cu luna octombrie a anului 1985 i este de acuma un alt proiect al standartuluiANSI/ISO.

    Este clar c n calitate de standart se putea utiliza SQL System R. n primul rnd aceastvariant a limbajului nu era prelucrat tehnic n momentul cuvenit. n al doilea rnd, aceasta ar fifost foarte greu de realizat(cine tie cum s-ar fi aranjat istoria, dac ar fii fost realizate complettoate ideile System R). Din alt punct de vedere, primele realizri comerciale se deosebeau att demult, c nici unul din dialectele realizate nu aveau anse de a fi primite n calitate de standart.

    Analiza documentelor accesibile arat, c procesul decurgea foarte dificil, utiliznd nunumai rezultatele tiinifice. n rezultat standartul Internaional SQL, primit n 1989 n mareamajoritate a prilor sale, are un caracter comun i permite o descifrare forte larg. n aceststandart lipsesc complet aa compartimente principale, ca manipularea cu schema BD i SQLdinamic. Multe din aspectele principale ale limbajului, n corelaie cu standartul se determin nrealizare.

    Se preapoate, c cele mai importante scopuri atinse de limbajul SQL sunt standartizareaclar a sintaxei i semnaticii a operatorilor de selecie i mai includ posibilitile de determinarea cheilor primare i secundare a relaiilor i aa numitele limitele de control a integritii, carereprezint din sine submulimea limitelor integritii SQL System R de clasa nti. Sursele dedeterminare a cheilor exterioare permit formularea uoar a aanumitor necesiti a integritiiBD dup legturi. Aceast necesitate rspndit poate fi formulat i pe baza mecanismuluigeneral a limitelor integritii SQL System R, dar formularea pe baza sensului cheii externe estemai simpl i mai neleas. Vznd necompletarea standartului SQL, pe fonul ncheierii lucruluiaupra prelucrrii acestui standart, specialitii diferitor firme au pornit lucrul cu standartul SQL2.acest lucru de asemenea s-a prelungit civa ani, au fost elaborate o mulime de proiecte destandarte, pn cnd n sfrit, n martie 1992 nu a fost elaborat proiectul final a standartului.Acest standart este cu mult mai amplu i cuprinde practic toate aspectele necesare pentrurealizare: manipularea cu schema BD, dirijarea cu tranzaciile(din nou au aprut punctele desalvare, memorare) i cu sesiile(sesia - este o succesiune a tranzaciilor, n limitele crora se

    pstreaz relaia temporal), conexiunea la BD, SQL dinamic. n sfrit sunt standartizate

    rfelaiile-registre a BD, ceea ce nu-i legat neaprat de limbaj, dar foarte mult acioneaz asuprarealizrii.Uimete faptul lipsei n standart a surselor de dirijare cu indexii. Desigur aceste surse, de

    obicei, se afl departe de operaiile de baz SQL, dar autorului nu-i este cunoscut nici orealizare n care ei ar lipsi.

    n sfrit, odat cu finisarea lucrului saupra standartului SQL2 a luat natere prelucrareastandartului SQL3. se presupune c SQL3 va conine mecanismul trigherilor i posibilitateautilizrii tipurilor abstracte de date. Sensul de standart se planific doar n anul 1995. s spermc macr de aceast dat va fi posibil de urmrit prelucrarea lui.

    Concluzionnd aceast scurt excursie prin istoria standartizrii SQL, s observ, c ncele mai multe cazuri(nu n toate) procesul standartizrii se limiteaz la o prelucrare tehnic

    atent a ideilor SQL System R, ceea ce nc o dat accentuieaz unicitatea acestui proiect(autrecut 12 ani de la finisarea lui!).

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    7/56

    Lecia 14. Limbajul standart a bazelor de date SQL

    Lecia 14. Limbajul standart a bazelor de date SQLn aceast lecie vom analiza pe scurt proprietile de baz a limbajului Lecia 14.

    Limbajul standart a bazelor de date SQL 1989.

    14.1. Tipuri de date

    14.1. Tipuri de daten limbajul 14.1. Tipuri de date/89 se menin urmtoarele tipuri de date:

    CHARACTER, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, DOUBLE,PRECISION. Aceste tipuri de date se clasific pe tipurile expresiilor simbolurilor, numerelorntregi i numerelor reale. Primei clase i se atribuie CHARACTER(length), unde lengthreturneaz lungimea cuvntului tipului dat. S atragem atenia, c n 14.1. Tipuri de date/89lipsete tipul cuvintelor de mrime variabil. Cu toate c n multe realizri ele se admit.Cuvintele literare ale simbolurilor se reprezint n form de ir de simboluri(de exempluexemple).

    Reprezentri ale clasei a doua de tipuri sunt NUMERIC, DECIMAL(DEC),INTEGER(INT) I SMALLINT. Specificatorul tipului NUMERIC are aspectul

    NUMERIC[(PRECISION[,SCALE])]. Se specific numerele ntregi, reprezentate cu preciziaprecision i cu scara scale. Aici i pe viitor, dac este scpat scara, atunci ea se poate socoti cafiind egal cu 0, iar dac este scpat precizia. Atunci sensul ei se determin n realizare.

    Specificatorul tipului DECIMAL(sau DEC) are aspectul NUMERIC[(precision[,scale])].Se specific numerele ntregi, reprezentate cu scara scale i precizia mai mare sau egal cuvaloarea precision.

    Integer specific tipul de date a numerelor ntregi cu scara 0 i cu o preciziedeterminat de realizare. SMALLINT specific tipul de date a numerelor ntrgi cu scara 0 i cu

    precizia determinat n realizare, nu mai mare ca precizia numerelor tipului INTEGER.Sensurile literare a numerelor ntregi n caz general se prezint sub forma

    [+][.]. n sfrit, la clasa tipurilor de date a numerelorreale se refer tipurile FLOAT, REAL, i DOUBLE PRECISION. Specificatorul tipului FLOATare aspectul FLOAT[(precision)]. Sunt specifice numerele reale cu precizie binar mai mare sauegal cu valoarea precision.

    REAL specific tipul de date a numerelor reale i n caz general se reprezint sub forma&. S atragem atenia c cu toate c odatcu utilizarea limbajului SQL putem determina schema BD, care conine datele oricrui tip dincele numite, posibilitatea de a le utiliza n sistemele adugtoare depinde de limbajul de

    programare utilizat. Gama ntreag a tipurilor de date poate fi folosit dac se programeaz n

    PL/1. de aceea n unele realizri SQL tipurile de date cu scar i precizie n genere nu se menin.Cu toate c regulile de implimentare a SQL n limbajul C nu se determin n SQL/89, nmajoritatea relizrilor, ce susin aa implimentare, are loc urmtoarea corelaie ntre tipurile dedate SQL i tipurile de date C: CHARACTER corespunde caracterelor C; INTEGER corespundelong; SMALLINT corespunde short; REAL corespunde float, DOUBLE PRECISIONcorespunde lui double(anume aa corelaie este admis n SQL/92).

    S atenionm c, n marea majoritate a realizrilor SQL, se menin unele tipuri de dateadugtoare, ca de exemplu, DATE, TIME, INTERVAL, MONEY. Unele din aceste tipuri sespecific n standartul SQL/92, dar n realizrile actuale realizrile sintactice i semantice se potdeosebi.

    14.2. Surse de determinare a schemei

    14.2. Surse de determinare a schemei

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    8/56

    Sursele de determinare a schemei BD n stanartul SQL/89 se refer la prile mai slabeale standartului i care permit o interpretare diferit. Mai mult ca att, nu ne este cunoscut nici orealizare , n care s-ar menine fix aa set de surse de determinare a schemei.

    De aceea pentru obinerea mobilitatea sistemeiadugtoare n o clas destul de larg derealizare SQL/89, trebuie de localizat clar componentele de determinare a schemei BD. Cred car fi mai bine de concentrat tot lucrul cu schema BD ntr-un singur modul i de avut n vedere c

    reconstruirea acestui modul.S atragem atenia, c n SQL/89 n genere lipsesc carevasurse de schimbare a schemeiBD: nu-I posibilitatea de a nltura schema tabelului; de aduga n schema tabelului o coloannou, .a. n toate realizrile aa surse se menin, dar ele pot s difere i dup sintactic i dupsemantic.

    Nectnd la lipsa oricror sperane c vom reui s ntlnim o realizare, ce ar susinelimbajul de determinare a schemelor SQL/89, noi, pe scurt, vom descrie acest limbaj(frmijloace sintactice), pentru a aprecia la nivelul cuvenit posibilitile SQL/89 i de a primi mcarcareva surse de comparaie a diferitor realizri.

    14.2.1. Operatorul de determinare a schemei

    n legtur, corespunderii cu regulile SQL/89 fiecare tabel a BD date are un numesimplu i calificat. n calitate de calificator a numelui este identificatorul mputernicirilortabelului, care de obicei, n realizare coincide cu numele a careva utilizator i numele calific atabelului are forma:

    ..Paii ctre determinarea schemei n SQL/89 constau n faptul c toate tabelele cu unl i

    acelai identificator de mputernicire se creeaz(determin) pe calea ndeplinirii unui operatordedeterminare a schemei.

    Cu toate acestea, n standart nu se determin posibilitatea de ndeplinire a operatorului dedeterminare a schemei: trebuie oare el s fie ndeplinit numai n refim interactiv sau poate fimplementat n program, scris n limbajul tradiional de programare.

    n operatorul de determinare a schemei, se conine identificatorul mputernicirilor i listaelementelor schemei, unde fiecare din elemente poate fi determinantul tabelului, determinantulafirii(view) sau determinantul privelegiilor. Fiecare din acetideterminani se reprezint de unoperator aparte SQL/89, dar toi ei, cum s-a mai spus, trebuie s fie implementai n operatoruldeterminrii schemei. Pentru aceti operatori, vom scrie sintactica, cci aceasta va permitedescrierea deosebirilor lor.

    14.2.2. Determinarea tabeluluiOperatorul de determinare a tabelului are sintactica urmtoare:::=

    CREATE TABLE()[{,}]::=|.n afar de numele tabelului, n operator se specific lista elementelor tabelului, unde

    fiecare din elemente slujete sau pentru determinarea coloanei, sau pentru determinarea limitelorintegritii a tabelului determinat. Este nevoie de prezentat macr a unei determinri a coloanei.Operatorul CREATE TABLE determin, aa numitul tabel de baz, adic depozitul real de date.Pentru determinarea coloanelor tabelului i a limitelor integritii se utilizeaz operatori speciali,care trebuie inclui n operatorul de determinare a tabelului.

    14.2.3. Determinarea coloaneiOperatorul de determinare a coloanei se descrie prin regula sintactic urmtoare:

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    9/56

    ::=[][]::=DEFAULT {|USER|NULL}::=

    NOT NULL[]||CHECK ().Dup cum se vede, n afar de partea principal, n care se determin numele coloanei i

    tipul ei de date, determinarea coloanei poate conine i dou disprituri secundare, de care neputem lipsi: dispritura coloanei propriuzis i despritura limitelor integritii coloanelor. ndespritura nsemntii propriuzis se arat nsemntatea, care trebuie s fie inclus n rndul,care se nscrie n tabelul dat, dac nseamntate acestei coloane nu se d. nsemntatea

    propriuzis poate fi dat sub form de constant literar cu tipul, care corespunde tipuluicoloanei date; pe calea definirii cuvntului cheie USER, cruiea, n timpul execuiei operatoruluide introducere a cuvntului, i corespunde cuvntul simbolic, ce conine numele utilizatorului

    curent(n acest caz coloana trebuie s aib tipul cuvintelor simbolice); sau pe calea definiriicuvntului cheie NULL, care indic c nsemntatea propriuzis este o nsemntatenedeterminat. Dac nsemntatea coloanei propriuzis nu-i specificat, i n desprituralimitelor integritii coloanei este artat NOT NULL, atunci nceracrea de a introduce n tabelcuvntul cu nsemntatea nespecificat a coloanei date va duce la greeal. Definirea ndespritura de limitare a integritii NOT NULL duce la crearea unei limite a integritii dencercare pentru tot tabelul(uite subdiviziunea urmtoare) CHECK (C IS NOT NULL) (unde C

    numele coloanei date). Dac limita NOT NULL nu-i dat, i despritura propriuzislipsete,atunci are loc crearea despriturii propriuzise DEFAULT NULL. Dac este dat specificareaunicalitii, atunci are loc crearea specificaiei corespunztoare a unicalitii pentru tabel.

    Dac n despritura limitelor integritii este dat limita dup legtur a coloanei date(), atunci are loc crearea determinrii limitelor integritiicorespunztoare dup legturi pentru tabel:

    FOREIGN KEY(C) n sfrit, dac este dat limita de control a coloanei, atunci condiiile de cutare a acestei

    limite trebuie s se bazeze doar pe aceast coloan, i de asemenea are loc creareacorespunztoare a limitei de control a integritii tabelului.

    14.2.4. Determinarea limitelor integritii tabeluluiLimitele integritii tabelului posed sintactica urmtoare:::=

    |||::=()::=UNIQUE | PRIMARY KEY::=[{, }]::=FOREIGN KEY()::=REFERENCES

    ::=::=

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    10/56

    [(}]::=[{,}]::=CHECK()Pentru un singur tabel pot fi date cteva limite a integritii, inclusiv i cele ce se creeaz

    de ctre limitele integritii coloanelor.Standartul SQL/89 adopt, c limitele tabelului practic se controleaz la ndeplinirea

    fiecrui operator SQL.Atenie: posedarea setului corect selectat de limite a BD este foarte important pentrufuncionarea temeinic a sistemului informaional aplicat. Cu toate acestea n unele SGBDlimitele integritii practic nu se menin. De aceea la proiectarea sistemului aplicativ trebuie deluat decizia ce este mai principal: s ne bazm pe susinerea limitelor integritii, dar s nelimitm setul posibilelor SGBD, sau s ne dezicem de utilizarea lor la nivelul SQL, pstrnd

    posibilitatea utilizrii nu a celor mai noi SGBD. n continuare T arat tabelul, pentru care sedetermin limitele integritii.

    Limita unicitiiFiecare nume a coloanei, din lista unicitilor trebuie s numeasc coloana T i nu trebuie

    s fie inclus n aceast list mai mult de o singur dat. La determinarea coloanei, ce intr n lista

    unicalitilor trebuie s fie dat pe limita coloanei NO NULL. Printre limitele unicalitii T nutrebuie s fie mai mult de o singur determinare a cheii primare(limita unicalitii cuvntuluicheie PRIMARY KEY).

    Lucrul limitei unicalitii const n faptul c, n tabelul T nu se admite apariia a dou saumai multe rnduri, sensurile coloanelor unicalitii crora coincid.

    Limita dup legturLimita dup legtur de la setul de coloane date CT a tabelului T pe setul de coloane CT1

    dat de un tabel oarecare la momentul dat T1 determin condiia asupra coninutului ambeloracestor tabele, fr de care legturile le putem considera corecte.

    Dac lista coloanelor CT1 este specificat clar n determinarea limitei dup legturi,atunci trebuie ca aceast list s intre ntr-o oarecare determinare a unicalitii tabelului T1. daclista CT1 nu se specific n determinarea limitei dup legturi a tabelului T, atunci este nevoie can determinarea tabelului T1 s fie prezent determinarea cheii primare i lista CT1 se presupunec coincide cu lista numelor coloanelor din determinarea cheii primare a tablului T1.

    Numele coloanelor listelor CT i CT1 trebuie s fie luate de coloanele tabelelor T i T1corespunztor i nu trebuie s apar n liste mai mult de o singur dat. Listele coloanelor CT iCT1 trebuie s conin un numr egal de elemente i coloana tabelului T, identificat deelementul i a listei CT trebuie s fie de acelai tip ca i coloana tabelului T1, identificat deelementul i a listei CT1.

    Dup determinare, tabelele T i T1 corespund limitei date dup legturi, dac pentrufiecare rnd S a tabelului T aa c toate nsemntile coloanelor S identificate de lista CT, nu

    sunt nedeterminate, exist rndul S1 a tabelului T1, aa c, nsemntatea coloanelor S1,identificate de lista CT1, sunt egale dup poziia nsemntilor coloanelor S, identificate de listaCT. Mai clar acest lucru poate fi formulat n felul urmtor: limita dup legturi se satisface dac

    pentru fiecare legtur corect exist un obiect, la care ea s-ar trimite. n terminologia deprinsde programatori, limita dup legturi nu permite crearea legturilor atrnate, care nu conducnspre nici un obiect.

    Limita de controlLimita de control specific condiia, care trebuie s fie satisfcut de fiecare rnd n parte

    a tabelului T. Aceast condiie nu trebuie s conin subadresri, specificaii a funciilor agregatedar i a legturilor spre parametrii sau variabile externe. n ea pot intra doar numele coloanelortabelului dat i constantele literare.

    Tabelul satisface limita de control a integritii n acel caz i numai n acela, cnd calcululcondiiei pentru nfiecare rnd a tabelului ne d TRUE.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    11/56

    Atenie: n unele realizri se permite mecanisme mai lrgite a limitelor dup legturi i alimitelor de control. Trebuie s fim ateni, dac nu dorim s ieim din limitele posibilitilorstandartului.

    14.2.5. Determinarea configuraiilorMecanismul configuraiilor(view) este o surs puternic a limbajului SQL, ce permite

    ascunderea structurii real a BD de careva utilizatori, pe baza determinrii configuraiei BD, careeste o oarecare adresare ctre BD memorabil cu coloane enumrate, dar pentru utilizator nu sedeosebete cu nimic de tabelul de baz a BD(innd seama de limitele tehnice). Orice realizaretrebuie s garnteze, c starea tabelului dat coincide ntocmai cu starea tabelelor de baz, pe bazacrora este determinat configuraia. De obicei determinarea tabelului nchipuit (materializareaadresrii corespunztoare) are loc de fiecare dat la utilizarea configuraiei.

    n standartul SQL/89 operatorul de determinare a configuraiei are sintaxa:::=CREATE VIEW [()]AS [WITH CHECK OPTION]::=[{,}...]

    Tebelul V determinabil este schimbtor(adic n corespundere cu V putem utilizaoperatorii DELETE i UPDATE) n acel caz i doar n acela, dac se ndeplinesc urmtoarelecondiii pentru specificarea adresrii: n lista de selecie nu se indic cuvntul cheie DISTINCT;fiecare expresie afirmativ n lista de selecie este o specificaie a coloanei i specificaia uneicoloane nu apare mai mult de o singur dat; n despritura FROM este artat doar un singurtabel care este sau tabel de baz sau tabelul nchipuit schimbtor; n condiia de selecie adespriturii WHERE nu se utilizeaz subadresri; n expresia tabelar lipsesc despriturileGROUP BY SO HAVING.

    Atenie: Aceste limite sunt foarte puternice. n realizri ele pot fi slbite. Dar dac saspirm la mobilitate, n-ar fi de dorit s utilizai posibilitile lrgite.

    Dac n lista de selecie n specificarea adresrii este mcar o singur expresie afirmativ,compus nu dintr-o singur specificaie a coloanei, sau dac un nume a coloanei face parte dinlista de selecie mai mult dect o singur dat, determinarea configuraiei trebuie s conin listanumelor coloanelor tabelului nchipuit. Mai simplu trebuie de enumerat coloanele tabeluluinchipuit, dac aceste nume nu sunt motenite de la coloanele tabelelor despriturii FROM despecificare a adresrii.

    Cererea WITH CECK OPTION n determinarea configuraiei are sens numai n cazuldeterminrii tabelului nchipuit schimbtor, care se determin de specificarea adresrii, careconine despritura WHERE. n cazul posedrii acestei cereri nu se admit schimbri a tabeluluinchipuit ce duc la apariia n tabelele de baz a rndurilor, ce nu se vd n tabelul nchipuit, adicaa rnduri, care nu ndestuleaz condiia de cutare a despriturii WHERE de specificare a

    adresrii. Dac WITH CECK OPTION n determinarea configuraiei lipsete, aa control nu senfptuiete.

    14.2.6. Determinarea privelegiilorn coresponden cu ideologia limbajului SQL controlul drepturilor de acces a

    utilizatorului dat ctre tabele BD are loc pe baza mecanismului de privelegii. De fapt, acestmecanism const din aceea, c pentru ndeplinirea oricrui lucru asupra tabelului utilizatorultrebuie s posede privelegiile corespunztoare(real tot lucrul posibil este descris de setul fixatstandart de privelegii). Utilizatorul, ce a creat tabelul, automat devine posesorul a tuturor

    privilegiilor posibile la ndeplinirea operaiilor asupra acestui tabel.n componena acestor privelegii intr i privelegiul de transmitere a tuturor sau a crorva

    privilegii n legtur cu tabelul dat ctre ali utilizatori, inclusiv privelegiul de transmitere aprivelegiilor. Uneori are loc i apariia inversei de luare a privelegiilor de la utilizator, care le-aprimit mai nainte.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    12/56

    n SQL/89 se determin schema simplificat a mecanismului privilegiilor.n primul rnd, mprirea privelegiilor este posibil doar n cazul dewterminrii

    tabelului. n al doilea rnd, utilizatorul, ce a primit careva privilegii de la ali utilizatori, le poatetransmite mai departe doar n cazul determinrii schemei.

    Determinarea privilegiilor are loc dup sintactica urmtoare:::=

    GRANT ON TO [{,}][WITH GRANT OPTION]::=ALL PRIVELEGES|[{,}]::=SELECT|INSERT|DELETE|UPDATE [()]|REFERENCES [()]::=[{,}]::=PUBLIC|Din aceast sintax nelegem sensul mecanismului de determinare a privelegiilor n

    SQL/89. s atragem atenia doar la aceea c avem nevoie de posesia privelegiilor.PREFERENCES n legtur cu coloanele selectate din tabelul T1 pentru a avea posibilitatea, ladeterminarea tabelului T, s determinm limita dup legturi dintre acest tabel i tabelul existentla momentul dat T1.

    Cu toate c n caz general n toate SQL-SGBD orientate se menine mecanismul deprotecie a accesului pe baza privelegiilor, realizrile se pot de obicei deosebi prin detalii. Pentrua tinde spre crearea unui sistem mobil adugtor aplicativ, atunci acest lucru analizat mai sustrebuie localizat.

    Lecia 15. Limbajul SQL. Surse de manipulare cu datele

    Lecia 15. Limbajul SQL. Surse de manipulare cu datele15.1. Structura adresrilor

    Pentru a vorbi mai mult sau mai puin despre structura adresrilor n standartul Lecia 15.Limbajul SQL. Surse de manipulare cu datele/89 trebuie s ncepem cu o mulime de regulisintactice:

    ::=[]::=| UNION [ALL]::=

    |()::=(SELECT [ALL|DISTINCT])::=SELECDT [ALL|DISTINCT]INTO ::=(SELECT [ALL|DISTINCT]::=

    [][][]

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    13/56

    Limbajul permite trei tipuri de construcii sintactice, care ncep cu cuvntul cheieSELECT: specificaia cursorului(cursor specification), operatorul seleciei(select statement) isubadresarea (sub query). Cea mai de baz este construcia sintactic expresie tabelar(tableexpreion). Semantica expresiei tabelare const n faptul c pe baza utilizrii consecutive adispriturilor from, where, group, by so hawing, din tabelele date n from se construiete otabel rezultant, n care ordinea consecutivitii rndurilor nu este determinat i printre rnduri

    se pot gsi dublicate(adic, n caz general, tabelul-rezultant al expresiei tabelare este o mulimede rnduri). ntr-adevr anume structura expresiei tabelare n cea mai mare parte caracterizeazlimbajul SQL/89. n continuare vom vedea structura i sensul dispriturilor expresiei tabelarte,dar mai nainte vom analiza cele trei tipuri de construcii ce include expresiile tabelare.

    15.1.1. Specificarea cursoruluiCursor o determinare a limbajului SQL, ce permite cu ajutorul setului de operatori

    speciali de a primi accesul pe rnduri la rezultatul adresrii ctre BD. Ctre expresiile tabelare, ceparticip la specificarea cursorului, nu se aplic nici o limit. Dup cum se vede din mulimea dereguli sintactice, la determinarea specificaiei cursorului se utilizeaz trei construciiadugtoare: specificarea adresrii, expresia adresrilor i despritura ORDER BY.

    Specificarea adresriin specificarea adresrii se d lista de selecie(lista expresiilor afirmative asupra

    sensurilor coloanelor rezultatului expresiei tabelare i a constantelor). n rezultatul utilizriilistei de selecie la rezultatul expresiei tabelare are loc construirea noului tabel, se conine acelainumr de rnduri, dar n general alt numr de coloane, ce conin rezultatele calculelor expresiilorafirmative corespunztoare din lista de selecie. n afar de aceasta, n specificarea adresprii se

    pot conine cuvinte cheie ca: ALL sau DISTINCT. La posesia cuvntului cheie DISTINCT dintabel, a expresiei tabelare primite utiliznd n rezultat lista de selecie, se terg rndurile dublicate;la selectarea ALL (sau pur i simplu la lipsa lui DISTINCT) nu are loc tergerea rndurilordublicate.

    Expresia adresrilorExpresia adresrilor este o expresie care se construiete dup regulile sintactice date pe

    baza specificaiei adresrilor. Unica operaie care e permis de a fi utilizat n expresiileadresrilor, este operaia UNION(unirea tabelelor) cu posibilitatea de felul urmtor UNIONALL. Ctre tabelele-operanilor expresiilor adresrilor se aplic acea cerin, c toate ele trebuies posede unul i acelai numr de coloane i coloanele corespunztoare a tuturor operatorilortrebuie s fie de unul i acelai tip. Expresia adresrilor se calculeaz de la stnga spre dreapta,innd seama de ghilimele. La execuia operaiei UNION are loc unirea obinuit a operatorilor,adic n tabelul rezultant se terg dublicatele. La neplinirea operaiei UNION ALL se formeaztabelul rezultant, n care se pot conine rnduri dublicate.

    Dispritura ORDER BY

    n sfrit despritura ORDER BY permite crearea ordinii dorite de privire a rezulltatuluiexpresiei adresrilor. Sintactica ORDER BY este:::=ORDER BY |}[ASC|DESC]Dup cum vedem din aceste reguli sintactice, practic se d lista coloanelor rezultatului

    expresiei adresrilor i pentru fiecare coloan se arat ordinea rndurilor rezultatului ndependen de nsemntatea acestei coloane(ASC dup cretere i DESC n descretere).

    Coloanele pot fi date prin numele sale n cazul cnd: expresia adresrilor nu conine operaiileUNION i UNION ALL; n lista de selecie a specificaiei adresrii acestei coloane i corespundeo expresie afirmativ, compus doar din numele coloanei. n toate celelalte cazuri, n

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    14/56

    despritura ORDER BY trebuie s fie dat numrul de ordine a coloanei n tabelul rezultant alexpresiei adresrii.

    15.1.2. Operatorul de selecieOperatorul de selecie este un operator aparte a limbajului SQL/89, ce permite de a

    primi rezultatul adresrii n programul aplicat fr activarea cursorului. De aceea operatorul de

    selecie are sintactica ce difer de sintactica de specificare a cursorului i la execuia lui aparlimitri a rezultatului expresiei tabelare. De fapt i una i alta este dictat de specificuloperatorului de selecie ca operator unar a SQL: la execuia lui rezultatul strebuie s fie inclus nvariabilele programului aplicativ. De aceea n operator apare dispritura IN TO, ce conine listavariabilelor a programului aplicativ i apare acea limit c tabelul rzultant trebuie s conin numai mult de un rnd. La rndul su rezultatul expresiei tabelare de baz trebuie s conin nu maimult de un rnd, dac operatorul de selecie nu conine specificaia DISTINCT i tabelul, primitn urma apelrii la lista de selecie ctre rezultatul expresiei tabelare, nu trebuie s conin maimult de un rnd care nu coincide, dac specificaia DISTINCT este dat.

    Atenie: n dialectul SQL SGBD Oracle se menine varianta lrgit a operatoruluiseleciei, rezultatul cruiea nu e neaprat tabelul dintr-un singur rnd. Aa lrgire nu se susine

    nici n SQL/89, nici n SQL/92.

    15.1.3. Subadresarean sfrit, ultima construcie SQL/89, care poate conine expresii tabelare este

    subadresarea, pedic adresarea, care poate fi inclus n predicatul condiiei de seleciei aoperatorului SQL. Tabelul rezultant trebuie s conin fix o singur coloan. De aceea n regulilede sintax, ce determin subadresarea, n loc de lista de selecie este artat expresia expresia,ce determin valoarea, adic expresia afirmativ. S atenionm, c deoarece subordonareantotdeauna este inclus n orice alt operator SQL, atunci n calitate de constante n expresiaafirmativ de selecie i n expresia logic a despriturilor WHERE i HAVING. Se permiteutilizarea coloanelor a rndurilor cresctoare a tabelelor, ce particip n adresrile mai mari canivelul exterior. Mai amnunit despre aceasta vom vorbi la descrierea semnaticii expresiilortabelar.

    15.2. Expresia tabelar

    15.2. Expresia tabelarStandartul SQL/89 recomand s primim calculul expresiei tabelareca o utilizare

    consecutiv a despriturilor FROM, WHERE, GROUP i HAVING pentru tabelele date n listaFROM. Despritura FROM are sintaxa urmtoare:

    ::=

    FROM ({,})::=[]

    15.2.1. Despritura FROMCa rezultat a ndeplinirii despriturii FROM este derivarea extins a tebelelor, date de

    lista tabelelor despririi FROM. Derivarea extins este de aceea c, n calitate de rezultat ioperani se admit mulimile. n standart se determin n felul urmtor: derivarea extins este R,unde R este o multimulime a tuturor rndurilor r aa, c r este concatenarea tuturor rndurilordint toate tabelele identificate n aa ordine, n care ele au fost identificateordinul lui R este

    reprezint derivata ordinelor tabelelor identificate. Numrul de ordine a coloanei n R este n+S,unde n este numrul coloanei create n tabelul numerat T, iar S este suma puterulor tuturortabelelor, alturi de numele tabelului putem specifica nc un nume corelation name. De fapt

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    15/56

    aceasta este un sinonim a numelui tabelului care poate fi folosit n alte desprituri a expresieitabelare pentru legturile cu rndurile anume a acestei intrri a tabelului.

    Dac expresia tabelar conine doar despritura FROM(aceasta-i unica i neapratadespritur a tabelului), atunci rezultatul expresiei tabelare coincide cu rezultatul desprituriiFROM.

    15.2.2. Depritura WHEREDac n expresia tabelareste prezent despritura WHERE, atunci urmtoarea se vacalcula anume ea. Sintaxa acestei desprituri este:

    ::=WHERE ::=(OR::=(AND::=[NOT]

    ::=|()Calculul despriturii WHERE are loc dup regulile: fie R rezultatul despririi FROM.

    Atunci condiiile cutrii se admit pentru toate rndurile R i ca rezultat a dispriturii WHEREeste tabelul format din acele rnduri R, pentru care rezultatul calculelor condiiilor de cutareeste true. Dac condiiile de selecie includ subadresri, atunci fiecare subadresare se calculeaz

    pentru fiecare cortej a tabelului R(n standart se utilizeaz termenul de effectively n sensul, crezultatul trebuie s fie aa, ca i cum fiecare subadresare ntr-adevr s-ar fi calculat din nou

    pentru fiecare cortej R). S atenionm c, deoarece SQL/89 admite prezena n baza de date aexpresiilor nedeterminate, atunci calculul condiiilor de cutare nu are loc n logica boolean cin logica trisemnificativ cu valori true, false i unikown(nedeterminare). Operaiile booleeneAND, OR i NOT opereaz n logica trisemnificativ aa:

    true AND unikown=unikownunikown AND true=unikownunikown AND unikown=unikowntrue OR unikown=trueunikown Or true=trueunikown OR unikown=unikown

    NOT unikown=unikownPrintre predicatele condiiilor de cutare n corespundere cu SQL/89 se pot gsi

    urmtoarele predicate: predicatul comparaiei, predicatul between, predicatul in, predicatul like,predicatul null, predicatul cuantificrii, predicatul exists. S atenionm c n toate realizrile

    SQL asupra eficacitii implimentrii adresrii influeneaz mult prezena, n condiia de cutare,a predicatelor simple de comparaie( predicate ce reprezint comparaia coloanei tabelului nraport cu o constant, prezena acestor predcicate d posibilitate SGBD de a utiliza indexi landeplinirea adresrii, adic de a evita parcurgerea ntregului tabel. n principiu, limbajul SQL le

    permite utilizatorilor de a nu-i face griji n privina setului concret de predicate n condiia deselecie(ele s fie doar sintactic i semantic corecte), la utilizarea real a limbajului SQL aSGBD orientate, aa detalii tehnice trebuie de luat n vedere.

    Predicatele de comparaieSintaxa predicatului de comparaie se determin dup regulile:::=

    {|}::==|||=

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    16/56

    Prin se indic operaia de neegalitate. Expresiile neafirmative a prilor stngi idrepte a predicatului de comparaie se construiesc dup regulile generale de construire aexpresiilor afirmative i pot include n caz general numele coloanelor tabelelor din desprituraFROM i constante. Tipurile de date a expresiilor afirmative trebuie s fie comparabile(deexemplu dac tipul coloanei tabelului A este un vector de caractere, atunci predicatul a=5 nuse admite).

    Dac operatorul din dreapta operaiei de comparaie e dat de subadresare, atunci limitaadugtoare este aceea, c puterea rezultatului subadresrii nu trebuie s fie mai mare caunitatea. Dac macr unul din operatorii operaiei de comparaie are sens nedeterminat sau saudac operatorul din dreapta este o subadresare cu rezultat pustiu, atunci rezulatul predicatuluide coomparaie este egal cu unikown.

    Rezultatul expresiei afirmative nu este determinat, dac n calculul lui particip macr ovaloare nedeterminat. nc o remarc important din standartul SQL/89: n contextul luiGROUP BY, DISTINCT i ORDER BY valoarea nedeterminat se reprezint ca un tip special avalorii determinate, adic este posibil, de exemplu, formarea grupei de rnduri, unde rezultatulcoloanei date nu este determinat. Pentru asigurarea transportului programelor aplicative trebuieatent apreciat specificul lucrului cu valorile nedeterminate ntr-o SGBD concret.

    Predicatul betweenAcest predicat are sintaxa urmtoare:::=[NOT] BETWEEN ANDRezultatul x BETWEEN y AND z este egal cu rezultatul x>=y AND x

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    17/56

    special a dou simboluri a ablonului: simbolul de subliniere(_) nseamn orice simbolsingular; simbolul procentului(%) nseamn consecutivitatea simbolurilor aleatoare a lungimiialeatoare poate fi nul. Dac despritura ESCAPE este prezent i specific un oarecare simbolsingular x, atunci perechile de simboluri x_ i x% sunt simbolurile singulare * i %corespunztor.

    Rezultatul predicatului like este unikown, dac rezultatul coloanei sau a ablonului nu-i

    determinat.Rezultatul predicatului x NOT LIKE y ESCAPE z coincide cu rezultatul NOT x LIKEy ESCAPE z.

    Predicatul nullAcest predicat se descrie de sintaxa dat:::= IS [NOT] NULLAcest predicat n totdeauna are rezultatul true sau false. Cu toate acestea rezultatul x IS

    NULL este egal cu true atunci i numai atunci cnd valoarea lui x nu-i determinat. Rezultatulpredicatului x NOT IS NULL este egal cu rezultatul NOT x IS NULL

    Predicatul de cuantificare

    Acest predicat are sintaxa urmtoare:::=::=|::=ALL::=SOME|ANYVom nota cu x rezultatul calculului expresiei afirmative prii stngi a predicatului, iar cu

    S rezultatul calculului subadresrii.Predicatul x ALL S are valoarea true, dac S este pustie sau valoarea

    predicatului x S e egal cu true pentru fiecare S, care se include n S. predicatulx ALL S are valoarea false, dac valoarea predicatului x S este egalcu false macr pentru un S care se include n S. n celelalte cazuri valoarea predicatuluix ALL S este egal cu unicown.

    Predicatul x SOME S are valoarea false, dac S este nul sau valoareapredicatului x S este egal cu false pentru fiecare s din S. Predicatul xSOME S are valoarea true, dac valoarea predicatului x S este egal cu truemacr pentru un s din S. n celelalte cazuri valoarea predicatului x SOME S esteunikown.

    Predicatul existsPredicatul exists are sintaxa urmtoare:

    ::=EXISTS Valoarea acestui predicat n totdeauna este true sau false, i aceast valoare este true

    atunci i numai atunci, cnd rezultatul calculului subadresrii nu-i nul.

    15.2.3. Despritura GROUP BYDac n expresia tabelar este prezent despritura GROUP BY, atunci ea se va executa

    urmtoarea. Sintaxa ei este urmtoarea:::=GROUP BY [{,}]

    Dac vom nota cu R tabelul, care are rezultatul despriturii precedente(FROM sauWHERE) atunci n calitate de rezultat a despriturii GROUP BY este desprirea lu R ntr-omulime de rnduri, care-i alctuit din numrul minim a aa grupe, c pentru fiecare coloan din

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    18/56

    lista coloanelo despriturii GROUP BY n toate rndurile fiecrei grupe, ce include mai mult deun rnd, valorile acestei coloane sunt egale. Pentru determinarea rezultatului desprituriiGROUP BY n standart se utilizeaz termenul tablou grupat.

    15.2.4. Despritura HAVINGUltima la calculul expresiei tabelare se utilizeaz despritura HAVING(dac ea e

    prezent). Sintaxa ei este:::=HAVING Despritura HAVING poate s apar condiionat n expresia tabelar numai n cazul

    cnd n ea e prezent despritura GROUP BY. Condiia de citare a acestei desprituri dcondiie asupra grupului de rnduri a tabelului grupat. De fapt despritura HAVING poate fi

    prezent i n expresia tabelar ce nu conine GROUP BY. n acest caz se presupune crezultatul calculului despriturilor anterioare reprezint un tabel grupat, format dintr-o grupfr coloane de grupare selectate.

    Condiia de cutare a despriturii HAVING se construiete dup aceleai regulisintactice ca i condiia de cutare WHERE i poate include aceleai predicate. ns sunt careva

    limite speciale sintactice n cazul condiiei de cutare a specificaiilor coloanelor tabelelor dindespritura WHERE a expresiei tabelare date. Aceste limite rezult de aceea c condiiile decutare a despriturii HAVING d condiie pe toat grupa i nu pe rnduri n parte. De aceea nexpresiile afirmative a predicatelor, care intr n condiia de selecie a despriturii HAVING,

    putem utiliza direct doar specificaiile coloanelor, artate n calitate de coloane de grupare ndespritura GROUP BY. Celelalte coloane pot fi specificate doar n interiorul specificaieifunciei de agregat COUNT, SUM, AVG, MIN i MAX, care n cazul dat, calculeaz o oarecarevaloare de agregat a ntregii grupe de rnduri. La fel este i cu subadresrile, ce intr ncomponena predicatelor condiiilor de selecie a despriturii HAVING: dac n subadresare seutilizeaz caracteristica grupei date, atunci ea poate fi dat doar pe calea schirii la coloanelegruprii.

    Rezultatul ndeplinirii despriturii HAVING este tabelul grupat ce conine doar acelegrupri de rnduri, pentru care rezultatul calculului condiiei de cutare este true. Dacdespritura HAVING e prezent n expresia tabelar, care nu conine GROUP BY, atuncirezultatul ndeplinirii ei va fi sau un tabel nul, sau rezultatul ndeplinirii despririlor anterioare aexpresiei tabelare, fiind privit ca o singur grup, fr coloane de grupare.

    15.3. Funciile de agregat i rezultatele adresrilor

    15.3. Funciile de agregat i rezultatele adresrilorFunciile de agregat(n standartul SQL/89 ele se numesc funcii asupra mulimilor) se

    determin n SQL/89 de urmtoarele reguli sintactice:::=COUNT (*)||::={AVG|MAX|MIN|SUM|COUNT}(DISTINCT)::={AVG|MAX|MIN|SUM}([ALL] )Dup cum vedem n aceste reguli, n standartul SQL/89 sunt determinate 5 funcii

    standarte de agregat: COUNT numrul rndurilor sau a valorilor; MAX valoarea maxim;

    MIN valoarea minim; SUM valoarea sumei i AVG valoarea medie.

    15.3.1. Semantica funciilor de agregat

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    19/56

    Funciile de agregat sunt destinate pentru a calcula o valoare oarecare pentru mulimea dernduri dat. Aa mulime de rnduri poate fi grupa de rnduri, dac funcia de agregat seutilizeaz pentru tabelul grupat, sau tabelul ntreg. Pentru toate funciile agregat, n afar deCOUNT(*), ordinea(cerut de semnatic) calculrii este: pe baza parametrilor funciei de agregatdin mulimea de rnduri dat se creeaz lista valorilor. Apoi pe baza acestei liste de valori are loccalculul funciei. Dac lista este nul, atunci valoarea funciei COUNT pentru ea este zero, iar

    valoarea celeilalte funcii null.Fie T tipul valorilr din aceast list. Atunci rezultatul calculului funciei COUNT este unnumr ntreg cu scara i precizia determinate n realizare. Tipul rezultatului valorilor funciilorMIN i MAX coincid cu T. La calculul funciei SUM i AVG tipul T nu trebuie s fie de tipulrndurilor simbolice, iar tipul rezultatului funciei este de tip de numere ntregi cu scara i

    precizia determinabile n realizare, dac T tip de numere ntregi i tip de numere reale cuprecizia determinat n realizare, dac T tip de numere aproximative.

    Calculul funciei COUNT(*) are loc pe calea enumrrii numrului de rnduri nmulimea dat. Toate rndurile se consider diferite, chiar dac ele snt compuse dintr-o singurcoloan cu valoarea null n toate rndurile.

    Dac funcia de agregat este specificat fr cuvntul cheie DISTINCT, atunci lista

    valorilor se construiete din valorile coloanei selectate(s subliniem c n acest caz nu se permitecalculul expresiilor afirmative). Apoi din aceast list se exclud valorile nedeterminate i senltur valorile dublicate. Apoi se calculeaz funcia dat.

    Dac funcia de agregat este specificat fr cuvntul cheie DISTINCT(sau cu cuvntulcheie ALL), atunci lista de valori se formeaz din valorile expresiei afirmative, ce se calculeaz

    pentru fiecare rnd al expresiei date. Apoi din list se nltur valorile nedeterminate i secalculeaz funcia de agregat.

    Atragei atenia c n acest caz nu se permite utilizarea funciei COUNT.Atenie: Ambele limite, artate n abzaele anterioare, sunt mai mult tehnice dect

    principiale i pot s lipseasc n realizri concrete. Cu toate acestea ele sunt limite alestandartului SQL/89 i trebuie s inem cont de ele la programarea mobil.

    15.3.2. Rezultatele adresrilorFunciile de agregat pot fi utilizate n specificarea cursorului, a operatorului de selecie i

    n subadresare dup cuvntul cheie SELECT(n aceast subdespritur vom numi aa construciica list de selecie, i s nu uitm c n caz de subadresare aceast list e format doar dintr-unelement) i n condiia despriturii HAVING. Standartul permite utilizarea mult mai exotic afunciilor de agregat n subadresri( funcia de agregate pe grupe de corteje a adresriiexterioare), dar n practic se ntlnesc foarte rar.

    S cercetm diferite cazuri de utilizare a funciilor de agregat n lista de selecie ndependen de tipul expresiei tabelare.

    Dac rezultatul expresiei tabelare R nu este un tabel grupat, atunci apariia macr a uneifuncii de agregat din mulimea de rnduri R n lista de selecie duce la ceea, c R este privit caun tabel grupat, care-i alctuit dintr-o(sau nici una) grup ce nu are coloane de grupare. Deaceea, n acest caz, n lista de selecie nu se permite utilizarea direct a specificaiilor rndurilorR: toate ele trebuie s se gseasc n interiorul specificaiilor funciilor de agregat. Ca rezultat aadresrii e tabelul, cu nu mai mult de un rnd, primit pe calea utilizrii funciilor de agregat R.

    La fel stau lucrurile i n cazul, cnd R este un tabel grupat, dar expresia tabelar nuconine despritura GROUP BY( i deci conine despritura HAVING). Dac n cazul abzauluianterior erau dou variante de creare a listei de selecie: numai cu indicarea direct a coloanelorR sau numai cu indicarea lor n interiorul specificaiilor a funciilor de agregat), atunci n cazuldat este posibil numai a doua variant. Rezultatul expresiei tabelare este afiat de ctre tabelul

    grupat, format dintr-o singur grup i rezultatul adresrii poate fi format doar pe calea aplicriifuniilor de agregat pentru acest grup de rnduri. Din nou ca rezultat a adresrii avem un tabel,ce conine nu mai mult de un rnd, primit pe calea aplicrii funciilor de agregat pentru R.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    20/56

    Cazul cnd R este un tabel adevrat grupat, adic expresia tabelar conine desprituraGROUP BY i rezult c este determinat cel puin o coloande grupare. n acest caz regulile deformare a listei de selecie coincid cu regulile de formare a condiiei de selecie a desprituriiHAVING: permite utilizarea direct a specificaiei coloanei de grupare, dar specificaiilecelorlalte coloane R, pot s apar doar n interiorul specificaiilor funciilor de agregat. Carezultat a adresrii este tabelul, n care numrul de rnduri este egal cu numrul de grupuri n R,

    i fiecare rnd se formeaz pe baza valorilor coloanelor de grupare i a funciilor de agregatpentru grupa dat.

    Lecia 16. Utilizarea SQL la programarea aplicat

    Lecia 16. Utilizarea SQL la programarea aplicat16.1. Limbajul modulelor sau SQL implimentat

    n standartul SQL/89 sunt determinate dou metode de interaciune cu BD din programulaplicat, scris n limbajul tradiional de programare(dup cum am mai numit, SQL/89 este orientatspre utilizare mpreun cu limbajele Cobol, Fortran, Pascal i PL/1, dar n realizri, de obiceisusine i limbajul C). Prima metod const n aceea c toi operatorii SQL, cu care poate opera

    programul aplicat dat, sunt concentrate ntr-un modul i sunt oformate ca proceduri a acestuimodul. Pentru aceasta SQL/89 conine un sublimbaj special limbajul modular. La utilizareaacestui mijloc de interaciune cu BD, programul aplicat conine apelul procedurilor modululuiSQL cu transmiterea ctre ele a parametrilor dai i cu primirea parametrilor rezultani.

    A doua metod const din utilizarea aa numitului SQL implimentat, cnd cu utilizareasintaxei speciale n programul limbajului tradiionalde programare se implimenteaz operatoriSQL. n acest caz, din punct de vedere a programului aplicat, operatorul SQL se ndeplinetedup loc. O parametrizare clar a operatorilor SQL lipsete, dar n operatorii implementaiSQL pot fi utilizate numele variabilelor a programului de baz, i datorit acestui fapt, seasigur legtura dintre programul aplicat i SGBD.

    Conceptual, aceste 2 metode sunt echivalente. Mai mult ca att, n standart se determinreguli de creare a modulului SQL dup programul cu SQL implimentat. ns n majoritatearealizrilor, operatorii SQL se prelucreaz foarte diferit. Modulul SQL, de obicei, se compileazaparte de programul aplicat, n rezultat se creeaz setul aa numitor proceduri memorabile( nstandart acest termen nu se utilizeaz, dar e rspndit n realizrile comerciale). Adic n cazulutilizrii modulului SQL, compilarea operatorilor SQL are loc odat, i apoi procedurilecorespunztoare pot fi apelate din programul aplicat de cte ori va fi nevoie.

    Spre deosebire de aceasta, pentru operatorii SQL, implimentai n programul aplicat,compilarea acestor operatori, de obicei, are loc de fiecare dat la utilizarea lor(mai bine zis, lafiecare prima utilizare a operatorului la ncrcarea dat a programului aplicat).

    Desigur, utilizatorul nu trebuie s tie de aceast diferen tehnic n prelucrarea a dou

    tipuri de interaciuni cu SGBD. Exist i aa sisteme, ce provoac compilarea de o singurfolosin a operatorilor implimentai SQL i pstreaz codul compilat. Dar totui e bine de inutcont de aceasta. S saducem unele propoziii pentru i n potriva la fiecare din aceste doumetode. La utilizarea limbajelor modulelor textul programului aplicat are un volum mai mic,interaciunile cu SGBD sunt mult mai localizate pe baza existenei parametrilor de apel a

    procedurilor. Din alt parte, pentru nelegerea sensului comportrii programului aplicat va finevoie de citirea simultan a dou texte. n afar de aceasta, dup cum se pare, sintaxa modululuiSQL se poate deosebi mult n diferite realizri.

    SQL implimentat ne d posibilitatea crerii unor programe aplicate mult mai autontreintoare. Sunt mai multe afirmaii pentru a ne baza pe simplitatea transferului a aa

    program n mediul altei SGBD, deoarece standartul implimentrii mai mult sau mai puin se

    ndeplinete. Neajunsul de baz este un oarecare PL este tipul acestor programe, indiferent delimbajul de baz ales. Desigur trebuie de inut cont de observaiile, ce se conin n abzaeleanterioare.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    21/56

    Apoi vom descie pe scurt limbajul modulelor i regulile de implimentare n dependende standartul SQL/89(s reamintim, c regulile de implimentare nu fac parte din standart).

    16.2. Limbajul modulelor

    16.2. Limbajul modulelor

    Structura modulului SQL n standartul SQL/89 se determin din regulile sintacticeurmtoare:::=[]::=MODULE []::=LANGUAGE{COBOL|FORTRAN|PASCAL|PLI}::=

    AUTORIZATION::=Este important c fiecare modul SQL e orientat spre utilizare n programele scrise ntr-un

    limbaj concret de programare. Dac n modul sunt prezentate procedurile de lucru cu cursoarele,atunci toate cursoarele trebuie s fie specificate la nceputul modulului. S accentum cdeclararea cursorului nu se ncarc ntr-o careva procedur, deoarece acesta este un operatorSQL de descriere i nu de ndeplinire.

    16.2.1. Determinarea proceduriiProcedurile n modulul SQL se determin dup construciile sintactice date:::=PROCEDURE;;::=|::= SQLCODE::=|

    |||||||||.

    Numele fiecror proceduri ntr-un mediu trebuie s fie diferite. Orice nume a parametrului, care se conine n parametrul SQL a procedurii, trebuie s fie specificat n

    compartimentul de declarare a parametrilor formali, artai la declararea ei. Lista parametrilorformali a fiecrei proceduri, trebuie s conin fix un parametru SQLCODE(codul de rspuns alprocedurii).

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    22/56

    16.3. SQL implementatDeoaece n standartul SQL/89 nu sunt specificate regulile de implementare a SQL n

    limbajul C, vom aduce exemplu a regulilor sintactice generale de implimentare a SQL nlimbajul C, vom aduce exemplu a regulilor sintactice generate de implementare, utilizate pentruorice limbaj. Aceasta va permite aprecierea nivelului de standartizare a unei realizri concrete.

    ::=

    {||}[]::=EXEC SQL::=END EXEC|;::=[]

    ::= BEGIN DECLARE SECTION[]::= END DECLARE SECTION[]::=:::=WHENEVER::=SQLERROR|NOT FOUND::=CONTINUE|::={GOTO|GO TO}::=:|.Operaiile implimentate SQL, inclusiv i declararea cursorului, deasemenea despriturile

    declarrii situaiilor excepionale i a variabilelor programului de baz trebuie s fie luate nghilimele EXEC SQL i END EXEC. Declararea cursorului trebuie s fie ntlnit textual maidevreme de orice operaie ce se bazeaz pe acest cursor. Toate variabilele programului de bazce se utilizeaz n operatorii implimentai SQL, trebuie s fie declarai textual n desprituraanterioar acestui operator de declarare a variabilelor programului de baz. Cu toate acesteasintaxa declarrii variabilelor corespunde sintaxei limbajului de programare de baz, ns lanceputul numelui variabilei se pun dou puncte.

    Mecanismul de prelucrare a situaiilor excepionale n SQL/89 este foarte simplu(putemspune primitiv). Putem crea reacia pentru apariia a dou feluri de condiii: SQL ERROR este

    condiia apariiei n variabil SQL CODE dup ndeplinirea operatorului implementat cu sens devaloare negativ; NOT FOUND este condiia apariiei n SQL CODE a valorii +100(acest codnseamn emanarea cursorului). Reacia poate fi alctuit din execuia trecerii la semnul

    programului de baz(aciunea GO TO) sau poate s lipseasc(aciunea CONTINUE).Va reaciona acel operator de determinare a reaciei n caz de situaie excepional, care

    textual este mai aproape de la nceputul programului de operatorulSQL.S atragem atenia c n multe realizri se menin dou feluri de coduri de rspuns la

    execuia operatorilor SQL(implementai sau luai din modul): prin variabila SQL CODE cucodurile de rspuns, care sunt reprezentate prin numere ntregi i prin variabila SQL STATE cucodurile de rspuns, codificarte prin numere zecimale, afiate n form de text. Este tendina detrecere la utilizarea numai a mecanismului SQL STATE, dar n realizrile standarte trebuie s se

    menin mecanismul SQL CODE.

    16.4. Setul operatorilor de manipulare cu datele

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    23/56

    16.4. Setul operatorilor de manipulare cu datelen standartul SQL/89 este determinat un set de operatori de manipulare cu datele foarte

    limitat. Ei pot fi clasificai pe grupe de operatori, legai cu cursorul, operatori singulari demanipulare cu datele i operatorii de finisare a tranzaciilor. Toi aceti operatori pot fi utilizaiatt n modulul SQL ct i n SQL implementat. S atragem atenia c n SQL/89 nu-I determinat

    setul de operaii a lui SQL interactiv.

    16.4.1. Operatorii legai cu cursorulOperatorii acestei grupe sunt legai prin faptul c toi ei lucreaz cu un oarecare cursor,

    declararea cruiea trebuie s se conin n acelai modul sau n programul cu SQL implementat.Operatorul de declarare a cursoruluiVom repeta regulile sintactice de declarare a cursorului:::=DECLARE CURSOR FOR ::=[]

    ::=| UNION [ALL] ::=|()::=ORDER BY [{,}]::={|}[ASC|DESC].La declararea cursorului se pot utiliya adres[ri de un tip mai comun cu posibilitatea

    execuiei organiyaiilor UNION ;I for[rii reyultatului final. Acest oerator nu este executabil, darnumai leag[ numele cursorului cu specificaia cursorului.

    Operatorul de deschidere a cursoruluiEl este descris de regula sintactic[ urm[toare>::=OPEN .n realizrile SQL implementat de obicei se cere ca declararea cursorului, textual s fie

    mai nainte de operatorul de deschidere a cursorului. Operatorul de deschidere a cursoruluitrebuie s fie primul n seria operatorilor ndeplinii, legai cu cursorul dat. La execuia acestuioperator are loc pregtirea cursorului de lucru asupra lui. n parte, n acest timp are loc pregtireaspecificaiei cursorului cu valorile variabilelor limbajului de baz n cazul SQL-ului implimentat,

    sau a parametrilor n cazul modulelor.n majoritatea realizrilor, n cazul SQL implementat, anume ndeplinirea operatorului dedeschidere a cursorului duce la compilarea specificaiei cursorului.

    Operatorii urmtori pot fi executai n ordine aleatoare asupra cursorului deschis.Operatorul de citire a rndului urmtor a cursoruluiSintaxa operatorului de citire este urmtoarea:FETCH INTO ::=[{,}].n operatorul de citire se specific numele cursorului i despritura neaprat INTO, ce

    conine lista specificaiilor destinaiilor(lista numelor variabilelor a programei de baz n cazulSQL implementat sau a numelor parametrilor de ieire n cazul modulului SQL). Numrul i

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    24/56

    tipurile datelor n lista destinaiilor trebuie s coincid cu numrul i tipurile datelor listei deselecie a specificaiilor cursorului.

    Orice cursor deschis n totdeauna are poziia: el poate fi instalat naintea unui rnd altabelului rezultant(naintea primului rnd ndat dup deschiderea cursorului), ntr-un rnd arezultatului sau n ultimul rnd a rezultatului.

    Dac tabelul la care indic cursorul este nul sau cursorul e poziionat pe ultimul rnd sau

    dup el, atunci la execuia operatorului de citire cursorul se fixeaz n poziia de dup ultimulrnd, parametrului SQL CODE i se atribuie valoarea 100, scopurilor identificate n desprituraINTO nu li se atribuie nici o valoare. Dac cursorul este poziionat naintea rndului, atunci el se

    poziioneaz n acest rnd i valoarea acestui rnd i se atribuie scopurilor corespunztoare. Daccursorul este poziionat pe rndul r, diferit de ultimul rnd, atunci cursorul se poziioneaz perndul, care imediat urmeaz dup rndul r i valorile din acest rnd urmtor li se atribuiescopurilor corespunztoare.

    Apare ntrebarea, n ce mod putem parametriza cursorul cu o valoare nedeterminat saucum s vedem c valoarea aleas din rndul urmtor este nedeterminat. n SQL/89 acest lucruse atinge pe baza utilizrii aa numitor parametri indicatori i a variabilelor. Dac se cunoate cvaloarea transmis din programul principal de la SGBD, poate fi nedeterminat i acest fapt l

    intereseaz pe programatorul aplicat, atunci specificaia parametrului sau a variabilei noperatorul SQL are tipul: [INDICATOR] la specificarea

    parametrului i [IDENTIFICATOR] laspecificarea variabilei. Valoarea negativ a parametrului indicator sau a variabilelorindicatoare(ele trebuie s fie de tip ntreg) coincide cu valoarea nedeterminat a parametrului saua variabilei.

    Operatorul de tergere a poziieiSintaxa acestui operator este:::=DELETE FROM WHERE CURENT OF .Dac cursorul specificat n operator este deschis i-i poziionat pe un oarecare rnd i

    cursorul determin tabelul schimbtor, rndul curent al cursorului se terge, iar cursorul sepoziioneaz n poziia rndului urmtor. Tabelul specificat n despritura FROM a operatoruluiDELETE, trebuie s fie tabelul, specificat n cea mai exterioar despritur FROM despecificare a cursorului.

    Operatorul de modificare a poziieiOperatorul dat are sintaxa urmtoare:UPDATE SET

    [{,}]WHERE CURENT OF ::=={|NULL}::=.Dac cursorul specificat n operator este deschis i-i poziionat pe un rnd oarecare, i

    cursorul determin tabelul schimbtor, atunci rndul curent al cursorului se modific nconformitate cu despritura SET. Poziia cursorului nu se schimb. Tabelul specificat ndespritura FROM a operatorului DELETE trebuie s fie tabelul, specificat n cea maiexterioar despritur FROM a specificaiei cursorului.

    Operatorul de nchidere a cursoruluiSintactica acestui operator este urmtoarea:::=CLOSE.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    25/56

    Dac n momentul execziei acestui operator cursorul este n stare deschis, atuncioperatorul transfer cursorul n stare nchis. Dup aceasta asupra cursorului poate fi executatdoar operaia OPEN.

    16.4.2. Operatorii singulari de manipulare cu dateleFiecare operator al acestei grupe este independent fa de oricare alt operator.

    Operatorul de selecieSintaxa lui este:::=INTO::=[{,}]Deoarece rezultatul operatorului singular de selecie este tabelul, ce conine nu mai mult

    de un rnd, lista scopurilor se specific n nsi operatorul.Operatorul de tergere a cutriiEl este descris de sintaxa urmtoare:

    ::=DELETE FROM WHERE[].Tabelul T, specificat n despritura FROM a operatorului DELETE, trebuie s fie

    schimbtor. Asupra condiiei de cutare se depune condiia, c pentru tabelul T nu trebuie s seconin schie n nici o subadresare depus a predicatelor despririi WHERE.

    De fapt operatorul se execut n felul urmtor: se verific succesiv toate rnduriletabelului T i acele rnduri pentru care rezultatul calculului condiiei de selecie este true, seterg din tabelul T. n absena despriturii WHERE se terg toate rndurile tabelului T.

    Operatorul de modificare a cutriiEl are sintaxa urmtoare:::=UPDATE SET[{,>}][WHERE]::=={|NULL}::=.Tabelul T, specificat n operatorul UPDATE trebuie s fie schimbtor. Asupra condiiei

    de cutare se depune condiia c pentru tabelul T nu trebuie s se conin schie n nici osubadresare depus a predicatelor despririi WHERE.Operatorul se execut n felul urmtor: tabelul T se verific succesiv i fiecare rnd pentru

    care rezultatul calculului de cutare este true, se schimb n conformitate cu despritura SET.Dac expresia afirmativ n despritura SET conine schie pentru coloanele tabelului T, atuncila calculul expresiei afirmative se utilizeaz valorile coloanelor curente, pn la modificarea lor.

    Operatorii de finisare a tranzacieiTranzacia curent poate fi finisat cu succes(cu fixarea n baza de date a schimbrilor

    efectuate) pe calea execuiei operatorului COMMIT WORK sau accidental(cu tergereaschimbrilor din baza de date, create de tranzacia curent) pe calea execuiei operatorului ROLLBACK WORK. La execuia oricrui din operatorii dai are loc nchiderea forat a tuturor

    cursoarelor, deschise la momentul execuiei operatorului de finisare a tranzaciei.

    16.5. SQL dinamic n Oracle V.6

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    26/56

    16.5. SQL dinamic n Oracle V.6setul de operatori SQL descris n standartul SQL/89 este destinat implimentrii n

    programul scris n limbajul obinuit de programare. De aceea n acest set sunt amestecaioperatorii a limbajului relaional adevrat cu adresri(de exemplu operatorul de tergere a unei

    pri de rnduri din tabel, care satisfac valorii date i operatorii de lucru cu cursoarele, ce permit

    accesul pe rnduri la tabelul rezultat a adresrii.Este clar c n regimul de dialog setul de operatori SQL i sintaxa lor trebuie s fie unpic altfel. ntrebarea este cum s realizm un aa program de dialog. Regulile de implementare aSQL standart n programul elaborat ntr-un limbaj obinuit de programare prevd c toatinformaia, privind operatorii SQL, e cunoscut n static(cu excepia valorilor variabilelorutilizate n calitate de constante n SQL). Nu sunt prevzute sursele standarte de compilare cuexecuie succesiv a operatorilor, care devin cunoscui doar n momentul execuiei(de exempluse introduc din terminal). De aceea bazndu-ne doar pe standart, e imposibil de a realizamonitorul de dialog de interaciune cu BD n limbajul SQL sau alt program aplicat, n caretextul operatorilor SQL apare n timpul execuiei, adic standartul trebuie lrgit. Una din

    posibilele ci de lrgire const n utilizarea grupului special de operatori, ce asigur compilarea

    dinamic(n timpul execuiei programului aplicat) a submulimii de baz a operatorilor SQL icare sisin execuia lor corect. Unul din seturile de aa operatori fcea parte din dialectul SQL,realizat n System R, alt set mai deosebit face parte din realizarea Oracle V.6 i n sfrit, nstandartul nou SQL/92 a aprut versiunea standart a lui SQL dinamic.

    Deoarece n SGBD Oracle sursele lui SQL dinamic sunt realizate comparativ de mult,are sens s le vedem mai nti pe ele, pentru a avea o baz de comparaie cu SQL/92.

    n setul adugtor de oeratori, ce menin compilarea dinamic a operaiilor SQL de baz,intr operatorii: PREPARE, DESCRIBE i EXECUTE.

    16.5.1. Operatorul de pregtireOperatorul PREPARE are sintaxa:::=PREPAREFROM::=name.n timpul execuiei operatorului PREPARE rndul caracterial ce se conine n host string

    variable, se transmite compilatorului SQL, care-l prelucreaz la fel ca i cum s-ar fi primit nstatic. Codul primit la execuia operatorului prepare rmne acionabil pn la finisareatranzaciei sau pn la execuia repetat a operatorului dat PREPARE n limitele aceleieaitranzacii. Spre deosebire de operatorii SQL inclui static n programul elaborat n limbajul de

    programare dat are loc dup nume(adic n conformitate cu standartul n operatorul SQLimplementat pot fi utilizate pur i simplu numele variabilelor programului dat), natura dinamic

    a operatorilor, pregtii cu ajutorul operatorului PREPARE, impun analiza acestor nume ca numea parametrilor formali. Coincidena acestor parametri formali cu adresele variabilelorprogramului dat se determin poziional, n timpul execuiei operatorului pregtit.

    16.5.2. Operatorul de primire a descriere a operatorului pregtitOperatorul DESCRIBE este prevzut pentru determinarea tipului operatorului pregtit

    mai nainte, de a determina numrul i tipurile coloanelor tabelului rezultant, dac operatorulpregtit este operator de selecie(SELECT). Aciunea operatorului DESCRIBE const n faptulc n locaia de memorie selectat a programului aplicat(structura acestei locaii este fixat i estecunoscut de ctre utilizatori) se nscrie informaia care caracterizeaz operatorul pregtit maidevreme cu numele dat.

    16.5.3. Operatorul de execuie a operatorului pregtit

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    27/56

    Operatorul EXECUTE sete destinat execuiei operatorului SQL pregtit mai devreme detipul N(care nu cere aplicarea cursorului) sau pregtirii concomitente i execuiei a aaoperator. Sintaxa operatorului EXECUTE este:

    ::=EXECUTE{[USING]

    (IMMEDIATE}.Pentru execuia operatorului pregtit slujete prima variant a operatorului EXECUTE. nacest caz ;statement name: trebuie s dea numele ce a fost utilizat mai devreme n operatorulPREPARE. Dac n operatorul pregtit sunt prezeni parametri formali, atunci n operatorulEXECUTE trebuie s se indice lista parametrilor actuali . Numrul i tipurile

    parametrilor formali a operatorului pregtit.Varianta a doua a operatorului EXECUTE, n Oracle este destinat pregtirii concomitente

    i execuiei operatorului SQL de tip N. n acest caz parametrii execuiei operatoruluiEXECUTE este rndul, care trebuie s conin textul operatorului SQL(acest rnd poate fideasemenea indicat literal). Se interzice utilizarea n acest operator a variabilelor a programuluidat a parametrilor formali.

    16.5.4. Lucrul cu operatorii dinamici SQL prin intermediul cursoarelorPentru utilizarea a aa operatori se utilizeaz lrgirea mecanismului cursoarelor

    standartului SQL. n primul rnd, la determinarea cursorului putem indica nu numai specificaialiterar a cursorului, ci i numele operatorului ce se introduce cu ajutorul operatoruluiPREPARE( n acest caz operatorul PREPARE trebuie s se afle textual mai sus de operatorulDECLARE). Aa dar sintactica complet a operatorului DECLARE este urmtoarea:

    ::=DECLARE CURSORFOR{|}Deoarece, pentru aa cursor n static nu se cunoate informaia despre variabilele

    programului dat de intrare i de ieire, atunci se utilizeaz alt form a operatorilor OPEN iFETCH.

    Sintaxa complet a acestor operatori:::=OPEN[USING{|DESCRIPTOR}]::=FETCH{INTO (USING

    (USING DESCRIPTOR }.Dup cum se vede, se presupun duo tipuri de indicare a parametrilor de tip parametricde intrare i de ieire: direct cu intrarea n operatorii OPEN i/sau FETCH a listelor numelorvariabilelor a programului dat i indirect, cnd numele parametrilor i adresele lor se indic

    printr-o structur adugtoare a descriptorilor.Prima metod se ofer pentru lucrul cu operatorii de selecie, pentru care este fixat setul

    parametrilor formali de intrare i de ieire. Mai precis, n ceea ce privete parametrii de ieire,trebuie s fie fixai numrul i tipurile elementelor a listei de selecie.

    A doua metod de lucru cu operatorii dinamic compilai, care necesit utilizareacursoarelor, const n utilizarea descriptorilor a listelor parametrilor formate dinamic. n acestcaz toat rspunderea pentru coincidena tipurilor parametrilor formali i actuali cade pe

    programator. n rezultatul erorii la formularea a aa liste, poate fi pierdut memoria programuluiC.

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    28/56

    Lecia 17. Unele proprieti SQL/92 i SQL-3

    Lecia 17. Unele proprieti SQL/92 i SQL-3Noi nu vom descrie nici n general posibilitile noi a limbajului SQL n standartul

    SQL/92. n prezent aceasta este foarte gndit, cci unica realizare accesibil SQL/92 esteversiunea scump Oracle V.7. ns se pare a fi de folos, s indicm un ir de operatori a SQL

    dinamic cu mici comentarii, cci n SQL/92 este interpins primul pas de a standartiza aceastparte a limbajului SQL. La sfritul leciei se aduce o mic sumare a noilor posibiliti, ateptaten standartul nou SQL-3, lucrul asupra cruia se mai nfptuiete acum.

    17.1. Operatorul de destingere a memoriei sub descriptor

    17.1. Operatorul de destingere a memoriei sub descriptor::=ALLOCATE DESCRIPTOR [WITH MAX ]::=

    ::=[]::=GLOBAL|LOCAL::=((.Comentarii:Descriptorul este partea dinamic distingibil a memoriei programului aplicat care se

    utilizeaz pentru primirea informaiei despre rezultat sau despre parametrii operatorului SQLpregtit dinamic sau pentru indicarea parametrilor a aa operator. Sensul, c pentru destingereamemoriei se utilizeaz operatorul SQL, i nu pur i simplu funcia standart ALLOC sau ooarecare alt funcie a adresrii dinamice de memorie, const n faptul c programul aplicat nucunoate structura descriptorului i chiar a adresei lui. Aceasta permite de a nu lega SQL cu

    posibilitile deosebite a oricrei structuri de programare. Toate schimburile de informaie ntreprogramul aplicat i descriptori au loc la fel cu ajutorul unor operatori SQL(GET i SET, uitemai jos).

    ntrebarea a doua: Pentru ce n genere s destingem dinamic memorie sub descriptori.Aceasta se face pentru c n caz general programul aplicat, care utilizeaz SQL dinamic, nucunoate n static numrul operaiilor SQL ce lucreaz simultan, descrierea crora i-ar putea finecesar. Cu aceeai e legat faptul c numele descriptorului poate fi indicat ca rnd literal de

    simboluri att i ca variabil caracterial a limbajului inclusiv, adic el poate fi generat n timpulde ndeplinire a programului. n operatorul ALLOCATE DESCRIPTOR, se poate specificanumrul elementelor de descriere, pentru care el este calculat. Dac, de exemplu, n timpulalocrii memoriei prin descriptor n despritura WITH MAX se specific un numr ntreg N, iarapoi descriptorul se utilizeaz pentru descrierea M(M>N) elemente(de exemplu M coloane arezultatului adresrii, atunci acest fapt duce la apariia situaiei excepionale.

    17.2. Operatorul de elibirare a memoriei din descriptor

    17.2. Operatorul de elibirare a memoriei din descriptor::=

    DEALLOCATE DESCRIPTOR .Comentariu:

  • 8/7/2019 Limbajul Bazelor de Date Relation Ale SQL

    29/56

    Execuia acestui operator aduce la elibirarea memoriei din descriptorul delimitat maidevreme. Dup aceasta utilizarea numelui descriptorului este ilegal n orice alt operator, n afarde ALLOCATE DESCRIPTOR.

    17.3. Operatorul de primire a informaiei din regiunea descriptorului SQL

    17.3. Operatorul de primire a informaiei din regiunea descriptorului SQL::=GET DESCRIPTOR ::=(VALUE({}]::= COUNT

    ::=::=::=::=TYPE(LENGTH(OCTET_LENGTH(RETURNED_LENGTH(RETURNED_OCTET_LENGTH(PRECISION(SCALE(DATETIME_INTERVAL_CODE(DATETIME_INTERVAL_PRECISION(NULLABLE(INDICATOR(DATA(NAME

    (UNNAMED(COLLATION_CATALOG(COLLATION_SCHEMA(COLLATION_NAME(C