ls_curs_sql

Upload: danut-costache

Post on 03-Apr-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 LS_curs_SQL

    1/49

    Luminia Scripcariu Limbajul SQL

    Limbajul SQL

    Limbajul de baze de date SQL este implementat n diverse variante n programul de aplicaii

    ORACLE.

    Programul Oracle consta dintr-un set complet de constructori de aplicatii si produse pentru

    utilizatori, cautand sa asigure solutii complete in tehnologia informatiei.

    Aplicatiile Oracle sunt portabile peste un numar mare de statii de lucru si sisteme de operare,

    de la calculatoare personale la procesoare paralele.

    Oracle este inzestrat cu un flexibil Sistem de Management al Bazelor de Date (DBMS - Data

    Base Management System) numit i SGBD - Serverul Oracle - pentru stocarea si

    managementul informatiei utilizate de aplicatii.

    Serverul Oracle cuprinde un SGBD care controleaza:

    Stocarea de date in sfera bazelor de date dedicate Recuperarea de date pentru aplicatii utilizand tehnici de optimizare adecvate Securitatea bazelor de date si a taskurilor permise pentru anumiti utilizatori Consistenta si protectia datelor,incluzand arhivarea taskurilor si mecanisme de cautare Comunicarea si integritatea informatiilor,cand bazele de date sunt distribuite intr-o

    retea.

    Aplicatiile Oracle trebuie rulate pe acelasi computer la fel ca si Serverul Oracle. SQL,

    SQL*PLUS si PL/SQL sunt facilitatile Oracle.

    1

  • 7/29/2019 LS_curs_SQL

    2/49

    Luminia Scripcariu Limbajul SQL

    Multimea comenzilor SQL sunt conturate ca blocuri de interogare de baza.In particular, noi

    discutam declaratiile SQL folosite la:

    executia calculelor specificarea alternativa a capetelor de coloana concatenarea coloanelor sortarea rindurilor introducerea criteriilor de cautare.

    Privire de ansamblu asupra SQL

    Un sistem de management al bazei de date necesita un limbaj de interogare pentru a permite

    utilizatorului sa acceseze datele.SQL (limbaj de interogare structurata) este limbajul utilizat

    de majoritatea sistemelor de baza de date relational.

    Limbajul SQL a fost dezvoltat intr-un prototip de sistem de management a bazelor de date

    relationale - System R -de IBM la mijlocul anilor 1970.In 1979, Corporatia Oracle introduce

    prima implementare a SQL in varianta comerciala.

    Trasaturi caracteristice SQL

    SQL este prezentat in limba engleza. Foloseste cuvintele select, insert,delete ca partiale setului de comenzi.

    SQL este un limbaj neprocedural :specifica ce informatii doresti,nu cum sa le obtii.Cualte cuvinte SQL nu iti cere sa specifici metoda de acces la date.Toate cererile SQL

    folosesc optimizarea cererilor- o parte a RDBMS- pentru a determina rapid

    remedierea datelor specifi- cate.Aceste trasaturi usureaza obtinerea rezultatelor dorite.

    Procesarea SQL asupra inregistrarilor nu se poate face decit asupra unei singureinregistrari la un moment dat.Cea mai comuna forma a unui set de inregistrari este un

    tabel.

    SQL poate fi folosit de un sir de utilizatori incluzand DBA, programatori de aplicatii,personal de management si multe alte tipuri de utilizatori.

    SQL pune la dispozitie comenzi pentru o varietate de tascuri incluzand:o date interogateo inserarea,extragerea si stergerea rindurilor intr-un tabel.

    2

  • 7/29/2019 LS_curs_SQL

    3/49

    Luminia Scripcariu Limbajul SQL

    o crearea,modificarea si stergerea obiectelor de tip baza de dateo controlul accesului la baza de date si la obiectele de tip baza de date.o garantarea consistentei bazei de date

    La inceput sistemele de management a bazei de date a utilizat un limbaj separat pentru fiecare

    categorie in parte.SQL le-a unificat pe toate acestea intr-un singur limbaj.

    SQL a devenit un limbaj standard industrial pentru bazele de date relationale. Institutul

    National American de Standarde (ANSI) a adoptat SQL ca limbaj standard pentru RDBMS in

    anul 1986.Organizatia Internationala de Standarde (ISO) a adoptat deasemenea SQL ca

    limbaj standard pentru RDBMS.Toate RDBMS-urile suporta unele forme de SQL si toti

    vinzatorii de RDBMS intentioneaza sa se alinieze la standardele ANSI.

    Setul de comenzi SQL

    Comanda + Descriere:

    SELECT

    este comanda cea mai utilizata ; este folosita pentru obtinerea datelor din bazele de

    date

    INSERT

    aceste trei comenzi sunt utilizate pentru a introduce noi

    UPDATE

    rinduri,pentru a schimba rindurile existente si stergerea

    DELETE

    rindurilor nedorite din tabelele bazelor de date respective. (Ele sunt cunoscute in

    ansamblu ca DML sau comenzi ale limbajului de manipulare a datelor.)

    CREATE

    aceste trei comenzi sunt utilizate dinamic pentru a crea ,

    ALTER

    utiliza si sterge orice structura de date,de exemplu,tabele,

    DROP

    3

  • 7/29/2019 LS_curs_SQL

    4/49

    Luminia Scripcariu Limbajul SQL

    expuneri ,indecsi.(Ele sunt cunoscute sub numele colectiv DDL sau comenzi ale

    limbajelor de definire a datelor).

    GRANT

    aceste doua comenzi sunt utilizate pentru a da sau a lua

    REVOKE

    drepturile de acces pentru bazele de date si structurile din Oracle.

    N.B. Acestea sunt o parte a comenzilor SQL. Pentru o lista mai completa de comenzi se

    recomanda - Manualul de Referinta a Limbajului SQL- .

    Scrierea comenzilor SQL

    Cand scriem comenzi SQL ,este important sa ne reamintim cateva reguli simple pentru

    construirea unor declaratii valide care sunt si usor de citit si de editat:

    Comenzile SQL pot fi pe una sau mai multe linii. Clauzele sunt uzual plasate pe linii separate. Tabelarea poate fi folosita. Cuvintele de comanda nu pot fi separate pe mai multe linii. Comenzile SQL nu sunt 'case sensitive'. O comanda SQL este introdusa la promptul SQL si liniile subsecventelor sunt

    numarate.

    O singura declaratie poate fi considerata curenta cat timp ea este in buffer si poate firulata intr-un numar de moduri :

    o plasand un punct si virgula(;) la sfarsitul ultimei clauze.o plasand un punct si virgula /slash la ultima linie in buffer.o plasand un slash(/) la promptul SQL.o scriind un R[UN] (comanda SQL) la promptul SQL.

    Fi ecar e di n ur mat oar el e decl ar at i i sunt val i de:

    SELECT * FROM EMP;

    SELECT

    *FROM

    4

  • 7/29/2019 LS_curs_SQL

    5/49

    Luminia Scripcariu Limbajul SQL

    EMP

    ;

    SELECT *

    FROM EMP;

    Blocul de interogare de baza

    Declaratia SELECT regaseste informatia din baza de date implementand toti operatorii din

    algebra relationala .

    In cele mai simple forme trebuie sa contina:

    1. O clauza SELECT ,care listeaza coloanele pentru afisare astfel incat este esentiala oProiectie.

    2. O clauza FROM care specifica tabela implicata.

    Pent r u a l i st a t oat e numer el e depart ament el or , numel e angaj at i l or si

    numar ul manager i l or i n t abel a EMP i nt r oducet i ur mat oarel e:

    SELECT DEPTNO, ENAME, MGRFROM EMP;

    DEPTNO ENAME MGR

    - - - - - - - - - - - - - - - - - - - - -

    20 SMI TH 7902

    30 ALLEN 7698

    30 WARD 7698

    20 J ONES 7839

    30 MARTI N 7698

    30 BLAKE 7839

    10 CLARK 7839

    20 SCOTT 7566

    10 KI NG

    30 TURNER 7698

    20 ADAMS 7788

    30 J AMES 7698

    20 FORD 7566

    10 MI LLER 7782

    5

  • 7/29/2019 LS_curs_SQL

    6/49

    Luminia Scripcariu Limbajul SQL

    De remarcat ca numele coloanelor sunt separate prin spatiu.

    Est e posi bi l sa sel ectam t oat e col oanel e di n t abel a pr i n speci f i car eaunui ast er i x ( ' *' ) dupa cuvant ul SELECT .

    SELECT *

    FROM EMP;

    EMPNO ENAME J OB MGR HI REDATE SAL COMM DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7369 SMI TH CLERK 7902 13- J UL- 83 800. 00 20

    7499 ALLEN SALESMAN 7698 15- AUG- 83 1, 600. 00 300. 00 307521 WARD SALESMAN 7698 26- MAR- 84 1, 250. 00 500. 00 30

    7566 J ONES MANAGER 7839 31- OCT- 83 2, 975. 00 20

    7654 MARTI N SALESMAN 7698 05- DEC- 83 1, 250. 00 1. 400. 00 30

    7698 BLAKE MANAGER 7839 11- J UN- 84 2, 850. 00 30

    7782 CLARK MANAGER 7839 14- MAY- 84 2, 450. 00 10

    7788 SCOTT ANALYST 7566 05- MAR- 84 3, 000. 00 20

    7839 KI NG PRESI DENT 09- J UL- 84 5, 000. 00 10

    7844 TURNER SALESMAN 7698 04- J UN- 84 1, 500. 00 . 00 30

    7876 ADAMS CLERK 7788 04- J UN- 84 1, 100. 00 20

    7900 J AMES CLERK 7698 23- J UL- 84 950. 00 30

    7902 FORD ANALYST 7566 05- DEC- 83 3, 000. 00 20

    Alte elemente in clauza SELECT

    Este posibil sa se includa si alte elemente in clauza SELECT.

    Expresii aritmetice Alias-uri de coloane Coloane concatenate Literali

    Toate aceste optiuni ajuta utilizatorul sa ceara date si sa le manipuleze in functie de scopurile

    interogarii ; de exemplu,executia calculelor,legarea coloanelor impreuna,sau afisarea sirurilorde litere din text.

    6

  • 7/29/2019 LS_curs_SQL

    7/49

    Luminia Scripcariu Limbajul SQL

    Expresii aritmetice

    O expresie este o combinatie de una sau mai multe valori,operatori si functii care sa

    evalueaza la o valoare.

    Expresiile aritmetice pot contine nume de coloane ,valori numerice constante si operatori

    aritmetici:

    Oper at or i Descr i er e

    - - - - - - - - - - - - - - - - - -

    + adunar e

    - scader e

    * i nmul t i r e

    / i mpart i r e

    SELECT ENAME, SAL*12, COMM

    FROM EMP;

    Daca expresia aritmetica contine mai mult decat un operator, prioritatile sunt *,/,la

    inceput,apoi +,- (de la stanga la dreapta pentru operatorii de aceeasi prioritate).

    In urmatorul exemplu,inmultirea (250*12) este evaluata prima;apoi valoarea salariului este

    adunata la rezultatul multiplicarii(3000). Astfel pentru randul lui SMITH avem

    :800+3000=3800.

    SELECT ENAME, SAL + 250 * 12

    FROM EMP;

    Parantezele pot fi utilizate pntru specificarea ordinii de executie a operatorilor ,daca,de

    exemplu ,adunarea e dorita inainte de inmultire:

    SELECT ENAME, ( SAL + 250) * 12

    FROM EMP;

    7

  • 7/29/2019 LS_curs_SQL

    8/49

    Luminia Scripcariu Limbajul SQL

    Intr-o declaratie SQL ,un alias de coloana poate fi utilizat numai in clauza SELECT.

    Operatorul de concatenare

    Operatorul de concatenare (||) permite coloanelor sa fie legate cu alte coloane,expresiilor

    aritmetice sau valorilor constante sa creeze o expresie de caractere.

    Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura coloana.

    Pentru a combina EMPNO si ENAME si sa se dea aliasul EMPLOYEE expresiei, introduceti:

    SELECT EMPNO| | ENAME EMPLOYEE

    FROM EMP;

    EMPLOYEE

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7369SMI TH7499ALLEN

    7521WARD

    7566J ONES

    7654MARTI N

    7698BLAKE

    7782CLARK

    7788SCOTT

    7839KI NG

    7844TURNER

    7876ADAMS

    7900J AMES

    7902FORD

    7934MI LLER

    Literali

    8

  • 7/29/2019 LS_curs_SQL

    9/49

    Luminia Scripcariu Limbajul SQL

    Un literal este orice caracter ,expresie ,numar inclus in lista lui SELECT care nu este un

    nume de coloana sau un alias de coloana.

    Un literal in lista lui SELECT este reprezentat de fiecare rand returnat la iesire.Sirurile de

    literali dintr-un text cu un format oarecare pot fi incluse in rezultatul interogarii si sunt tratate

    ca o coloana lista selectata.

    Literalii de tip data calendaristica si caracter pot fi inchisi intre ghilimele simple(');literlalii de

    tip numar nu au nevoie de ghilimele simple(').

    Urmatoarea declaratie contine literali selectati prin concatenare si printr-un alias de coloana:

    SELECT EMPNO| | ' - ' | | ENAME EMPLOYEE,

    ' WORKS I N DEPARTMENT' ,

    DEPTNO

    FROM EMP;

    EMPLOYEE ' WORKS I N DEPARTMENT' DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7369- SMI TH WORKS I N DEPARTMENT 20

    7499- ALLEN WORKS I N DEPARTMENT 30

    7521- WARD WORKS I N DEPARTMENT 30

    7566- J ONES WORKS I N DEPARTMENT 20

    7654- MARTI N WORKS I N DEPARTMENT 30

    7698- BLAKE WORKS I N DEPARTMENT 30

    7782- CLARK WORKS I N DEPARTMENT 10

    7788- SCOTT WORKS I N DEPARTMENT 20

    7839- KI NG WORKS I N DEPARTMENT 10

    7844- TURNER WORKS I N DEPARTMENT 30

    7876- ADAMS WORKS I N DEPARTMENT 20

    7900- J AMES WORKS I N DEPARTMENT 30

    7902- FORD WORKS I N DEPARTMENT 20

    7934- MI LLER WORKS I N DEPARTMENT 10

    Tratarea valorilor nule

    9

  • 7/29/2019 LS_curs_SQL

    10/49

    Luminia Scripcariu Limbajul SQL

    Daca unui rand ii lipseste o valoare pentru o anumita coloana ,despre acea valoare se spune

    ca este nula.

    O valoare nula este o valoare care este sau incorecta,sau necunoscuta,sau inaplicabila.O

    valoare nula nu este la fel ca 'zero'.Zero este un numar.Valoarea nula ocupa un octet in

    reprezentarea interna.

    Valoarea nula este tratata corect de catre SQL.

    Daca orice valoare de coloana intr-o expresie este nula atunci rezultatul este nul.In

    urmatoarea declaratie numai Salesman are un rezultat al salariului:

    SELECT ENAME, SAL*12 + COMM ANNUAL_SAL

    FROM EMP;

    ENAME ANNUAL_SAL

    - - - - - - - - - - - - - - - - - - -

    SMI TH

    ALLEN 19500

    WARD 15500

    J ONES

    MARTI N 16400

    BLAKE

    CLARK

    SCOTT

    KI NG

    TURNER 18000

    ADAMS

    J AMES

    FORD

    MI LLER

    Daca dorim sa obtinem un rezultat pentru toti angajatii,este necesar sa convertim valoarea

    nula la un numar . Noi folosim functia NVL pentru a converti o valoare nula la o valoare

    nenula.

    10

  • 7/29/2019 LS_curs_SQL

    11/49

    Luminia Scripcariu Limbajul SQL

    Folositi functia NVL pentru a converti valoarea nula de la declaratia precedenta la 0.

    SELECT ENAME, SAL*12+NVL( COMM, 0) ANNUAL_SAL

    FROM EMP;

    ENAME ANNUAL_SAL

    - - - - - - - - - - - - - - - - - - -

    SMI TH 9600

    ALLEN 19500

    WARD 15500

    J ONES 35700

    MARTI N 16400BLAKE 34200

    CLARK 29400

    SCOTT 36000

    KI NG 60000

    TURNER 18000

    ADAMS 13200

    J AMES 11400

    FORD 36000

    MI LLER 15600

    NVL asteapta doua argumente:

    1. o expresie2. o valoare nenula

    De notat ca puteti folosi functia NVL pentru a converti un numar nul , data calendaristica sausir de caractere la un alt numar , data calendaristica sau sir de caractere de acceasi lungime si

    de acelasi tip de date asteptate.

    NVL( DATECOLUMN, ' 01- J AN- 88' )

    NVL( NUMBERCOLUMN, 9)

    NVL( CHARCOLUMN, ' STRI NG' )

    11

  • 7/29/2019 LS_curs_SQL

    12/49

    Luminia Scripcariu Limbajul SQL

    Prevenirea selectiei rindurilor duplicate

    Daca nu se indica altfel, SQL*Plus afiseaza rezultatul unei interogari fara eliminarea

    intrarilor duplicate .

    Pentru a lista toate numerele de departament din tabela EMP, introduceti:

    SELECT DEPTNO

    FROM EMP;

    DEPTNO

    - - - - - -

    20

    30

    30

    20

    30

    30

    10

    20

    10

    30

    20

    30

    2010

    Clauza DISTINCT

    Pentru eliminarea valorilor duplicate din rezultat, includeti restrictia DISTINCT in comanda

    SELECT.

    12

  • 7/29/2019 LS_curs_SQL

    13/49

    Luminia Scripcariu Limbajul SQL

    Pentru a elimina valorile duplicate afisate in exemplul urmator introduceti:

    SELECT DI STI NCT DEPTNO

    FROM EMP;

    DEPTNO

    - - - - - -

    10

    20

    30

    Coloane multiple pot fi specificate dupa restrictia DISTINCT si restrictia DISTINCt

    afecteaza toate coloanele selectate.

    Pentru a afisa valorile distincte ale lui DEPTNO si JOB,introduceti:

    SELECT DI STI NCT DEPTNO, J OB

    FROM EMP;

    DEPTNO J OB

    - - - - - - - - - - - - - - -

    10 CLERK

    10 MANAGER

    10 PRESI DENT

    20 ANALYST

    20 CLERK

    20 MANAGER

    30 CLERK30 MANAGER

    30 SALESMAN

    Aceasta afiseaza o lista a tuturor combinatiilor diferite de ocupatie si numere de

    departamente.

    De notat ca restrictia DISTINCT poate sa fie referita numai o singura data si trebuie sa

    urmeze imediat dupa cuvantul de comanda SELECT.

    13

  • 7/29/2019 LS_curs_SQL

    14/49

    Luminia Scripcariu Limbajul SQL

    Clauza ORDER BY

    In mod normal ordinea rindurilor intoarse in rezultatul unei cereri este nedefinita .Clauza

    ORDER BY poate fi utilizata pentru a sorta rindurile.

    Daca o folosim, clauza ORDEY BY trebuie sa fie intotdeauna ultima in declaratia SELECT.

    Pentru a sorta dupa ENAME, introduceti:

    SELECT ENAME, J OB, SAL*12, DEPTNO

    FROM EMP

    ORDER BY ENAME;

    ENAME J OB SAL*12 DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    ADAMS CLERK 13200 20

    ALLEN SALESMAN 19200 30

    BLAKE MANAGER 34200 30

    CLARK MANAGER 29400 10

    FORD ANALYST 36000 20

    J AMES CLERK 11400 30J ONES MANAGER 35700 20

    KI NG PRESI DENT 60000 10

    MARTI N SALESMAN 15000 30

    MI LLER CLERK 15600 10

    SCOTT ANALYST 36000 20

    SMI TH CLERK 9600 20

    TURNER SALESMAN 18000 30

    WARD SALESMAN 15000 30

    Ordonarea de default a datelor

    Ordinea sortarii de default este ascendenta:

    Valorile numerice cele mai mici primele Valorile de tip date calendaristice cele mai mici primele. Valorile de tip caracter in ordinea alfabetica.

    14

  • 7/29/2019 LS_curs_SQL

    15/49

  • 7/29/2019 LS_curs_SQL

    16/49

    Luminia Scripcariu Limbajul SQL

    Pentru a ordona dupa doua coloane si afisa in ordinea inversa a salariului, introduceti:

    SELECT DEPTNO, J OB, ENAME

    FROM EMPORDER BY DEPTNO, SAL DESC;

    DEPTNO J OB ENAME

    - - - - - - - - - - - - - - - - - - - - - - - - -

    10 PRESI DENT KI NG

    10 MANAGER CLARK

    10 CLERK MI LLER

    20 ANALYST SCOTT20 ANALYST FORD

    20 MANAGER J ONES

    20 CLERK ADAMS

    20 CLERK SMI TH

    30 MANAGER BLAKE

    30 SALESMAN ALLEN

    30 SALESMAN TURNER

    30 SALESMAN WARD

    30 SALESMAN MARTI N

    30 CLERK J AMES

    Pentru a ordona dupa o coloana nu este necesar sa o avem SELECT-ata.

    ORDER BY si valorile nule

    In Oracle7,valorile nule sunt afisate ultimele pentru secventele ascendente si sint raportate

    primele cind rindurile sunt sortate in ordine descendenta.

    Atentie:

    Clauza ORDER BY este utilizata intr-o interogare cind se doreste sa se afiseze rindurile intr-

    o ordine specifica .Fara clauza ORDER BY randurile sunt returnate intr-o ordine convenita

    de ORACLE si va trebui sa ne bazam pe el- ordinea determinata fiind consistenta de la cerere

    16

  • 7/29/2019 LS_curs_SQL

    17/49

    Luminia Scripcariu Limbajul SQL

    la cerere.De notat ca ordinea de afisare a rindurilor nu influenteaza ordinea interna a

    rindurilor asa cum sunt stocate in tabela.

    Clauza WHERE

    Clauza WHERE corespunde operatorului 'Restrictie' din algebra relationala.

    Contine o conditie pe care rindurile trebuie sa o indeplineasca in ordinea afisarii lor.

    Clauza WHERE ,daca este folosita , trebuie sa urmeze clauzei FROM :

    SELECT col oane

    FROM t abel a

    WHERE anumi t e condi t i i sunt i nt i l ni t e

    Clauza WHERE poate compara valori in coloana ,valori literale,expresii aritmetice sau

    functii.

    Clauza WHERE asteapta trei elemente:

    1. Un nume de coloana2. Un operator de comparatie3. Un nume de coloana, constanta sau lista de valori.

    Operatorii de comparatie sunt utilizati in clauza WHERE si pot fi impartiti in doua categorii:

    logici si SQL.

    Operatorii logici

    Acesti operatori verifica urmatoarele conditii:

    Oper at or Semni f i cat i e

    - - - - - - - - - - - - - - - - - - - -

    = egal cu

    > mai mar e deci t

    >= mai mar e sau egal

    < mai mi c deci t

  • 7/29/2019 LS_curs_SQL

    18/49

    Luminia Scripcariu Limbajul SQL

    Sirurile de caractere si datele calendaristice in clauza

    WHERE

    Coloanele din ORACLE pot avea urmatoarele tipuri:caracter,numar sau data calendaristica.

    Sirurile de caractere si datele calendaristice din clauza WHERE trebuie sa fie inchise in

    ghilimele simple('). Sirurile de caractere trebuie sa se supra- puna cu valoarea coloanei daca

    nu, trebuie modificate de o functie. Utilizati "Functii pe Caractere" din capitolul 4.

    Pentru a afisa numele,numerele,ocupatia si departamentele tuturor functionarilor, introduceti:

    SELECT ENAME, EMPNO, J OB, DEPTNO

    FROM EMP

    WHERE J OB = ' CLERK' ;

    ENAME EMPNO J OB DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    SMI TH 7369 CLERK 20

    ADAMS 7876 CLERK 20

    J AMES 7900 CLERK 30

    MI LLER 7934 CLERK 10

    Pentru a gasi toate numele de departamente cu numerele de departament mai mare ca 20

    ,introduceti:

    SELECT DNAME, DEPTNO

    FROM DEPT

    WHERE DEPTNO >20;

    DNAME DEPTNO

    - - - - - - - - - - - - - - - -

    SALES 30

    OPERATI ONS 40

    18

  • 7/29/2019 LS_curs_SQL

    19/49

    Luminia Scripcariu Limbajul SQL

    Compararea unei coloane cu alta in cadrul aceluiasi rand

    Puteti compara o coloana cu o alta coloana in acelasi rand,la fel ca si cu o valoare constanta.

    De exemplu ,presupunem ca dorim sa obtinem acei angajati al caror comision est mai maredecat salariul lor:

    SELECT ENAME, SAL, COMM

    FROM EMP

    WHERE COMM> SAL;

    ENAME SAL COMM

    - - - - - - - - - - - - - - - - - - - - - -

    MARTI N 1, 250. 00 1, 400. 00

    Operatori SQL

    Sint patru operatori SQL care opereaza pe toate tipuril de date:

    Oper ator i SQL

    Oper at or Semni f i cat i e

    - - - - - - - - - - - - - - - - - - - -

    BETWEEN. . AND. . . i nt r e doua val or i ( i ncl usi v)

    I N( l i st ) compar a cu o l i st a de val or i

    LI KE compar a cu un model de t i p car act er

    I S NULL est o val oar e nul a

    Operatorul BETWEEN

    19

  • 7/29/2019 LS_curs_SQL

    20/49

    Luminia Scripcariu Limbajul SQL

    Realizeaza teste pentru valori intre,si inclusiv,o valoare minima si o valoare maxima.

    Presupunind ca dorim sa vedem angajatii ai caror salariu este intre 1000 si 2000:

    SELECT ENAME, SAL

    FROM EMP

    WHERE SAL BETWEEN 1000 AND 2000;

    ENAME SAL

    - - - - - - - - - - - - - - - - -

    ALLEN 1, 600. 00

    WARD 1, 250. 00

    MARTI N 1, 250. 00

    TURNER 1, 500. 00

    ADAMS 1, 100. 00

    MI LLER 1, 300. 00

    De notat ca valorile specificate sunt inclusive si ca limita minima trebuie specificata prima.

    Operatorul IN

    Testeaza valorile dintr-o lista specificata.

    Presupunem ca dorim sa gasim angajatii care au unul din cele trei numere de marca(MGR):

    SELECT EMPNO, ENAME, SAL, MGR

    FROM EMP

    WHERE MGR I N ( 7902, 7566, 7788) ;

    EMPNO ENAME SAL MGR

    - - - - - - - - - - - - - - - - - - - - - - - -

    7369 SMI TH 800. 00 7902

    7788 SCOTT 3, 000. 00 7566

    7876 ADAMS 1, 100. 00 7788

    7902 FORD 3, 000. 00 7566

    Daca, caracterele sau datele calendaristice sunt utilizate,ele trebuie introduse intre ghilimele('').

    20

  • 7/29/2019 LS_curs_SQL

    21/49

    Luminia Scripcariu Limbajul SQL

    Operatorul LIKE

    Uneori nu se cunosc valorile exacte pe care le cautam.Utilizand operatorul LIKE este posibil

    sa selectam randurile care se potrivesc cu un model specificat de caractere.Operatia de petter-

    matching a caracterelor poate fi asemanata cu o cautare 'wild-card'.Doi simboli se pot utiliza

    la construirea sirului de cautare.

    Si mbol Repr ezent are

    - - - - - - - - - - - - - - - - - -

    % ori ce secvent a de zero sau mai mul t e car act er e

    - un si ngur car act er oar ecar e

    Pentru a lista toti angajatii al caror nume incepe cu un S,introduceti:

    SELECT ENAME

    FROM EMP

    WHERE ENAME LI KE ' S%' ;

    ENAME

    - - - - - - - -

    SMI TH

    SCOTT

    Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac- tere.

    De exemplu pentru a lista toti angajatii care au un nume exact de patru caractere lungime:

    SELECT ENAME

    FROM EMP

    WHERE ENAME LI KE ' ____' ;

    ENAME- - - - -

    WARD

    KI NG

    FORD

    Semnele '%' si '_'pot fi utilizate in orice combinatie de caractere.

    Operatorul IS NULL

    Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.

    21

  • 7/29/2019 LS_curs_SQL

    22/49

    Luminia Scripcariu Limbajul SQL

    SELECT ENAME, MGR

    FROM EMP

    WHERE MGR I S NULL;

    ENAME MGR

    - - - - - - - - - -

    KI NG

    Negarea expresiilor

    Ur mat or i i oper at or i f ac t est e de negat i e:

    Oper at or Descr i ere

    - - - - - - - - - - - - - - - - - - -

    ! = di f er i t de( VAX, UNI X, PC)

    = di f er i t de( I BM)

    di f er i t de( t oat e o/ s)

    NOT NUMECOL= di f er i t de

    NOT NUMECOL> mai mi c sau egal

    Oper ator i SQL

    Oper at or Descr i ere

    - - - - - - - - - - - - - - - - -

    NOT BETWEEN nu se af l a i nt r e doua val or i dat e

    NOT I N nu se af l a i nt r - o l i st a dat a de val or i

    NOT LI KE di f er i t de si r ul

    I S NOT NULL nu est e o val oar e nul a

    Pent r u a af l a acei angaj at i a car or meser i e nu i ncepe cu M, i nt r oducet i :

    SELECT ENAME, J OB

    FROM EMP

    WHERE J OB NOT LI KE ' M%' ;

    ENAME J OB

    - - - - - - - - - - - - - - - -

    22

  • 7/29/2019 LS_curs_SQL

    23/49

    Luminia Scripcariu Limbajul SQL

    SMI TH CLERK

    ALLEN SALESMAN

    WARD SALESMAN

    MARTI N SALESMAN

    SCOTT ANALYSTKI NG PRESI DENT

    TURNER SALESMAN

    ADAMS CLERK

    J AMES CLERK

    FORD ANALYST

    MI LLER CLERK

    Interogarea datelor cu conditii multiple

    Operatorii AND sau OR pot fi utilizati pentru a compune expresii logice.

    Predicatul AND este adevarat numai daca ambele conditii sunt 'adevarate'; predicatul OR este

    adevarat daca cel putin una din conditii este 'adevarata'.

    In urmatoarele doua exemple,conditiile sunt aceleasi,dar predicatele difera Priviti cum

    rezultatul este dramatic modificat.

    Pent r u a gasi t ot i f uncti onar i i car e casti ga i nt r e

    1000 si 2000, i nt r oducet i :

    SELECT EMPNO, ENAME, J OB, SAL

    FROM EMP

    WHERE SAL BETWEEN 1000 AND 2000

    AND J OB = ' CLERK' ;

    EMPNO ENAME J OB SAL

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7876 ADAMS CLERK 1, 100. 00

    7934 MI LLER CLERK 1, 300. 00

    Pent r u a af l a t ot i angaj at i i car e sunt si f uncti onar i s i / sau

    23

  • 7/29/2019 LS_curs_SQL

    24/49

    Luminia Scripcariu Limbajul SQL

    f unct i onar i car e cast i ga i nt r e 1000 si 2000, i nt r oducet i :

    SELECT EMPNO, ENAME, J OB, SAL

    FROM EMP

    WHERE SAL BETWEEN 1000 AND 2000OR J OB = ' CLERK' ;

    EMPNO ENAME J OB SAL

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7369 SMI TH CLERK 800. 00

    7499 ALLEN SALESMAN 1, 600. 00

    7521 WARD SALESMAN 1, 250. 00

    7654 MARTI N SALESMAN 1, 250. 00

    7844 TURNER SALESMAN 1, 500. 007876 ADAMS CLERK 1, 100. 00

    7900 J AMES CLERK 950. 00

    7934 MI LLER CLERK 1, 300. 00

    Puteti combina AND sau OR in acceasi expresie logica. Cand AND sau OR apar in aceeasi

    clauza WHERE, toti operatorii AND sunt evaluati mai intai si apoi toti operatorii OR. Vom

    spune ca operatorii AND au o precedenta mai mare decat OR.

    Deoarece AND are o precedenta mai mare decat OR urmatoarea declaratie SQL intoarce toti

    managerii cu salarii peste 1500$ si toti vanzatorii.

    SELECT EMPNO, ENAME, J OB, SAL, DEPTNO

    FROM EMP

    WHERE SAL> 1500

    AND J OB = ' MANAGER'

    OR J OB = ' SALESMAN' ;

    EMPNO ENAME J OB SAL DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7499 ALLEN SALESMAN 1, 600. 00 30

    7521 WARD SALESMAN 1, 250. 00 30

    7566 J ONES MANAGER 2, 975. 00 20

    7654 MARTI N SALESMAN 1, 250. 00 30

    7698 BLAKE MANAGER 2, 850. 00 30

    7782 CLARK MANAGER 2, 450. 00 10

    24

  • 7/29/2019 LS_curs_SQL

    25/49

    Luminia Scripcariu Limbajul SQL

    7844 TURNER SALESMAN 1, 500. 00 30

    Daca dor i t i sa sel ectati t ot i manager i i si vanzat or i i

    cu sal ar i i pest e 1500$ put et i i nt r oduce:

    SELECT EMPNO, ENAME, J OB, SAL, DEPTNO

    FROM EMP

    WHERE SAL >1500

    AND ( J OB = ' MANAGER'

    OR J OB = ' SALESMAN' ) ;

    EMPNO ENAME J OB SAL DEPTNO

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    7499 ALLEN SALESMAN 1, 600. 00 307566 J ONES MANAGER 2, 975. 00 20

    7698 BLAKE MANAGER 2, 850. 00 30

    7782 CLARK MANAGER 2, 450. 00 10

    Parantezele specifica ordinea in care operatorii vor fi evaluati. In al doilea exemplu

    operatorul OR este evaluat inaintea operatorului AND.

    Logarea la SQL*Plus

    SQL*Plus

    SQL*Plus este un program scris de Corporatia Oracle,ce produce un mediu pentru comenzile

    SQL ce pot fi tastate direct sau rulate dintr-un fisier de comanda.In plus ,comenzile SQL pot

    fi derivate.Ele sunt folosite pentru:

    formatarea rezultatelor setarea optiunilor editarea si stocarea declaratiilor SQL

    Odata ce v-ati logat la sistemul vostru de operare,sunt 3 moduri pentru a va loga la

    SQL*Plus:

    1. SQLPLUS

    25

  • 7/29/2019 LS_curs_SQL

    26/49

    Luminia Scripcariu Limbajul SQL

    o Veti vedea dupa aceasta un mesaj ca acesta:o SQL*Plus: Version 3.1.1 Production on Mon Oct 4 1993 Copyright (c)

    1992,Oracle Corporation,California,USA. All rights reserved. Enter

    Username:

    o Introduceti numele vostru de user si apasati RETURN: SQL*Plus va afisapromptul :"Enter Password:". Introduceti parola voastra si apasati din nou

    RETURN.

    o Pentru protectia voastra ,parola nu va apare pe ecran. SQL*Plus va afisapromptul sau: SQL>

    o Aceasta indica linia de comanda .Acolo sunt doua feluri de comenzi si putetiintroduce pe acesta linie de comanda:comenzi SQL sau comenzi SQL*Plus.

    2. SQLPLUS usernameo Veti fi indemnati sa va dati parola.

    3. SQLPLUS username/passwordo Veti fi logati la SQL*Plus.In acest caz parolz v a fi afisata.

    Alegeti metoda pe care o preferati.

    Editarea declaratiilor SQL utilizand comenzi SQL*Plus

    1. Cand veti introduce o comanda SQL,aceasta este stocata intr-o zona de memorieutilizata de buferul SQL si ramane acolo pana ce veti introduce o noua comanda.

    2. Daca apasati [RETURN] inainte de a completa o comanda,SQL*Plus va afisa unnumar de linie.

    3. Terminatorul pentru declaratiile SQL este un ';'.4. Cat timp declaratia SQL este in bufer,sunt cateva operatii de editare directe care pot fi

    executate utilizand comenzi SQL*Plus:

    Comanda Abrevi er ea ROL

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    APPEND t ext A t ext adauga ' t ext ' l a sf ar si t ul l i ni ei cur ent e.

    CHANGE C/ ol d/ new schi mba vechi ul t ext cu noul t ext i n l i ni a

    cur ent a.CHANGE C/ t ext / st er ge ' t ext ' - ul di n l i ni a cur ent a

    26

  • 7/29/2019 LS_curs_SQL

    27/49

    Luminia Scripcariu Limbajul SQL

    CLEAR BUFFER CL BUFF st erge t oat e l i ni i l e di n buf erul SQL.

    DEL st er ge l i ni a cur ent a.

    I NPUT I i nser eaza un numar nedef i ni t de l i ni i .

    I NPUT I t ext i nser eaza o l i ni e consti t ui t a di n ' t ext ' -

    ulr especti v

    LI ST L l i steaza t oat e l i ni i l e di n buf er ul SQL.

    LI ST n Ln l i st eaza o l i ni e ( speci f i cat a de n)

    LI ST m, n L m n l i st eaza un numar de l i ni i ( de l a m l a n) .

    RUN R af i seaza si execut a comanda SQL cur ent a

    di n

    buf f er .

    / execut a comanda SQL car e est e cur ent a

    i nbuf er .

    Diversitatea comenzilor SQL*Plus

    Comenzile SQL (precum SELECT) sunt mijloace de acces la date prin kernelul

    Oracle.Comenzile SQL sunt utilizate in special pentru controlul mediului, formatarearezultatelor interogarilor si controlul fisierelor.Comenzile identificate aici sunt amestecate si

    trebuie sa le folositi in urmatoarele exercitii.

    Comenzile SQL sunt introduse la promptul SQL> pe o linie ,ele nu vor deschide un buffer.

    Comanda + Descriere

    SAVE numefispermite salvarea intr-un fisier a continutului buferului SQL.

    GET numefis

    incarca continutul unui fisier salvat in prealabil in buffer.

    START numefis

    ruleaza un fisier de comanda salvat in prealabil. Fisierele de comanda sunt tratate in

    capitolul 10.

    ED numefis

    utilizeaza un editor de default pentru a edita continutul unui fisier salvat.

    27

  • 7/29/2019 LS_curs_SQL

    28/49

    Luminia Scripcariu Limbajul SQL

    EXIT

    paraseste SQL*Plus.

    SMI TH 20 13- J UN- 83

    ALLEN 30 15- AUG- 83

    J ONES 20 31- OCT- 83

    MARTI N 30 05- DEC- 83

    FORD 20 05- DEC- 83

    MI LLER 10 21- NOV- 830

    6 i nr egi str ar i sel ectat e.

    Rularea cererilor standard cu variabile substituite.

    Variabilele substituite sunt folosite in declaratiile SQL si permite utilizarea valorilor

    specificate la rulare.

    Variabile in SQL *Plus

    In plus fata de variabilele pe care le vom vedea in limbajul PL/SQL, SQL*Plus este inzestrat

    cu doua tipuri de variabile ale sale:

    Variabile legate

    Utilizate pentru stocarea valorilor individuale ce pot fi asignate si citite in timpul

    rularii(vor fi discutate mai tarziu in acest curs).

    Variabile substituite

    Utilizate pentru stocarea partilor de text de comanda ,care sunt "editate" in comenzi

    inainte de executia lor.

    Variabile substituite cu un singur ampersand.

    Puteti utiliza 'variabile substituite' intr-un fisier de comanda sau intr-o declaratie SQL pentru

    a reprezenta valori ce vor fi aflate la executie.

    O variabila poate fi vazuta ca un container in care valoarea este stocata temporar.

    28

  • 7/29/2019 LS_curs_SQL

    29/49

    Luminia Scripcariu Limbajul SQL

    O variabila substituita este prefixata de un singur ampersand(&) si o valoare care ii este

    asignata.

    Urmatoarea declaratie obliga utilizatorul sa dea un numar de departament la executie:

    SELECT EMPNO, ENAME, SAL

    FROM EMP

    WHERE DEPTNO = &DEPARTAMENT_NUMBER;

    Enter val ue f or depart ment _number : 10

    EMPNO ENAME SAL

    - - - - - - - - - - - - - - - - - - - - - - - - -

    7782 CLARK 2, 450. 00

    7839 KI NG 5, 000. 00

    7934 MI LLER 1, 300. 00

    Exemplul anterior utilizeaza conditia WHERE DEPTNO=10.

    Cu un singur ampersand utilizatorul este obligat sa dea o valoare de fiecare data cand

    comanda este executata,deoarece variabila nu este definita si de fiacare data valoarea

    introdusa nu este salvata .

    O valoare de tip caracter sau data are nevoie sa fie inchisa in ghilimele simple cand sunt

    introduse la cerere.Pentru a evita ghilimelele simple ce tre- buie sa fie introduse la executie

    ,puteti pune variabilele in ghilimele simple.

    In urmatoarea declaratie ,variabila este pusa intre ghilimele simple, asa ca ghilimele nu mai

    sunt necesare la introducerea valorii respective:

    SELECT ENAME, DEPTNO, SAL*12

    FROM EMP

    WHERE J OB = ' &l t J OB_TI TLE' ;

    29

  • 7/29/2019 LS_curs_SQL

    30/49

    Luminia Scripcariu Limbajul SQL

    Ent er val ue f or j ob_t i t l e: MANAGER

    ENAME DEPTNO SAL*12

    - - - - - - - - - - - - - - - - - - -

    J ONES 20 35700BLAKE 30 34200

    CLARK 10 29400

    Cat timp variabila este variabila 'nedefinita' ,valoarea va fi ceruta de fiecare data cand

    declaratia este executata.

    Este posibil sa fie cerut numele unei coloane sau chiar numele unei tabele in timpul executiei.

    In urmatorul exemplu vi se cere o expresie aritmetica:

    SELECT DEPTNO, &l t ARI THMETI C_EXPRESI ON

    FROM EMP;

    Ent er val ue f or ari t hmet i c_expr essi on: sal / 12

    DEPTNO SAL/ 12

    - - - - - - - - - - - - -

    20 66. 6667

    30 133. 333

    30 104. 167

    20 247. 917

    30 104. 16730 237. 5

    10 204. 167

    20 250

    10 416. 667

    30 125

    20 91. 6667

    30 79. 1667

    20 250

    10 108. 333

    30

  • 7/29/2019 LS_curs_SQL

    31/49

    Luminia Scripcariu Limbajul SQL

    Variabile substituite cu dublu ampersand.

    Daca variabila este prefixata de dublu ampersand(&&),SQL*Plus va cere valoarea pentru

    variabila doar o singura data .SQL*Plus stocheaza prima valoare furnizata si o foloseste din

    nou de fiecare data cand declaratia SQL este rulata

    SELECT ENAME, DEPTNO, J OB

    FROM EMP

    WHERE DEPTNO = &&DEPTNO_PLEASE;

    Ent er val ue f or dept no_pl ease: 10

    ENAME DEPTNO J OB

    - - - - - - - - - - - - - - - - - - -

    CLARK 10 MANAGER

    KI NG 10 PRESI DENT

    MI LLER 10 CLERK

    Puteti folosi comanda SQL*Plus DEFINE pentru a determina daca variabila este deja

    definita.Daca variabila este deja definita se afiseaza valoarea asignata.

    SQL> DEFI NE

    DEFI NE DEPTNO_PLEASE = "10" ( CHAR)

    Comanda DEFINE

    O valoare poate fi asignata unei variabile folosind comanda DEF[INE] a lui

    SQL*PLUS.Valoarea definita trebuie referita intr-o construc- tie SELECT sau un fisier de

    comenzi , prefixind numele variabilei cu &. Variabilele pot fi golite folosind UNDEF[INE].

    31

  • 7/29/2019 LS_curs_SQL

    32/49

    Luminia Scripcariu Limbajul SQL

    In urmatorul exemplu , o variabila a fost definita folosind o expresie aritmetica ce calculeaza

    remuneratia. In urmatoarele constructii, variabila REM e referita de un numar de ori.

    Variabila e apoi golita fo- losind UNDEFINE.

    SQL> DEFI NE REM =' SAL*12+NVL( COMM, 0) '

    SQL&gt SELECT ENAME, J OB, &l t REM

    SQL&gt FROM EMP

    SQL&gt ORDER BY &l t REM;

    SQL &gt undef i ne REM

    ENAME J OB SAL*12+NUL( COMM, 0)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    SMI TH CLERK 9600

    J AMES CLERK 11400

    ADAMS CLERK 13200

    WARD SALESMAN 15500

    MI LLER CLERK 15600

    MARTI N SALESMAN 16400

    TURNER SALESMAN 18000ALLEN SALESMAN 19500

    CLARK MANAGER 29400

    BLAKE MANAGER 34200

    J ONES MANAGER 35700

    SCOTT ANALYST 36000

    FORD ANALYST 36000

    KI NG PRESI DENT 60000

    Ghilimelele pot fi deasemenea folosite si sunt optionale dar folositoare daca expresia contine

    blancuri sau apostrofi. Pornirea unui fisier cu comenzi care contine substitutii de variabile

    Presupunind ca doriti o serie de rapoarte care sa listeze angajatii cu functii diferite - de

    exemplu , una pentru SALESMEN , una pentru CLERKS, una pentru MANAGERS si tot

    asa.Cunoasteti cum sa folositi substitutia de variabile pentru a obtine aceste rapoarte dintr-o

    singura constructie SELECT.

    32

  • 7/29/2019 LS_curs_SQL

    33/49

    Luminia Scripcariu Limbajul SQL

    Cu toate acestea , exista o tehnica alternativa pe care s-o folositi si anume sa scrieti

    constructia SELECT intr-un fisier si apoi folosind comanda START sa-l executati.

    Aceasta tehnica impune folosirea unor substitutii speciale de variabile. Exista 9 asemenea

    variabile si ele au intregii de la 1 la 9 ca nume. Pentru folosirea acestor variabile , puneti un

    '&' urmat de un intreg (1-9) in comanda SQL.Aceste variabile pot fi folosite de ori de cite ori

    doriti si in orice ordine .

    De fiecare data cind comanda e rulata, fiecare '&1' din comanda e inlocuit de primul

    parametru dupa START fisier, fiecare '&2' e inlo- cuit de al doilea parametru s.a.m.d.

    Pentru a crea un fisier de comenzi care ia un parametru specificind functia care trebuie afisata

    , introduceti:

    SELECT EMPNO, ENAME, SAL

    FROM EMP

    WHERE J OB = ' &l t 1' ;

    SQL&gt SAVE J OB1

    SQL*PLUS i ntoar ce mesaj ul :

    Cr eat ed f i l e j ob1

    Apoi r ul at i comanda cu paramet r ul ' CLERK' .

    SQL*PLUS i nl ocui est e var i abi l a cu val oar ea par amet r ul ui .

    SQL> START J OB1 CLERK

    EMPNO ENAME SAL

    - - - - - - - - - - - - -

    7369 SMI TH 800

    7876 ADAMS 1100

    7900 J AMES 950

    Observati ca nu se pot folosi variabile cind executati o comanda cu RUN. Trebuie sa

    introduceti comanda in fisier si sa o rulati cu START comanda.

    33

  • 7/29/2019 LS_curs_SQL

    34/49

    Luminia Scripcariu Limbajul SQL

    Comanda ACCEPT

    Comanda ACCEPT permite unei variabile sa fie create si unei valori , care e introdusa sa fie

    memorata in ea. Aceasta variabila poate fi apoi referita in constructia SQL. ACCEPT este

    folosita deseori intr-un fisier de comenzi . Sunt citeva avantaje rezultate din folosirea lui

    ACCEPT pentru definirea substitutiei de variabile:

    Tipurile de date pot fi verificate Prompturile pot fi mai explicative Valorile de raspuns pot fi ascunse

    Sintaxa comenzii este:

    ACC[ EPT] var i abi l a [ NUMBER/ CHAR] [ PROMPT/ NOPROMPT ' t ext ' ] [ HI DE]

    Sintaxa + Descrierea

    NUMBER/CHAR

    determina tipul variabilei.Daca valoarea introdusa este nevalida , va fi afisat un mesaj.

    PROMPT 'text'

    afiseaza daca text e specificat

    NOPROMPT

    face ACCEPT sa sara o linie asteptind intrarea

    HIDE

    suprima raspunsul utilizatorului. folositor pentru parole

    Exemple

    SQL> ACCEPT SALARY NUMBER PROMPT ' Sal ar y f i gure : '

    Sal ar y f i gur e : 30000

    SQL&gt ACCEPT PASSWORD CHAR PROMPT ' Passwor d : ' HI DE

    Passwor d :

    34

  • 7/29/2019 LS_curs_SQL

    35/49

    Luminia Scripcariu Limbajul SQL

    SQL&gt ACCEPT COMM NUMBER NOPROMPT

    500

    SQL&gt DEFI NE

    DEFI NE SALARY =30000( NUMBER)DEFI NE PASSWORD ="FREEBI ES( CHAR)

    DEFI NE COMM =500( NUMBER)

    EXTRAGEREA DATELOR DIN MAI MULT DE O

    TABELA

    Join

    Join-ul este folosit cind o cerere SQL necesita date din mai multe tabele din baza de date.

    Liniile dintr-o tabela pot fi unite cu liniile din alta tabela in functie de valorile comune

    existente in coloanele corespunzatoare.

    Sint doua tipuri de conditie de join :

    1. Equi-join2. Non-equi-join

    Equi-join

    Pentru a determina angajatii din departamente, vom compara valorile din coloana DEPTNO a

    angajatului cu aceleasi valori din DEPTNO din tabela DEPT. Relatia dintre tabela EMP si

    DEPT este un equi-join, in care valorile din coloana DEPTNO din ambele tabele sint egale.(Operatorul de comparatie folosit este =.)

    35

  • 7/29/2019 LS_curs_SQL

    36/49

    Luminia Scripcariu Limbajul SQL

    O conditie de join este specificata in clauza WHERE:

    SELECT col umn( s)

    FROM t abl esWHERE j oi n condi t i on i s . . .

    Pentru a face join pe cele doua tabele EMP si DEPT, introducem:

    SELECT ENAME, J OB, DNAME

    FROM EMP, DEPT

    WHERE EMP>DEPTNO + DEPT>DEPTNO;

    ENAME J OB DNAME

    - - - - - - - - - - - - - - - - - - - -

    CLARK MANAGER ACCOUNTI NG

    MI LLER CLERK ACCOUNTI NG

    KI NG PRESI DENT ACCOUNTI NG

    SMI TH CLERK RESEARCH

    SCOTT ANALYST RESEARCH

    J ONES MANAGER RESEARCH

    ADAMS CLERK RESEARCH

    FORD ANALYST RESEARCH

    ALLEN SALESMAN SALES

    BLAKE MANAGER SALES

    TURNER SALESMAN SALES

    J AMES CLERK SALES

    MARTI N SALESMAN SALES

    WARD SALESMAN SALES

    Vom observa ca acum fiecare angajat are listat numele departamentului lui.

    Liniile din EMP sint combinate cu liniile din DEPT si sint intoarse doar liniile pentru care

    valorile EMP.DEPTNO si DEPT.DEPTNO sint eale.

    Observati ca, conditia de join specifica numele coloanei precedat de numele tabelei.Aceasta

    este o necesitate cind numele coloanelor sint aceleasi in ambele tabele.Este necesar sa

    specificam exact ce coloane sint referite.

    36

  • 7/29/2019 LS_curs_SQL

    37/49

    Luminia Scripcariu Limbajul SQL

    Aceasta necesitate este de asemenea aplicata coloanelor care pot fi ambigue in clauzele

    SELECT sau ORDER BY.

    Pentru a recunoaste diferentele dintre coloana DEPTNO din EMP si coloana DEPTNO din

    DEPT, introducem:

    SELECT DEPT. DEPTNO, ENAME, J OB, DNAME

    FROM EMP, DEPT

    WHERE EMP. DEPTNO = DEPT. DEPTNO

    ORDER BY DEPT. DEPTNO;

    DEPTNO ENAME J OB DNAME

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    10 CLARK MANAGER ACCOUNTI NG

    10 MI LLER CLERK ACCOUNTI NG

    10 KI NG PRESI DENT ACCOUNTI NG

    20 SMI TH CLERK RESEARCH

    20 SCOTT ANALYST RESEARCH

    20 J ONES MANAGER RESEARCH

    20 ADAMS CLERK RESEARCH

    20 FORD ANALYST RESEARCH30 ALLEN SALESMAN SALES

    30 BLAKE MANAGER SALES

    30 TURNER SALESMAN SALES

    30 J AMES CLERK SALES

    30 MARTI N SALESMAN SALES

    30 WARD SALESMAN SALES

    Observati ca fiecarui numar de departament din tabela DEPT i se face join pentru a se potrivi

    cu numerele de departament din tabela EMP.De exemplu, trei angajati lucreaza in

    departamentul 10 - Accounting - deci exista trei potri- viri.Prin urmare ACCOUNTING este

    afisat pentru fiecare angajat din acel departament. combinarea tuturor liniilor din toate

    tabelele.

    Non-Equi-Join

    Relatia dintre tabelele EMP si SALGRADE este un non-equi-join, in care nici o coloana din

    EMP nu corespunde direct cu o coloana din SALGRADE.Relatia este obtinuta folosind un

    37

  • 7/29/2019 LS_curs_SQL

    38/49

    Luminia Scripcariu Limbajul SQL

    operator, altul decit operatorul de egalitate (=).Pentru a evalua gradatia unui anajat, salariul

    lui trebuie sa fie intre salariul minim si salariul maxim.

    Operatorul BETWEEN este folosit pentru a construi conditia, introducem:

    SELECT E. ENAME, E. SAL, S. GRADE

    FROM EMP E, SALGRADE S

    WHERE E. SAL BETWEEN S. LOSAL AND S. HI SAL;

    ENAME SAL GRADE

    - - - - - - - - - - - - - - - - - - - - - - - - -

    SMI TH 800. 00 1

    ADAMS 1, 100. 00 1

    J AMES 950. 00 1

    WARD 1, 250. 00 2

    MARTI N 1, 250. 00 2

    MI LLER 1, 300. 00 2

    ALLEN 1, 600. 00 3

    TURNER 1, 500. 00 3

    J ONES 2, 975. 00 4

    BLAKE 2, 850. 00 4

    CLARK 2, 450. 00 4SCOTT 3, 000. 00 4

    FORD 3, 000. 00 4

    KI NG 5, 000. 00 5

    Alti operatori cum ar fi = pot fi folositi, oricum BETWEEN este cel mai simplu.Nu

    uitati sa specificati mai intii valoarea minima si ultima va- loarea maxima cind folositi

    BETWEEN.Din nou sint folosite alias-uri de tabele, nu din cauza posibilelor ambiguitati, dar

    din motive de performanta.

    Reguli pentru join-ul tabelelor

    Pentru a face join pe cele trei tabele este necesar sa construim doua condi- tii de join.Pentru a

    face join pe patru tabele sint necesare minim trei condi- tii de join.

    O regula simpla este:

    numarul minim de conditii de join = numarul de tabele - 1

    38

  • 7/29/2019 LS_curs_SQL

    39/49

    Luminia Scripcariu Limbajul SQL

    Aceasta regula nu poate fi aplicata daca tabela are o cheie primara, care identifica in mod

    unic fiecare linie (cheile primare sint explicate mai tirziu in manual).

    Sintaxa

    SELECT [ DI STI NCT] {[ t abel a] . * | expr esi e [ al i as] , . . . }

    FROM t abel a [ al i as] , . . .

    WHERE [ condi t i e de j oi n] . . .

    AND [ condi t i e de l i ni e] . . .

    OR [ al t a condi t i e de l i ni e]

    GROUP BY {expresi e | col oana}

    HAVI NG {condi t i e de grup}

    ORDER BY {expr esi e | col oana} [ ASC | DESC]

    Observatii

    Se pot specifica conditii de join impreuna cu alte conditii (non join); De asemenea trebuie sa fiti atenti la precedenta operatorilor cind folo- siti predicatul

    OR.

    Limbajul de manipulare a datelor

    Inserarea de noi linii intr-o tabela

    Comanda INSERT este folosita pentru a adauga linii unei tabele.Sintaxa comenzii INSERT

    este:

    I NSERT I NTO nume t abel a [ ( col oana, col oana, . . . . ) ]

    VALUES ( val oar e, val oar e, . . . . ) ;

    Este posibila inserarea unei noi linii cu valori in fiecare coloana, in care caz lista de coloane

    nu este ceruta. Este recomandat ca COLUMN LIST sa fie intotdeauna specificata. Daca lista

    nu este specificata, software-ul va cere modificari oriunde definitia tabelei este modificata.

    Pentru a insera un nou departament, introduceti:

    39

  • 7/29/2019 LS_curs_SQL

    40/49

    Luminia Scripcariu Limbajul SQL

    I NSERT I NTO DEPT ( DEPTNO, DNAME, LOC)

    VALUES ( 50, ' MARKETI NG' , ' SAN J OSE' ) ;

    Pentru a intra intr-un departament nou, omitand numele departamentului, lista de coloanetrebuie specificata:

    I NSERT I NTO DEPT ( DEPTNO, LOC)

    VALUES ( 50, ' SAN J OSE' ) ;

    Copierea de linii din alta tabela

    I NSERT I NTO tabel a [ ( col oana, col oana, . . . . ) ]SELECT l i st a- sel ect

    FROM t abel a( e)

    Aceasta forma a declaratiei INSERT va permite sa inserati cateva linii intr-o tabela unde

    valorile sunt derivate din continutul tabelelor existente in baza de date.

    Pentru a copia toate informatiile din departamentul 10 in tabela D10HISTORY, introduceti:

    I NSERT I NTO D10HI STORY

    ( EMPNO, ENAME, SAL, J OB, HI REDATE

    FROM EMP

    WHERE DEPTNO=10;

    Notati ca cuvantul cheie 'VALUES' nu este folosit aici.

    Actualizarea liniilor

    Declaratia UPDATE va permite sa schimbati valori in liniile unei tabele.

    UPDATE t abel a[al i as]

    SET col oana [ , col oana. . . ] = {expr esi e, subcer er e}

    [ WHERE condi t i e] ;

    De exemplu:

    Pentru a actualiza linia lui Scott, introduceti:

    40

  • 7/29/2019 LS_curs_SQL

    41/49

    Luminia Scripcariu Limbajul SQL

    UPDATE EMP

    SET J OB=' SALESMAN' ,

    HI REDATE = SYSDATE,

    SAL = SAL*1. 1WHERE ENAME = ' SCOTT' ;

    1 recor d updated.

    Daca clauza WHERE este omisa, toate liniile din tabela vor fi actualizate. Este posibil sa

    folositi subcereri inlantuite si subcereri corelate in decla- ratia UPDATE.

    Sa presupunem ca ati avut o cifra noua de comisioane pentru angajati siguri. De exemplu,

    tabela COMMISSION de mai jos este folosita pentru a actualiza li- nii sigure ale tabelei

    EMP:

    COMMI SSI ON EMP

    EMPNO COMM EMPNO COMM

    - - - - - - - - - - - - - - - - - - - -

    7499 1100 7499 300

    7654 500 7654 14007844 3500 7844 0

    7844 2000

    7844 1500

    TRANZACTII

    Procesarea unei Tranzactii

    O tranzactie este o operatie asupra unei baze de date care implica una sau mai multe

    modificari in una sau mai multe tabele. Exista doua clase de tranzactii. Tranzactii DML care

    contin un numar oarecare de blocuri DML si pe care ORACLE le trateaza ca o singura

    entitate sau o singura unitate logica de lucru, si tranzactii DDL care contin un singur bloc

    DDL.

    41

  • 7/29/2019 LS_curs_SQL

    42/49

    Luminia Scripcariu Limbajul SQL

    Nu pot exista situatii "jumatate de drum" in timpul executiei unei tranzactii, asa incat unele

    modificari specificate in tranzactie sa fie aplicate bazei de date si altele nu. Pentru fiecare

    tranzactie ori toate modificarile sunt aplicate bazei de date, ori nici una din modificari nu este

    indeplinita ( sunt toate abandonate - discarded ).

    O tranzactie incepe cand prima comanda executabila DML sau DDL este intalnita si se

    termina in una din urmatoarele situatii :

    Intalneste COMMIT/ROLLBACK Comanda DDL se termina Anumite erori (DEADLOCK) EXIT - iesire din SQL*Plus Eroare sistem

    Un bloc DDL este executat automat si de aceea implicit incheie o tranzactie.

    Dupa incheierea unei tranzactii, urmatorul bloc executabil SQL va lansa automat urmatoarea

    tranzactie.

    Permanentizarea Modificarilor

    Pentru ca modificarile sa ramana permanente, ele trebiue executate asupra bazei de date.

    comanda COMMIT realizeaza permanentizarea modificari- lor; ROLLBACK permite sa

    abandonam sau sa anulam modificarile. Modifiacrea, sau modificarile, executate asupra bazei

    de date intre 2 comenzi COMMIT reprezinta o tranzactie. Pana cand tranzactia nu este

    executata, nici una din modificari nu este vizibila utilizatorilor.

    Inlaturarea Modificarilor Nedorite

    Modificarile neexecutate pot fi abandonate prin comanda ROLLBACK. ROLLBACK va

    atribui datelor valorile care acestea le aveau imediat dupa executarea ultimului COMMIT

    prin anularea tuturor modificarilor facute dupa ultimul COMMIT.

    Erorile de Sistem

    Cand o tranzactie este intrerupta de o eroare serioasa, de exemplu o eroare de sistem, intreaga

    tranzactie este anulata. Aceasta previne erorile datorate modificarilor nedorite asupra datelor,

    42

  • 7/29/2019 LS_curs_SQL

    43/49

    Luminia Scripcariu Limbajul SQL

    si realizeaza intoarcerea tabelelor la starile de dupa ultimul COMMIT. In acest fel SQL*Plus

    protejea- za integritatea tabelelor.

    Anularea automata este cauzata cel mai des de catre o eroare de sistem, ca de exemplu o

    resetare a sistemului sau o cadere de tensiune. Erorile de tastare a comenzilor, ca de exemplu

    tastarea gresita a unor nume de coloane sau incercarile de a realiza operatii neautorizate

    asupra tabelelor altor utilizatori, nu intrerup tranzactia si nu realizeaza anu- larea automata.

    Aceasta se datoreaza faptului ca aceste erori sunt detectate in cursul compilarii (de catre

    PARSER) ( cand un bloc SQL este scanat si verificat), si nu in timpul executiei.

    O tranzactie noua este lansata urmand unui COMMIT sau ROLLBACK - adica cand primul

    bloc executabil DML sau DDL este intalnit.

    Semnificatia Tranzactiilor

    ORACLE asigura consistenta datelor bazata pe tranzactii. Tranzacti ile dau utilizatorului mai

    multa flexibilitate si control la lucrul asupra datelor, si asigura consistenta datelor in cazul

    unei erori a procesului utilizator sau a unei erori de sistem.

    Tranzactiile ar trebui sa contina doar acele comenzi DML care realizeaza o singura

    modificare asupra datelor. De exemplu un transfer de fonduri (sa spunem 1000$) intre 2

    conturi ar trebui sa implice un debit al unui cont de 1000$ si un credit al altui cont de 1000$.

    Ambele actiuni ar trebui sa se incheie cu succes sau sa dea eroare impreuna. Creditul nu ar

    trebui executat fara debit.

    Controlul Tranzactiilor cu Instructiuni SQL

    Urmatoarele instructiuni SQL sunt utilizate cand apar executii (commit) sau refaceri(rollback) :

    COMMIT[WORK] SAVEPOINT nume_savepoint ROLLBACK[WORK] to [SAVEPOINT] nume_savepoint

    De notat ca COMMIT si ROLLBACK sunt instructiuni (blocuri) SQL.

    Cele 3 blocuri SQL utilizate pentru controlul tranzactiilor sunt explicate mai jos:

    43

  • 7/29/2019 LS_curs_SQL

    44/49

    Luminia Scripcariu Limbajul SQL

    COMMIT[WORK]

    Sintaxa : COMMIT[WORK];

    Permanentizeaza schimbarile in tranzactia curenta Sterge toate punctele de salvare (savepoint) din tranzactie Termina tranzactia Elibereaza toate blocarile (Lock) tranzactiei Cuvantul cheie WORK este optional Utilizatorul trebuie sa expliciteze sfarsitul tranzactiei in programul aplicatie utilizand

    COMMIT (sau ROLLBACK). Daca nu se executa explicit tranzactia si programul se

    termina anormal, ultima tranzactie executata va fi anulata. Executii implicite (commit) apar in urmatoarele situatii :

    o inainte de o comanda DDLo dupa o comanda DDLo la inchiderea mormala a unei baze de date

    Blocurile DDL cauzeaza mereu executii (commit) in timpul executiei lor. Daca introduceti un

    bloc DDL dupa cateva blocuri DML, blocul DDL cauzeaza aparitia unui commit inaintea

    propriei executii, incheind tranzactia curenta. Astfel daca blocul DDL este executat pana la

    capat, este si inregistrat.

    SAVEPOINT

    Sintaxa : SAVEPOINT nume_savepoint

    Exempl u :

    SAVEPOI NT t ermi nare_act ual i zar i

    Poate fi utilizat pentru a imparti o tranzactie in bucati mai mici Punctele de salvare (savepoints) permit utilizatorului sa retina toata munca sa la orice

    moment din timp, cu optiunea de a inregistra mai tarziu totul sau a anula totul sau o

    parte din ea. Astfel, pentru o tran- zactie lunga, se pot salva parti din ea, pe masura

    44

  • 7/29/2019 LS_curs_SQL

    45/49

    Luminia Scripcariu Limbajul SQL

    executiei, la sfarsit inregistrandu-se sau refacandu-se continutul initial. La aparitia

    unei erori nu trebuie executat din nou fiecare bloc.

    La crearea unui nou punct de salvare cu acelasi nume ca al unuia dinainte, primulpunct este sters.

    Numarul maxim de puncte de salvare pentru un proces utilizator este implicit 5.Aceasta limita poate fi schimbata.

    ROLLBACK[WORK] t o [ SAVEPOI NT] nume_punct _sal var e Instructiunea ROLLBACK este utilizata pentru a reface un lucru. Cuvantul cheie "work" este optional. Intoarcerea la un punct de salvare este de

    asemenea optionala.

    Daca se utilizeaza ROLLBACK fara clauza TO SAVEPOINT, atunci :o se termina tranzactiao se anuleaza modificarile din tranzactia curentao sterge toate punctele de salvare din tranzactieo elibereaza blocarile tranzactiei

    Intoarcerea la Nivel de Bloc

    O parte a unei tranzactii poate fi anulata. Daca un singur bloc DML da eroare, ORACLE V6

    va intoarce inapoi doar acel bloc. Aceasta facilitate este cunoscuta ca STATEMENT LEVEL

    ROLLBACK. Intoarcerea la nivel de bloc inseamna daca un singur segment DML da eroare

    la executia unei tranzactii, efectul lui este anulat, dar schimbarile realizate de precedentul

    bloc DML in tranzactie nu vor fi anulate si pot fi inscrise (COMMIT) sau intoarse

    (ROLLBACK) explicit de catre utilizator.

    Daca blocul este unul de tip DDL, inscrierea (commit) care precede imediat acest bloc nu este

    anulata (schimbarile au fost facute deja permanen- te). ORACLE realizeaza intoarcerea la

    nivel de bloc prin crearea unui punct de salvare implicit inainte de executarea fiecarei

    comenzi DML. Utilizatorul nu poate referi caest punct de salvare in mod direct.

    Astfel, daca va intoarceti la un punct de salvare, atunci:

    anulati o parte din tranzactie

    45

  • 7/29/2019 LS_curs_SQL

    46/49

    Luminia Scripcariu Limbajul SQL

    se retine punctul de salvare pentru intoarcere, dar se pierd toate celelalte punct createdupa punctul de salvare numit.

    se elibereaza toate blocarile de tab ele si linii.

    Intoarceri Implicite

    Intoarcerile implicite apar cand se intalnesc terminari anormale ale executiei (de exemplu

    cand se intrerupe un proces utilizator). Intoarcerile implicite la nivel de bloc apar la eroarea

    de executie a unui bloc.

    Este recomandat ca tranzactiile sa se termine explicit utilizand COMMIT[WORK] ori

    ROLLBACK[WORK].

    Urmatorul exemplu demonstreaza utilizarea unui punct de salvare, si a instructiunilor

    ROLLBACK si COMMIT.

    I NSERT I NTO DEPT

    VALUES

    ( 50, ' TESTI NG' , ' LAS VEGAS' ) ;

    SAVEPOI NT i nsert _done;

    UPDATE DEPT

    SET DNAME = ' MARKETI NG' ;

    ROLLBACK TO i nser t _done ( modi f i car i l e sunt abandonate ) ;

    UPDATE DEPT

    SET DNAME = ' MARKETI NG' ( r evi zui m comanda UPDATE )

    WHERE DNAME = ' SALES' ;

    COMMI T;

    46

  • 7/29/2019 LS_curs_SQL

    47/49

    Luminia Scripcariu Limbajul SQL

    AUTOCOMMI T

    COMMIT sau ROLLBACK pot fi date manual sau automat prin utilizarea optiunii

    AUTOCOMMIT a comenzii SET. Optiunea AUTOCOMMIT controleaza cand schimbarile

    intr-o baza de date sunt facute permanente.

    Exista doua setari :

    COMANDA + DESCRIEREA

    SET AUTO[COMMIT] ON

    COMMIT este utilizat automat la fiecare INSERT, UPDATE sau DELETESET AUTO[COMMIT] OFF

    COMMIT poate fi utilizata de utilizator explicit. De asemenea, COMMIT se executa

    cand apare comanda Z (specifica VAX), cand se executa comenzile DROP, ALTER

    sau CREATE, sau la iesirea din SQL*Plus. ROLLBACK poate fi executat explicit de

    catre utilizator pentru refacerea bazei de date.

    De retinut ca SET este o comanda SQL*Plus.

    Consistenta la Citire

    Utilizatorii bazelor de date fac doua tipuri de accesuri asupra bazelor de date:

    Operatii de citire ( SELECT ) Operatii de scriere ( INSERT, UPDATE, DELETE )

    Cititorului si scriitorului unei baze de date trebuie sa i se garanteze o vedere consistenta

    asupra bazei de date. Cititorii nu trebuie sa vizulaizeze o data care este in curs de modificare.

    Si scriitorii trebuie sa fie siguri ca schimbarile intr-o baza de date sunt facute intr-un mod

    consistent : schimbarile facute de un scriitor sa nu distruga sau sa intre in confilct cu

    schimbarile pe care le face un alt scriitor.

    47

  • 7/29/2019 LS_curs_SQL

    48/49

    Luminia Scripcariu Limbajul SQL

    Scopul consistentei la citire este acela de a asigura faptul ca fiecare utilizator vede data ca

    fiind cea de la ultimul COMMIT, inainte ca o operatie DML sa inceapa.

    Consistenta la citire este implementata prin tinerea unor copii partiale ale bazei de date in

    segmente de intoarcere (ROLLBACK).

    Cand de executa operatii de scriere intr-o baza de date, ORACLE va face o copie a datelor

    onainte de schimbare si o va scrie intr-un segment de intoarcere.

    Toti cititorii, exceptandu-i pe cei care au facut schimbarile, inca mai vad baza de date care

    exista inainte ca schimbarile sa fie facute - ei vad segmentul de intoarcere de fapt.

    Oricum, inainte ca schimbarile sa fie facute permanente in baza de date, doar utilizatorul care

    modifica datele poate sa vada baza de date cu alteratiile incorporate. Toti ceilalti vad baza

    nemodificata ( fereastra din segmentul de intoarcere ). Aceasta garanteaza citirea unor date

    consistente care nu fac subiectul unor modificari in curs.

    Cand un bloc DML se executa, schimbarile facute in baza de date devin vizibile oricarui

    utilizator care executa SELECT. Modificarile sunt facute 'universale' si acum toti utilizatorii

    vad baza de date cu modificarile incorporate.

    Spatiul ocupat de catre 'vechile' date in segmentul de intoarcere este eliberate pentru a fi

    reutilizat.

    Daca tranzactia este anulata (ROLLBACK), atunci toate schimbarile sunt 'anulate' :

    Versiunea veche ('originala') a bazei de date aflata in segmentul de intoarcere estescrisa inapoi ('recuperata') in baza de date.

    Toti utilizatorii vad baza de date existenta inainte de inceperea tranzactiei.

    Tranzactii de Citire

    Implicit, modelul consistent al ORACLE RDBMS garanteaza ca rezultatul executiei unui

    bloc este consistenet. Oricum, in anumite situatii se poate dori chestionarea unor blocuri

    multiple asupra datelor din mai multe tabele si se doreste asigurarea ca datele sunt

    consistente. Adica, re- zultatele in orice tabela sunt consistente in timp in raport cu rezultateledin orice alta tabela.

    48

  • 7/29/2019 LS_curs_SQL

    49/49

    Luminia Scripcariu Limbajul SQL

    Linia de comand SQL :

    SET TRANSACTION READ ONLY

    este utilizat pentru a ncepe o tranzacie de citire exclusiv.

    Consistenta la citire pe care READ ONLY o furnizeaza este implementa- ta in acelasi fel cu

    consistenta la nivel de bloc - utilizand segmente de intoatcere. Fiecare bloc vede implicit o

    fereastra consistenta a datelor la momentul inceperii blocului. Aceasta facilitate este foarte

    folositoare pentru rapoarte care ruleaza mai multe chestionari asupra mai multor tabele in

    timp ce alti utilizatori actualizeaza aceleasi tabele.