Lucrare de curs BDC

download Lucrare de curs BDC

of 17

Transcript of Lucrare de curs BDC

  • 8/10/2019 Lucrare de curs BDC

    1/17

    Ministerul Educaiei al Republicii Moldova

    Universitatea Tehnic din Moldova

    FCIM

    Catedra Automatic i Tehnologii Inormaionale

    !isciplina" #a$e de date i Cuno tin e

    %ucrare de curs

    Tema" Controlul e&plicit al cursoarelor

    A elaborat" 'tudent grupa" TI ( )))*oloceai +etru

    A veriicat" %ector superior ,

    #ulai Rodica

    Chiinu -.)/

  • 8/10/2019 Lucrare de curs BDC

    2/17

    -

    Cuprins:

    Introducere 3

    1 Cursoare. Operaii cu cursoare 41.1 Utilizarea cursoarelor 41.2 Crearea cursoarelor 41.3 Controlul explicit al cursorului - pa ii separati 51.3.1 Instruc i unea CURSOR 51.3.2 Instruc iu nea OP! "1.3.3 Instruc i unea #$C% "1.3.4 Instruc iu nea C&OS '1.4 (tri)ute explicite pentru cursoare '1.5 Controlul extra*erilor +ultiple din cursoare explicite '1." Cursoarele si inre*istrarile ,

    1.' #olosirea clauzei %R CURR!$ O# 1., Cursoare cu para+etri 1/1. Cicluri &OOP cursor 1/1.1/ Cicluri #OR cursor cu para+etri 111.11 Su)expresii select 0n ciclurile #OR 12

    2. xe+ple i concluzii 132.1 Ctea cuinte despre eicien 132.2 xe+ple co+entate 142.3 nc6iderea cursoarelor 15

    Concluzii: 1'

    7i)lio*raie: 1'

  • 8/10/2019 Lucrare de curs BDC

    3/17

    0

    Introducere

    1peraiile de regsire din '2% uncionea$ cu seturi de r3nduri cunoscute sub numele de

    seturi de re$ultate, R4ndurile returnate sunt toate r4ndurile care corespund criteriilor de cutare

    incluse 3ntr5o instruciune '2%6 3n numr de $ero sau mai multe, Folosind instruciuni 'E%ECT

    simple6 nu e&ist nici o modalitate de a regsi primul r3nd6 r4ndul urmtor sau precedentele ).r3nduri, Aceasta este o parte integrant a modului de uncionare a unui programde tip '7#!,

    Uneori6 este necesar deplasarea printre r3nduri 3nainte sau 3napoi6 cu unul sau mai multer4nduri deodat, +entru aceasta se utili$ea$ cursoarele, Un cursor este o interogare de ba$e de

    date stocat pe serverul '7#! ( nu o instruciune 'E%ECT6 ci setul de re$ultate regsit de

    instruciunea respectiv, 1 dat cursorul stocat6 aplicaiile pot derula sau parcurge datele 3n sus i

    3n 8os6 dup necesiti,

    !ieritele programe de tip '7#! accept dierite opiuni i caracteristici ale cursoarelor,

    +rintre cele mai comune se numr"

    5 capacitatea de a desemna un cursor ca iind de tip read5onl9 :numai pentru citire;6astel 3nc4t datele s poat i citite6 dar nu i actuali$ate sau t erseename / GIN THEN

    DELETE FROM em$ WHERE CURRENT OF c,+

    'a luam un e&emplu comlet, n blocul de mai 8os se prelucrea$a iecare r4nd din tabela

    LdepL6 mut4nd departamentul 'A%E' 3n locaia !allas i celelalte departamente la e PorQ, !e

    asemenea se ine un contor al departamentelor plasate 3n iecare loca ie,DECLARE

    CURSOR c, IS

    SELECT name- loc FROM e$t

    FOR U6DATE OF loc +

    e$t_rec c,?ROWT56E+

    sales_count NUMER/1 +

    non_sales NUMER / 1+

    EIN

    O6EN c,+

    LOO6

    FETCH c, INTO e$t_rec+

    E@IT WHEN c,?NOTFOUND+

    IF e$t_rec>name / SALES AND e$t_rec>loc / DALLAS

    THEN

    U6DATE e$t SET loc / DALLAS WHERE

    CURRENT OF c,+

    sales_count / sales_count ,+

    ELSIF e$t_rec>name / SALES AND e$t_rec>loc / NEW

    5ORG

    THENU6DATE e$t SET loc / NEW 5ORG WHERE CURRENT OF c,+

    non_sales / non_sales , +

    END IF+

    END LOO6+

    CLOSE c,+

    INSERT INTO counts #sales_set- non_sales_set %

    JALUES #sales_count- non_sales%+

    COMMIT+

    END+

  • 8/10/2019 Lucrare de curs BDC

    10/17

    ).

    1., Cursoare cu para+etri

    +arametrii permit transmiterea unor valori unui cursor c4nd acesta este deschis i

    utili$area 3n cererile care se e&ecut,

    Aceasta 3nseamn c un cursor e&plicit poate i deschis de mai multe ori 3ntr5un bloc6

    3ntorc4nd seturi de lucru dierite cu iecare oca$ie,+arametrii s4nt deini i 3n instruciunea CUR'1R astel"CURSOR ienti! # $aram)name ata)t($e- $aram)name ate)

    t($e- >>> % IS 'uer()e$resion+

    Tipurile parametrilor s4nt acelea i cu ale variabilelor scalare6 dar nu primesc dimensiune,

    umele parametrilor sunt pentru reerire 3n cadrul e&presiei de cerere din cadrul cursorului i pot

    i tratate ca variabile +%B'2%, Urmtorul e&emplu arat numrul departamentului i t ipul 8obului

    care sunt transmise 3ntr5o clau$a ?@ERE prin parametrii +aram) i +aram-"

    CURSOR c, # 6aram, NUMER-6aram0 CHAR % IS SELECT ename- sal- .ireate

    FROM em$

    WHERE e$tno / 6aram,

    AND

    2o3 / 6aram0+

    C4nd cursorul este ulterior deschis6 valorile sunt transmise pentru iecare din parametrii

    3n mod po$iional, *alorile din +%B'2% sau variabile host pot i utili$ate i deasemenea ca litere,

    E&emplu"O6EN c, #91- ANAL5ST%+

    O6EN c, #$l_num- CLERG%+

    O6EN c, #,1- 2o3_t($e%+ )) 2o3_t($e este o =aria3ila 6LKSL

    1. Cicluri &OOP cursor

    +%B'2% oer un tip special de ciclu F1R pentru a prelucra r4ndurile 3ntoarse 3n cursorule&plicit, ntr5un ciclu F1R cursor6 un cursor declarat este deschis6 se eectuea$a e&trageri i esteinchis automat c4nd toate r4ndurile au ost prelucrate, Fiecare iteraie a ciclului e&trage un r4nddin setul activ 3ntr5o 3nregistrare6 care este declarat implicit pentru utili$are 3n cadrul ciclului,Ciclul este terminat automat la sir i tul iteraiei pentru ultimul r4nd e&tras,

    Ciclurile F1R cu cursor sunt structurate astel"

  • 8/10/2019 Lucrare de curs BDC

    11/17

    ))

    DECLARE

    CURSOR cursor_name " #$arameters%& IS 'uer()e$resion+

    EIN

    FOR recor)name IN cursor)name " #$arameters% &

    LOO6

    ))$rocesare =alori in rinul curent>END LOO6+

    nregistrarea numit 3n instruciunea F1R este declarat intern 3n ciclu i valabilitatea ei

    e&pir c4nd se termin ciclul, Fiecare iteraie provoac e&tragerea r4ndului urmtor din

    3nregistrare, !eoarece cursorul este declarat e&plicit 3n bloc6 atributele sale sunt disponibile 3n

    cadrul ciclului pentru testare6 dac este necesar,

    E&emplu"DECLARE

    CURSOR c, IS SELECT n,- n0- n9 FROM ata_ta3le+result NUMER+

    EIN

    FOR rec IN c, LOO6

    result / rec>n0 K #rec>n, rec>n9%+

    INSERT INTO tem$_ta3 JALUES #result%+

    END LOO6+

    COMMIT+

    END+

    1.1/ Cicluri #OR cursor cu para+etri

    !ac cursorul pe care 3l procesa i 3ntr5un ciclu F1R cursor a ost deinit cu parametrii6

    valorile :parametrii actuali; sunt date 3n parante$6 dup numele cursorului 3n instruciunea F1R,

    CURSOR c, #6aram, DATE % IS

    SELECT ename- 2o3 FROM em$

    WHERE .ireate 6aram, +

    EIN

    FOR em$_recor IN c, #1,)AN);0%

    LOO6

    )) =or !i acti=i an7a2atii e u$a ian;0

    END LOO6+

  • 8/10/2019 Lucrare de curs BDC

    12/17

    )-

    1.11 Su)expresii select 0n ciclurile #OR

    Am v$ut c ciclurile F1R cu cursor sunt un mod convenabil de a prelucra r4nduri dintr5

    un cursor e&plicit declarat 3n program, Ciclurile F1R pot i deasmenea utili$ate pentru a prelucra

    cereri multi5r4nd6 care sunt deinite la inceputul ciclului, 'tructura este aratat mai 8os"FOR rec)name IN #'uer()e$resion%

    LOO6

    END LOO6+

    E&presia cererii este considerat ca o sub5e&presie i este prelucrat 3ntr5un cursor care

    este intern ciclului F1R, !eoarece cursoarele nu sunt declarate cu nume6 atributele cursoarelornu sunt disponibile pentru testare, n aar c este mai simplu de scris6 aceast metod este imult mai eicient,

    E&emplu"FOr rec IN #SELECT ename FROM em$ WHERE e$tno / ,1 %

    LOO6

    IF rec>ename / ONES THEN

    END LOO6+

  • 8/10/2019 Lucrare de curs BDC

    13/17

    )0

    2. xe+ple i concluzii

    n capitolul ce urmea$ vor i cute conclu$iile i pr e$entate c4teva e&emple,

    2.1 Ctea cuinte despre eicien

    To i actorii care inluenea$a perorman a unui program '2% se aplic i la

    +%B'2%, Ace t ia includ"

    5 Inde&area coloanelor olosite 3n ?@ERE i 3n 8oin