[ Bongo_zg @ 30.05.2008. 05:03 ] @
ako postoji package cursor, da li je dobro imati definiciju varijable u koju se sprema isto na razini packagea?

npr. ako imamo na razini packagea cursor tipa:
cursor c_tablica1(cp_id in number) is
select * from tablica where id=cp_id;

da li je best practice da u nastavku pise:
cv_tablica1 c_tablica1%rowtype;


ili bi se cursor varijabla trebala biti na razini packagea ili razini pojedine procedure/funkcije?
[ djoka_l @ 30.05.2008. 11:52 ] @
Sve zavisi od toga šta želiš da postigneš.

Na primer, ako ćeš kurzor koristiti u for petlji:

for c in c_tablica(bla_bla) loop
-- ostatak koda
null;
end loop;

tada je varijabla c automatski definisana i njen scope je u loop, tako da varijabla na nivou paketa ne treba.

Drugo, definisanje varijabli na nivou paketa vodi u "prljavo" programiranje, tj. funkcije ili procedure imaju "side" efekat. Tvoje funcije i procedure bi trebalo da vraćaju izlazne parametre kroz OUT promenljive ili izlaznu vrednost funkcije, a ne treba da petljaju po globalnim promenljivima (tako postaje vrlo teško da se pronađe greška).

Znači, na nivo paketa stavi samo one varijable koje su zaista globalne za paket.