[ tehno @ 18.07.2006. 07:24 ] @
Ne mogu u 9I da napravim view sa parametrom. Cini mi se da je u nekim ranijim verzijama Oracle-a to moglo. Ima li neko iskustva sa tim ?
[ dusanmiloradovic @ 18.07.2006. 07:59 ] @
Nije moglo nikada, ali postoji nacin da napravis nesto slicno.
Treba da napravis sistemski kontekst i da ga ukljucis u view.

Na primer:

create or replace context kontekst using podesi_kontekst
/
create or replace function podesi_kontekst(prom1 number,prom2 varchar2) as
begin
dbms_session.set_context( 'kontekst','prom1',to_char(prom1));
dbms_session.set_context('kontekst','prom2',prom2);
end;
/

create or replace view pom as
select * from tabela
where
prom1=to_number(sys_context('kontekst','prom1'))
and prom2=sys_context('kontekst','prom2')
/

Pre nego sto pozoves upit nad viewom pozoves podesi_kontakt.

[ tehno @ 18.07.2006. 12:17 ] @
Hvala, upotrebit cu ovo.
[ tehno @ 20.07.2006. 11:30 ] @
Moze li se na neki nacin videti spisak postojecih konteksta ? U Entrerprise manageru ih ne vidim, a u dictionary-ju postoji tabela ALL_CONTEXT, ali ona daje samo aktivne kontekste.
[ tehno @ 26.07.2006. 11:31 ] @
Postoji dba_context na sisteskom nalogu.
[ Dejan Topalovic @ 10.08.2006. 00:07 ] @
Upravo i ja masovno koristim parametrizovane poglede (parametrised views), a uskoro bih trebao slican princip koristiti i za Virtual Private Database u Oracleu.

Pri programiranju i testiranju performansi doticnih parametrizovanih pogleda (parametrised views; btw. ima li neko dobar prevod za ovo? :) ), otkrio sam da je veoma brze koristiti "inline SELECT query from dual", nego direktan poziv rutine sys_context, tako da bi prethodni primjer trebao izgledati ovako:
Code:
create or replace view pom as
select * from tabela
where
prom1= (select to_number(sys_context('kontekst','prom1')) from dual)
and prom2= (select sys_context('kontekst','prom2') from dual);

Jos nisam stigao potraziti i detaljno procitati neku literaturu u vezi internog funkcionisanja rutine sys_context, tako da ne mogu konkretno objasniti zasto je inline query from dual brzi, nego direktni poziv... Pretpostavljam da je zbog parsovanja, ali nisam siguran...