Kas yra žymeklis PL / SQL?
Žymeklis yra šios konteksto srities rodyklė. „Oracle“ sukuria konteksto sritį, skirtą apdoroti SQL sakinį, kuriame yra visa informacija apie teiginį.
PL / SQL leidžia programuotojui valdyti konteksto sritį per žymeklį. Žymeklis laiko eilutes, kurias grąžina SQL sakinys. Eilių rinkinys, kurį žymeklis žymi kaip aktyvus rinkinys. Šiuos žymeklius taip pat galima pavadinti taip, kad juos būtų galima nukreipti iš kitos kodo vietos.
Šioje pamokoje sužinosite
- Numanomas žymeklis
- Aiškus žymeklis
- Žymeklio atributai
- FOR Loop Cursor pareiškimas
Žymeklis yra dviejų tipų.
- Numanomas žymeklis
- Aiškus žymeklis
Numanomas žymeklis
Kai duomenų bazėje įvyksta bet kurios DML operacijos, sukuriamas implicitinis žymeklis, kuriame laikomos paveiktos eilutės toje operacijoje. Šių žymeklių negalima pavadinti ir todėl jų negalima valdyti ar nukreipti iš kitos kodo vietos. Per žymeklio atributus galime nurodyti tik naujausią žymeklį.
Aiškus žymeklis
Programuotojams leidžiama sukurti pavadintą konteksto sritį, kad jie galėtų atlikti savo DML operacijas, kad galėtų geriau ją kontroliuoti. Aiškus žymeklis turėtų būti apibrėžtas PL / SQL bloko deklaracijos skyriuje ir sukurtas sakiniui „SELECT“, kurį reikia naudoti kode.
Toliau pateikiami veiksmai, susiję su darbu su atvirais žymekliais.
- Žymeklio deklaravimas
Žymeklio deklaravimas reiškia tiesiog sukurti vieną pavadintą konteksto sritį teiginiui „SELECT“, kuris yra apibrėžtas deklaracijos dalyje. Šios konteksto srities pavadinimas sutampa su žymeklio pavadinimu.
- Atidaromas žymeklis
Atidarę žymeklį, PL / SQL nurodys skirti atmintį šiam žymekliui. Tai padarys žymeklį paruoštą gauti įrašus.
- Gaunami duomenys iš žymeklio
Šiame procese vykdomas sakinys „SELECT“, o gautos eilutės saugomos skirtoje atmintyje. Dabar jie vadinami aktyviaisiais rinkiniais. Duomenų gavimas iš žymeklio yra įrašo lygio veikla, o tai reiškia, kad galime prieiti prie duomenų įrašais.
Kiekvienas „Fetch“ sakinys atgaus vieną aktyvų rinkinį ir talpins to konkretaus įrašo informaciją. Šis sakinys yra tas pats kaip „SELECT“ sakinys, kuris gauna įrašą ir priskiria kintamąjį sąlygoje „INTO“, tačiau išimčių nebus.
- Žymeklio uždarymas
Kai visas įrašas bus paimtas dabar, turime uždaryti žymeklį, kad būtų atlaisvinta šiai konteksto sričiai skirta atmintis.
Sintaksė:
DECLARECURSORIS
- Pirmiau pateiktoje sintaksėje deklaracijos dalyje yra žymeklio deklaracija ir žymeklio kintamasis, kuriame bus priskirti gauti duomenys.
- Žymeklis sukurtas teiginiui „SELECT“, nurodytam žymeklio deklaracijoje.
- Vykdymo dalyje deklaruojamas žymeklis atidaromas, gaunamas ir uždaromas.
Žymeklio atributai
Tiek numanomam, tiek aiškiam žymekliui yra tam tikri atributai, prie kurių galima prieiti. Šie atributai suteikia daugiau informacijos apie žymeklio operacijas. Žemiau pateikiami skirtingi žymeklio atributai ir jų naudojimas.
Žymeklio atributas | apibūdinimas |
RASTA | Jis grąžina loginį rezultatą „TRUE“, jei naujausia atkūrimo operacija sėkmingai atnešė įrašą, priešingu atveju jis grąžins FALSE. |
%NERASTAS | Tai veikia priešingai nei% FOUND, jis grąžins reikšmę „TRUE“, jei naujausia atkūrimo operacija negalėtų atgauti jokio įrašo. |
%ATIDARYTAS | Jis grąžina loginį rezultatą „TRUE“, jei nurodytas žymeklis jau atidarytas, kitu atveju jis pateikia „FALSE“ |
% ROWCOUNT | Jis grąžina skaitinę vertę. Tai nurodo faktinį įrašų, kuriuos paveikė DML veikla, skaičių. |
1 pavyzdys : Šiame pavyzdyje mes išsiaiškinsime, kaip deklaruoti, atidaryti, atnešti ir uždaryti aiškų žymeklį.
Mes suprojektuosime visą darbuotojo vardą iš emp lentelės naudodami žymeklį. Mes taip pat naudosime žymeklio atributą, norėdami nustatyti kilpą, kad iš žymeklio būtų paimtas visas įrašas.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Rezultatas
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Kodo paaiškinimas:
- 2 kodo eilutė : žymos guru99_det deklaravimas teiginiui „SELECT emp_name FROM emp“.
- 3 kodo eilutė : deklaruojamas kintamasis lv_emp_name.
- 5 kodo eilutė : žymeklio guru99_det atidarymas.
- 6 kodo eilutė: nustatydami „Basic loop“ sakinį, kad jis gautų visus įrašus lentelėje „emp“.
- 7 kodo eilutė: Gauna guru99_det duomenis ir priskiria reikšmę lv_emp_name.
- 9 kodo eilutė: naudodami žymeklio atributą „% NOTFOUND“ nustatykite, ar visas žymeklio įrašas yra paimtas. Jei bus paimtas, jis grąžins „TRUE“ ir valdiklis išeis iš kilpos, kitaip valdiklis toliau ims duomenis iš žymeklio ir spausdins duomenis.
- 11 kodo eilutė: ciklo sakinio sąlyga EXIT.
- Kodo 12 eilutė: atsispausdinkite paimto darbuotojo vardą.
- 14 kodo eilutė: naudodami žymeklio atributą „% ROWCOUNT“ suraskite bendrą įrašų, kuriuos paveikė / paėmė žymeklis, skaičių.
- 15 kodo eilutė: Išėjus iš kilpos, žymeklis uždaromas ir atlaisvinama skirta atmintis.
FOR Loop Cursor pareiškimas
„FOR LOOP“ sakinį galima naudoti dirbant su žymekliais. FOR ciklo sakinyje galime suteikti žymeklio pavadinimą, o ne diapazono ribą, kad kilpa veiks nuo pirmojo žymeklio įrašo iki paskutinio žymeklio įrašo. Žymeklio kintamąjį, žymeklio atidarymą, žymeklio paėmimą ir uždarymą atliks netiesiogiai FOR kilpa.
Sintaksė:
DECLARECURSORIS
- Pirmiau pateiktoje sintaksėje deklaracijos dalyje yra žymeklio deklaracija.
- Žymeklis sukurtas teiginiui „SELECT“, nurodytam žymeklio deklaracijoje.
- Vykdymo dalyje deklaruotas žymeklis yra nustatytas FOR kilpoje ir ciklo kintamasis „I“ šiuo atveju elgsis kaip žymeklio kintamasis.
1 pavyzdys : Šiame pavyzdyje mes suprojektuosime visą darbuotojo vardą iš „emp“ lentelės naudodami žymeklio-FOR kilpą.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/
Rezultatas
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY
Kodo paaiškinimas:
- 2 kodo eilutė : žymos guru99_det deklaravimas teiginiui „SELECT emp_name FROM emp“.
- 4 kodo eilutė : „FOR“ žymeklio kilpos konstravimas su ciklo kintamuoju lv_emp_name.
- 5 kodo eilutė: Darbuotojo vardo spausdinimas kiekvienoje ciklo iteracijoje.
- 8 kodo eilutė: išeikite iš kilpos
Pastaba: „Cursor-FOR“ kilpoje žymeklio atributų negalima naudoti, nes žymeklį atidaryti, atnešti ir uždaryti netiesiogiai atlieka FOR kilpa.