Uhvatio sam se učenja pl/sql-a i naletio na pokazivače... Ok, našao sam definiciju što su oni i tako ali nikako da dokučim čemu služe, tj. na nekakvom konkretnom primjeru???
Hvala!
Uhvatio sam se učenja pl/sql-a i naletio na pokazivače... Ok, našao sam definiciju što su oni i tako ali nikako da dokučim čemu služe, tj. na nekakvom konkretnom primjeru???
Hvala!
Uhvatio sam se učenja pl/sql-a i naletio na pokazivače... Ok, našao sam definiciju što su oni i tako ali nikako da dokučim čemu služe, tj. na nekakvom konkretnom primjeru???
Hvala!
Da ne mislis mozda na cursore?
Zar nisu cursori pokazivači? Da, na to mislim
Mi ih na FER-u nismo tako zvali. Pokazivaci su pointeri ( C/C++ ).
Evo ti jedan primjer di sam koristio kursore u diplomskom. Ko ti ne bude jasno pitaj.
--vraca dnevnu potrosnju ostvarenu treninzima
function vrati_dnevnu_potrosnju return number
is
v_potrosnja number default 0;
CURSOR c_myCursor is
select t.datum,
sta.trajanje,
v.met,
s.tezina
from vjezba v,
stavka_treninga sta,
trening t,
korisnik k,
status s
where s.status_id=t.status_id
and s.korisnik_id=k.korisnik_id
and t.korisnik_id=k.korisnik_id
and t.trening_id=sta.trening_id
and sta.vjezba_id=v.vjezba_id
and k.korisnik_ime = v('APP_USER')
and t.datum = trunc(to_date(sysdate), 'DDD');
begin
for r_myCursor in c_myCursor LOOP
v_potrosnja := v_potrosnja + ((r_myCursor.trajanje * r_myCursor.met * 3.5 *r_myCursor.tezina) / 200);
end loop;
return round(v_potrosnja);
end vrati_dnevnu_potrosnju;
Imaš pointere i cursore, jedni i drugi se mogu prevesti kao pokazivači. Mene zanimaju cursori
Ok, koja je sada uloga cursora u ovoj funkciji? Šta se to nije moglo napraviti recimo običnim upitom or whatever?
a kako bi drugacije obradio ove podatke nego preko kursora? Mozes ti dohvatiti neki redak u tablici, ali sto ces dalje s njime?
kursor mozes shvatiti kao neko polje u koje spremis varijable koje si dohvatio kroz jednu iteraciju petlje.
imas to super objasnjeno u knjigi: Oracle® PL/SQL™ by Example FOURTH EDITION
BTW. Ovo što ti je kolega pokazao, samo je jedna vrsta CURSOR-a, tj. jedan od načina kako da deklariraš CURSOR.
Ovaj kursor se mogao i ovako definirati (ne bi trebala deklaracija na vrhu)
declare
--neke varijable deklarirane
begin
for r_myCursor in (select t.datum,
sta.trajanje,
v.met,
s.tezina
from vjezba v,
stavka_treninga sta,
trening t,
korisnik k,
status s
where s.status_id=t.status_id
and s.korisnik_id=k.korisnik_id
and t.korisnik_id=k.korisnik_id
and t.trening_id=sta.trening_id
and sta.vjezba_id=v.vjezba_id
and k.korisnik_ime = v('APP_USER')
and t.datum = trunc(to_date(sysdate), 'DDD'))
LOOP
v_potrosnja := v_potrosnja + ((r_myCursor.trajanje * r_myCursor.met * 3.5 *r_myCursor.tezina) / 200);
end loop;
Isto tako imaš implicitne i eksplicitne(ovaj gore, tj oni koji se odnose na SELECT) CURSOR-e itd. Opet imaš dinamičke CURSOR-e (malo drugačije se definiraju od ovih gore). itd..
Googlaj malo ili gledaj na oracle stranici
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/cursor_declaration.htm (kreni od ovog).
P.S. Pl ti je programski dio Oracle-a (najlakše objasniti), gdje moraš nekako pristupiti do recorda (ne možeš direktno). Do record-a pristupaš preko SELECT-ova. Ako ti neki od SELECT-ova vraća više od jednog reda (jedan red možeš spremiti u varijable) onda su ti potrebni cursori (kroz koje se možeš LOOP-ati kao kroz polje u bilo kojem drugom jeziku). I da ove CURSOR-e ne zovu pokazivačima (valjda da se ne miješaju sa POINTER-ima koji se koriste u C/C++).
Hvala kolege! nakon par riješenih primjera je sve dobilo smisla